写磁盘扇区,写问题的扇区数

时间:2019-07-26 22:36:06

标签: assembly x86-16 bios osdev

我正在尝试创建自己的非常基本的操作系统,并且试图弄清楚如何对磁盘进行读写。 我使用this website作为参考。

如果每个磁道的扇区数是17,为什么 AL 上升到128? 如果我将AL设置为20,将CL设置为1并写入一个(512 * 19)字节的字符串,因为扇区18和19不存在,那么最后1024个字节在哪里?

1 个答案:

答案 0 :(得分:3)

如果您要求写“ N个扇区,从{汽缸,汽缸盖,汽缸}的扇区开始”,而您要写入的扇区数则在不同的轨道上;然后:

  • 用于某些计算机上的某些设备; BIOS支持“多磁道”,当您到达前一磁道的末尾时,它将自动切换到下一磁道

  • 用于某些计算机上的某些设备; BIOS不支持“多轨”,当您到达前一轨的末尾时将返回错误

请注意,该BIOS功能的其他(可能更好)的引用(例如http://www.ctyme.com/intr/rb-0608.htm)没有提到128个扇区限制;并且在某些情况下,您可能可以写入255个扇区。

还请注意,有时对于软盘(尤其是对于不太常见的媒体格式,例如“ 1680 KiB”格式),BIOS不知道磁道上有多少扇区(它只是将命令推到软盘控制器并报告软盘控制器返回的任何错误),因此不支持多轨。对于这些情况,我隐约记得BIOS数据区中某种“驱动器参数表”,该位置软件(例如,古老的MS-DOS)篡改了该信息以更正BIOS使用的信息(使用BIOS中“ BPB”结构中的值软盘)。

也没有有关磁盘更改的通知/指示/保护措施。这意味着如果用户弹出软盘并将另一张软盘放入驱动器中,您将不会知道,并且您的软件将不知不觉地将错误的软盘丢弃。

最后(由于最大大小限制),硬盘驱动器在1990年代不赞成使用旧功能,而由一组新的磁盘IO功能(使用64位LBA地址且不使用CHS寻址)取代)称为“ int 0x13扩展名”。对于软盘而言,这种情况没有发生。因此对于不同类型的设备,最终需要使用不同的代码(使用不同的功能)。

当然,BIOS从来不是真正的正式标准(更像是一群试图相互模仿的随机制造商);现在软盘和BIOS都死了(被CD和USB闪存代替,并由UEFI代替);因此,所有“复古计算恐怖”都可以被(并且已经被许多人)忘记;使得现在很难找到任何最新信息(例如,影响各种计算机的“ BIOS错误”列表)。

相关问题