BIOS 和地址 0x07C00

kar*_*ara 6 x86 operating-system intel bios osdev

来自维基百科

在 IBM PC 兼容机器上,BIOS 选择一个引导设备,然后将设备的第一个扇区(可能是 MBR、VBR 或任何可执行代码)复制到内存地址 0x7C00 处的物理内存中

我正在阅读操作系统中的引导过程,尤其是英特尔 x86:所以我发现将引导加载程序BIOS的第一个512 bytes加载到内存位置

(segment, offset) = (0x0000,0x7C00) = 0x07C00
Run Code Online (Sandbox Code Playgroud)

并跳转到那里执行引导加载程序

我的问题是为什么BIOS总是加载

引导程序到0x07C00

zix*_*ool 6

BIOS总是加载 bootloaderto的原因0x07C00历史的

在早期,PC只保证拥有 64 KBRAM内存。

下面的内存0x07C00是为中断向量BIOSBASIC等保留的。

第一个操作系统可用内存从0x08000.

所以 bootloader加载到0x07C00,它在1 KB 下面 0x08000

  • PC 已经存在了几十年,0x7c00 选择通常被认为是能够使用 16kb 和 32kb 的 IBM 5150 的组合。DOS 的第一个版本问世时规定了至少 32kb 的内存。当时 BIOS 设计者选择 0x7c00 来读取引导扇区。0x7c00 到 0x7dff。第一个 BIOS 通常将堆栈从 0x8000 向下延伸到引导加载程序。BIOS 例程(中断服务例程等、BIOS 调用)需要此默认堆栈区域才能正常运行。 (2认同)