7c00H之前的内存是干什么用的?

问题描述

如果 bootloader 的代码是从内存地址 0x7c00 中存储的,那么前面的内存中存储的是什么,它是做什么用的?

我刚刚开始学习汇编和引导加载程序,发现我们使用 [ORG 0x7c00] 作为我们的代码将从该地址开始存储。现在在 youtube 上的一些教程中,他们也将这个地址放在 bp 和 sp 中,那么在使用堆栈调用函数后,这个空间是否用于存储临时数据和保存返回地址?我有点困惑,因为并非这些教程中的每个人都使用这些堆栈指针,甚至有些人不将这个地址用于 bp 和 sp,而是使用高于 7c00 的位置。

解决方法

内存组织如下:

从 0x00 到 0x03FF -> 实模式中断向量表

从 0x0400 到 0x04FF -> BIOS 数据区

从 0x0500 到 0x7BFF -> 未使用

从 0x7C00 到 0x7DFF -> RAM 中的引导扇区

从 0x7E00 到 0x09_FFFF -> 未使用

从 0x0A_0000 到 0x0A_FFFF -> 彩色视频 RAM (VRAM)

从 0x0B_0000 到 0x0B_7FFF -> Monocrome VRAM

从 0x0B_8000 到 0x0B_FFFF -> 视频文本 RAM

从 0x0C_000 到 0x0C_7FFF -> 视频 ROM BIOS

从 0x0C_8000 到 0x0E_FFFF -> BIOS 阴影区

从 0x0F_0000 到 0x0F_FFFF -> 系统 BIOS

RAM 中位于 0x7C00 的引导扇区将 RAM 分为两个区域。当我开发引导加载程序时,我使用从 0x500 到 0x7BFF 的 RAM 区域作为工作 RAM 来放置堆栈、局部变量等。我使用剩余的未使用 RAM 区域从硬盘加载二进制文件。 二进制文件可以是任何东西,但通常这是启动过程中所谓的第二阶段。

您可以在以下位置阅读有关我如何开发引导加载程序的所有详细信息: https://fromthegroundupmyway.blogspot.com/2020/10/design-and-build-space-shuttle.html

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...