AH = 2的BIOS INT 13H每次只能读取72个扇区。为什么? [英] BIOS INT 13H with AH=2 can only read 72 sectors each time. Why?

查看:169
本文介绍了AH = 2的BIOS INT 13H每次只能读取72个扇区。为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using Bochs 2.4.5 to write a boot sector code. I use the INT 13H to read sectors from floppy. But I found that if the sector count to read > 72, the INT13 will fail. And the return code is AH=1. Below's the code and here is the INT13. The return code is AH=1.

为什么INT 13H无法读取超过72个扇区?

Why can't the INT 13H read more than 72 sectors?

   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 指令中,我找到了相应的代码。我在这里为其他人列出了它,就像我一样困惑。完整代码位于此处

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       }


推荐答案

您正在使用Bochs ,因此可以在 Boch BIOS源:BIOS正在对扇区数进行显式范围检查,如果大于72(或等于0),则会拒绝该检查。

You're using Bochs, so the answer can be found in the Bochs BIOS source: the BIOS is performing an explicit range check on the number of sectors, and rejecting it if it is greater than 72 (or equal to 0).

这篇关于AH = 2的BIOS INT 13H每次只能读取72个扇区。为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆