求助:为什么调用int 13h只能读一个磁道的17个扇区?
我想读取第 17 号逻辑扇区,程序是这样的。
mov ah, 02h ;读扇区
mov al, 01h ;要读扇区数
mov ch, 0h ;0柱面
mov cl, 12h ;第 18 个扇区
mov dh, 0h ;0磁头
mov dl, 0h ;软驱
int 13h
然后就出错了,错误代码为2。
在某个网站上查到的是这样:
02h address mark not found
为什么出错呢?
[解决办法]
int 13H 的02子功能读软盘时,一次最多可以读取18个扇区,因为调用时要指定磁头号,磁道号和扇区号。因为指定了磁头和磁道,而磁道内只有18个扇区,所以最多一次可以读取18个扇区。虽然使用了之多这个字眼,但是如果指定的起始扇区不是磁道内的第一个扇区,那么将不能读取18个扇区,而只能读到本磁道的结束为止。而且int 13 02子功能使用的扇区号是基于1的,如果使用0会出错。如果真的需要批量读取扇区,就必须检测要读取的这一批扇区是否跨越了磁道,如果跨越了磁道,就必须分两次读完,即,第二次读取的时候,修改磁道号或者磁头号(根据逻辑扇区的编址方式而定)。