AH = 2的BIOS INT 13H每次只能读取72个扇区.为什么?

smw*_*dia 7 c operating-system dos bios

我正在使用Bochs 2.4.5编写引导扇区代码.我使用INT 13H从软盘读取扇区.但我发现如果扇区计数读数> 72,则INT13将失败.返回码为AH = 1.下面是代码,这里是INT13.返回码为AH = 1.

为什么INT 13H不能读取超过72个扇区?

   xorb %ah, %ah
   xorb %dl, %dl
   int $0x13      # reset the floppy

   movw $0x8000, %ax
   movw %ax,%es        
   movw $0, %bx  # ES:BX is the buffer  
   movb $0x02, %ah
   movb $73, %al # how many sectors to read. 72 is ok, but >=73 is wrong.
   movb $0, %ch
   movb $1, %cl
   movb $0, %dh
   movb $0, %dl

   int $0x13
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

更新

按照Matthew Slattery的指示,我找到了相应的代码.我在这里列出的其他人和我一样困惑.完整代码位于此处.

7220       if ((drive > 1) || (head > 1) || (sector == 0) ||
7221           (num_sectors == 0) || (num_sectors > 72)) {
7222         BX_INFO("int13_diskette: read/write/verify: parameter out of range\n");
7223         SET_AH(1);
7224         set_diskette_ret_status(1);
7225         SET_AL(0); // no sectors read
7226         SET_CF(); // error occurred
7227         return;
7228       }
Run Code Online (Sandbox Code Playgroud)

Mat*_*ery 5

你正在使用Bochs,所以答案可以在Bochs BIOS源中找到:BIOS正在对扇区数进行显式范围检查,如果它大于72(或等于0)则拒绝它.