gpt4 book ai didi

boot - BIOS 将哪些信息加载到 RAM 中?

转载 作者:行者123 更新时间:2023-12-04 00:53:47 25 4
gpt4 key购买 nike

我知道,在启动时,BIOS 会在内存 0x7c00 上加载预定义设备驱动器的第一个扇区(512 字节),然后跳转到该地址。

因此,从 0x7c00 到 0x7dff 的内存被占用。是否有其他 RAM 部分被占用?

如果我正在对操作系统进行编程,我可以将除 0x7c00 到 ox7dff 之外的所有 RAM 用于我自己的目的吗?或者,是否还有其他任何部分在启动时填充了“宝贵”信息,我不得覆盖?

我知道在给定的时刻,我可以覆盖加载在内存上的 MBR(链式加载),我的问题集中在......内存的哪些部分可用于操作系统?

抱歉我的英语不好。谢谢你的回答!!

最佳答案

x86 实模式内存映射如下:

 - 0x00000000 - 0x000003FF - Real Mode Interrupt Vector Table
- 0x00000400 - 0x000004FF - BIOS Data Area
- 0x00000500 - 0x00007BFF - Unused
- 0x00007C00 - 0x00007DFF - Our Bootloader
- 0x00007E00 - 0x0009FFFF - Unused
- 0x000A0000 - 0x000BFFFF - Video RAM (VRAM) Memory
- 0x000B0000 - 0x000B7777 - Monochrome Video Memory
- 0x000B8000 - 0x000BFFFF - Color Video Memory
- 0x000C0000 - 0x000C7FFF - Video ROM BIOS
- 0x000C8000 - 0x000EFFFF - BIOS Shadow Area
- 0x000F0000 - 0x000FFFFF - System BIOS

在我的实模式编程中,我通常坚持 0x00007E00 - 0x0009FFFF(不是全部)。我使用段:偏移寻址来使用内存。要从 1 阶段引导加载程序到内核或引导加载程序第二阶段,我使用:
; bootloader.s

BITS 16
ORG 0x7C00

CLI
JMP 0xE000 ; Can also be JMP 0x7C00:200
HLT

TIMES 510 - ($-$$) DB 0
DW 0xAA55

——
; Something.s

BITS 16
ORG 0x7E00 ; Can also be ORG 0x7C00:200

; Code goes here for your purposes.. whether it be a 2nd stage
; bootloader or your 16bit kernel..

CLI
HLT

如果你要进入保护模式,你仍然需要一个如上所示的 stub 。

为了解释 0x7C00(引导加载程序入口点)的内存位置,0x7C00 - 0x7DFF 是您放置引导加载程序(上面的 bootloader.s)的位置。您将它放在那里是因为 BIOS 在执行其例程后跳转到该位置。引导加载程序的大小必须恰好为 512 字节(注意 TIMES 指令)。从那里,您的代码可以是任意大小(只要它适合内存映射),并且您将能够完全在操作系统上工作。

如果您进入 32 位保护模式,您将能够使用任何关于 1MiB 标记的内容。

关于boot - BIOS 将哪些信息加载到 RAM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1051939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com