我正在创建一个基本的MBR,它读取分区表并加载可引导分区的第一个扇区。我对CHS和LBA寻址模式感到困惑。我在教程中读到CHS或多或少没有被使用,除了兼容性原因。 所以,我选择使用LBA(INT 13h扩展)。要加载驱动器的扇区,我必须从该分区的分区表中读取CHS值。只有这样我才能将其转换为LBA并将其存储在“磁盘地址包”中。
我的疑问是,分区表中的CHS每个都是1个字节。我应该直接获取此值并将其转换为LBA(或)我必须先将其转换为
Cylinder = 10 bits
Sector = 6 bits
Head = 8 bits
然后将其转换为LBA?
注意:我的MBR必须能够访问HDD和USB上的扇区 - 这就是动机。
操作系统:Ubuntu
汇编程序:气体
答案 0 :(得分:2)
Partition table entries仅使用CHS来向后兼容非常旧的操作系统 他们还有LBA地址的字段:
由于块地址和大小使用32位存储在MBR的分区表中,因此使用具有512字节扇区(实际或仿真)的驱动器的分区的最大大小和最高起始地址不能超过2 TiB-512字节(2,199,023,255,040字节或4,294,967,295(232-1)扇区×每扇区512(29)字节)。[2]减轻这种能力限制是GPT发展的主要动机之一。
CHS寻址也是如此 使用CHS字段的操作系统的大小限制为大约8 GiB 因此,如果您想与它们兼容,则需要保持在该限制之下。
转换LBA的公式< - >可以在Internet上轻松派生或找到CHS,您可以根据扇区号(即LBA)进行思考,并在创建分区条目时转换为CHS(或者使用默认值1023,255,63对于CHS来说分区太大)
该行的底部,使用LBA字段 或者去GPT。