读取软盘时候
如果逻辑扇区为19的话
那么是不是在盘的0磁头1磁道(一个磁道18个扇区)2扇区
所以用int 13h的参数是
ah=02读
al=01读一个扇区
ch=01磁道号
cl=02扇区号
dh=00磁头号
dl=00驱动器
但是这样读取不了逻辑扇区19扇区是为何什么?
------解决方案--------------------------------------------------------
逻辑扇区编号是 00 开始的,int13h 里的物理扇区是 01 开始的。这个差异引起的?不过不应该是 19 对 15 这样大的差错。
------解决方案--------------------------------------------------------
软盘驱动读写还没写好么?可以DOS调试的啊,调试是最好的排错方式,但若果你不会,可以试着下载一个能正确运行的读软盘的程序段,然后把里面的入口参数改成和你的一样,如果成功了,那么再改出口参数,如果再可以了,再改程序主体,再将它从一行一行的改成和你的程序一模一样,哪一行错误了,就排错,这个虽然是笨方法,但是要是你不会调试,这个是个捷径。
(应当要学会调试的)
------解决方案--------------------------------------------------------
1 说绝对扇区号的时候是从0开始的,也就是说你这里说的19扇区实际上是第20个扇区
2 CHS格式中的扇区号是从1开始的
3 如果把CHS看做一个数字的话,那么C是最高位,S是最低位。所以应该是0-0-1, 0-0-2 ... 0-0-18, 0-1-1 ...
也就是说,你算错了……
扇区19应该是0柱面,1磁头,2扇区,也就是0-1-2
------解决方案--------------------------------------------------------
有这么个说法:MBR所在的整条磁道都是保留空间,也就是说0-0-x。所以逻辑分区会从0-1-1开始,如果这样算的话,那19扇区就是在1-0-2。
但是刚才用vmware建了个软盘试了一下,貌似逻辑分区直接从0扇区开始。
我也迷茫了…………
------解决方案--------------------------------------------------------
已经测试过了. 如果要读写软盘19扇区(LBA地址 18 ,LBA从0扇区开始) ,对应的参数为:
AH=02 功能读 AL=01 读一个扇区 CH=0 柱面 CL=1扇区 DH=1 磁头 DL=0 表示软驱
AX=0201 CX=0001 DX=0100
我是用VM虚拟机测试的. 首先用GRUB4DOS 引导光盘引导之后,进入GRUB4DOS的命令行环境,用 cat --hex(fd0)18+1 来查看软盘的19号扇区内容,注意 GRUB4DOS下面, cat 命令用于显示, hex 表示以十六进制显示扇区内容, 18表示LBA 地址18扇区 ,也就是软盘的第19个扇区,因为LBA起始地址为0,后面的+1 表示读取的是软盘的1个扇区.用GRUB4DOS显示完软盘的内容之后,进入纯DOS.注意,测试INT13 要在纯DOS环境.XP下面肯定不行的.
在DOS下面把软盘19号扇区内容读到内存200偏移地址开始的地方. 使用DEBUG的D命令查看内存内容,发现跟G4D下面看到的扇区内容是完全一样的.