我正在开发一个简约的操作系统。我创建了一个在Master Partition Table
中查看活动分区的MBR。我面临的问题是将扇区加载到内存。
关于加载扇区,我遇到了两个方案,
- chs wording
- lba致辞
我读到CHS几乎所有BIOS都支持CHS,但问题在于它可以在最大的8GB
解决,并且使用LBA纠正了此缺点。
说过,我想问一些问题:
问题1:
最好选择哪种方案?如果CHS,有什么办法可以在8GB标记上方访问?
问题2:
在lba中,我如何能够从(例如)分区4?
加载一个扇区IE:我将如何找到第四个分区的起始块?
注意:场景发生在16 bit real mode
。
谢谢。
OS:Ubuntu
编译器:CC
使用BIOS扩展读取功能,该功能使用64位lba(SATA驱动器将使用LBA的较低48位)。
INT 13 - IBM/MS INT 13 Extensions - EXTENDED READ
AH = 42h
DL = drive number
DS:SI -> disk address packet
Return: CF clear if successful
AH = 00h
CF set on error
AH = error code
disk address packet's block count field set to number of blocks
successfully transferred
Format of disk address packet:
Offset Size Description
00h BYTE 10h (size of packet)
01h BYTE reserved (0)
02h WORD number of blocks to transfer
04h DWORD -> transfer buffer
08h QWORD starting absolute block number (LBA)
问题提到了MBR。通常,硬盘驱动器上的第一个扇区是一个分区扇区,其中包括一个分区表(通常为其中4个),哪个是活动的。分区引导代码通常将自身重新定位(Microsoft重新定位到00000H:00600H),并在MBR中从活动分区中读取为00000H:07C00H:然后跳到MBR代码。
>