我正在使用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
感谢您的帮助。
按照 Matthew Slattery 的指示,我找到了相应的代码。我在这里列出的其他人和我一样困惑。完整代码位于here。
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 }
答案 0 :(得分:5)
你正在使用Bochs,所以答案可以在Bochs BIOS source中找到:BIOS正在对扇区数进行显式范围检查,如果它大于72(或等于0)。
答案 1 :(得分:2)
Matthew Slattery指出的简单答案是,这只是Bochs执行的范围检查。这是基于2.88Mb软盘多磁道软盘控制器读取,限制为72个扇区。
幸运的答案是,由于向后兼容性而导致的当前BIOS仅支持单面读取,对于1.44Mb软盘,最多支持18个扇区。这取决于起始扇区,以便实际最大值将达到轨道上剩余的总数。从USB闪存驱动器启动和运行是os dev的过时软盘的简单替代方案。可以使用相同的BIOS磁盘/软盘功能,具体取决于引导驱动器标识符(dl
寄存器)。
答案 2 :(得分:0)
根据Standard Floppy Disks Supported by MS-DOS,1.44 MB软盘上每个磁道的扇区数为18.由于18 * 4 = 72,这可能是一个线索。 BIOS可能不希望一次读取超过一定数量的曲目。