如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。