首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

为什么调用int 13h只能读一个磁道的17个扇区

2012-03-09 
求助:为什么调用int 13h只能读一个磁道的17个扇区?我想读取第17号逻辑扇区,程序是这样的。movah,02h读扇区

求助:为什么调用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会出错。如果真的需要批量读取扇区,就必须检测要读取的这一批扇区是否跨越了磁道,如果跨越了磁道,就必须分两次读完,即,第二次读取的时候,修改磁道号或者磁头号(根据逻辑扇区的编址方式而定)。

热点排行