assembly - 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
推荐阅读
- python - 如何将python集成到automake并在python语法错误时退出构建过程
- lstm - Tensorflow seq2seq 模型,损失值不错,但预测错误
- r - 如何一遍又一遍地重复一个表达式,而不必一直复制和粘贴它?
- gradle - 我怎样才能找出哪个库依赖于 junit 年份?
- geometry - 覆盖球体的最大非重叠球体数?
- excel - 等到在 selenium VBA 中加载 Web 应用程序
- java - 如何播放 Jar 文件中资源文件夹中的 MP3 文件?
- python - 使用参数创建数组/矩阵
- r - 如何使用 R 中的 formattable 包更改表上 N/A 的输出
- javascript - 循环中的 Javascript 弹出窗口