OSDev - 替换柱面地址以使操作系统在真实硬件上运行

问题描述 投票:0回答:1

我正在关注 github 教程(链接:https://github.com/gmarino2048/64bit-os-tutorial/),当我在第 1.3 章中的“load.asm”上遇到这行代码时:

; Next are the cylinder and cylinder head to read from. You
    ; would need to change these if reading from an actual drive, but with
    ; QEMU they're just 0
    mov ch, 0x00        ; Cylinder goes in ch
    mov dh, 0x00        ; Cylinder head goes in dh

我想知道如何让它在真实的硬件上运行。不要问为什么。那么我应该用什么地址替换“0x00”呢?我是 ASM 的初学者,但我知道足够的理论来适应它。

我尝试在网上搜索一些详细信息,但没有看到任何信息。另外,当我尝试查看 README.md 中的特定章节时,它没有给我答案。

assembly x86-64 64-bit nasm
1个回答
0
投票

答案取决于您的硬件,特别是引导扇区在磁盘上的位置。硬编码柱面、磁头和扇区值(或 LBA 扇区号,通常用于除软盘之外的所有分区)意味着引导扇区仅在写入设备上的特定位置时才起作用。如果您使用整个设备,而不是它的一个分区,您的引导扇区将位于 CHS 0:0:1,或等效的 LBA 0,并且 load.asm 读取的其余内容将位于设备上的后续扇区中。相同的柱面 0 和磁头 0,只要它适合 63 个扇区(但实际上您应该使用 LBA 寻址)。有关启动 1 2BIOS

int 13h
界面,请参阅 OSDev Wiki。

© www.soinside.com 2019 - 2024. All rights reserved.