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

2024-03-12

我知道,启动时,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 (不是全部)..我使用段:偏移寻址来使用内存。.要从第一阶段引导加载程序到内核或引导加载程序第二阶段,我使用:

; 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

如果您要进入保护模式,您仍然需要一个存根,如上所示。在 Something.s 中,您可以在保护模式例程中进行编程(GDT、A20、设置视频模式等...)

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BIOS 将哪些信息加载到 RAM 中? 的相关文章

  • 关于联想G480BIOS中的设置

    由于一段时间对笔记本电脑中的BIOS设置很感兴趣 故在网上搜索一下 找到这篇博客 为了以后那天能用上就先转载一下 以备后用 地址为 关于G480BIOS设置
  • UEFI-SHELL 环境 U盘制作

    访问 https github com pbatard UEFI Shell releases 下载最新的ISO 然后用rufus 做启动盘 Rufus https rufus ie en map list device DUMP BIOS
  • 如何分析AIX启动过程1

    复杂度3 5 机密度4 5 最后更新2021 05 14 AIX提供了两个帮助分析启动的工具或者模式 kernel debug boot verbose mode 前者适合单独分析某个特定的功能 模块 而后者则能帮助你全面地过一遍AIX启动
  • EDK2安装教程

    1 1基础搭建 相关文件请自行百度下载 1 安装VS2015到C盘 请勿修改默认目录 否则需要修改C edk2 Conf tools def txt 2 如安装包所示 安装python2 7到C盘并设置环境变量如下 3 将nasm解压到C
  • java spring cloud 使用nacos配置多数据源(druid)AbstractRoutingDataSource

    第一步 在nacos中加入 spring datasource master url jdbc mysql base mysql 3306 XXX characterEncoding utf8 zeroDateTimeBehavior co
  • 为什么使用 uImage 而不是 zImage

    我正在尝试了解 zImage 和 uImage 之间的区别 以我的理解uImage是通过运行得到的mkimage on the Image结果它添加了一个 U Boot 包装器 我不知道它到底包含什么 其中包含header加上加载地址和入口
  • C# - 如何知道 Windows 启动后何时“稳定”?

    我正在编写一个应用程序 该应用程序可以选择在 Windows 启动时运行 我无法忍受应用程序在我的电脑真正稳定下来之前就陷入困境 而且这是一个非关键应用程序 我希望我的应用程序礼貌地等待所有其他启动项完成并解决 以便用户的电脑在开始执行任何
  • 使用 Powershell 检测 GPT 和 MBR 分区

    有没有办法用powershell判断磁盘是否有GPT或MBR分区 如果您使用的是 Windows 8 Windows Server 2012 或更高版本 则可以使用存储 cmdlet 之一来检查这一点 Get Disk 该命令的输出格式如下
  • NASM 引导加载程序中的 jmp $

    我试图编写引导加载程序引导装载程序 写的代码是 BITS 16 start mov ax 07C0h Set up 4K stack space after this bootloader add ax 288 4096 512 16 by
  • 如何自动启动Solr?

    此刻我必须去 usr java apache solr 1 4 0 example然后执行以下操作 java jar start jar 如何让它在启动时自动启动 我在共享 Linux 服务器上 当您使用共享 Linux 机器时 您可能必须
  • 引导加载程序如何读取 DVD(cd)?

    我有一个用汇编语言编写的第一阶段引导加载程序 我需要它从 DVD 或 CD 加载第二阶段引导加载程序 我只找到了从软盘或硬盘读取的示例 那里使用的中断是13h 在中断描述中它说它可以读取软盘和硬盘 我尝试使用 13h 来读取 CD 就好像它
  • 我的 BIOS 设置中没有启用 Hyper-V 的选项

    我是 Windows Phone 8 应用程序开发新手 我安装了SDK 8 0 当我运行应用程序时 它显示一条错误 告诉我启用 Hyper V 在搜索过程中我发现这个 MSDN 文档BIOS 中有解决方案 但是当进入我的BIOS设置时 却没
  • XServer启动后运行shell脚本? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 XServer 和 lightdm 启动时运行 shell 脚本 我尝试在 etc 目录中使用 init d 和 rc local
  • 初始化时设置default_url_options

    我需要强制主机进入我的 Rails 应用程序中的环境之一 我可以通过包含来使覆盖起作用 def default url options opts opts merge host gt stg my host com end 在应用程序 控制
  • 如何在 16 位 x86 实模式下通过 BIOS 访问 USB 端口?

    我是装配世界的新手 我正在尝试编写一些汇编代码来与串行 并行 VGA 键盘等硬件设备进行通信 我在 x86 intel 处理器的实模式下执行此操作 通过从我亲自编写的用于加载汇编代码的 boostrap 启动我的代码 嗯 根据我从阅读教程中
  • 为什么引导加载程序中的字节“0xea 0000 ffff”会导致计算机重新启动?

    我正在研究引导加载程序 发现了这个有趣的组件 Sends us to the end of the memory causing reboot db 0x0ea dw 0x0000 dw 0xffff 通过评论我知道它的作用 将计算机发送到
  • 如何使用java获取BIOS信息?

    请告诉我是否可以使用 java 程序获取 BIOS 设置信息 我使用 Windows 7 作为操作系统 这取决于您要阅读的信息 Java 无法读取 BIOS 但 java 可以查询 WMI google for jWMI 这可能会获取您需要
  • 没有操作系统直接运行的程序叫什么名字?

    当我试图提出有关该主题的其他问题时 我很难正确表达我的问题 那么直接在相关计算机上运行的程序的正确名称是什么 一个可以描述内核和引导加载程序的术语 因为它们是在没有操作系统的情况下直接执行的 C 标准称之为 独立环境 我觉得这个术语和我见过
  • Raspbian 的软浮动版本无法启动

    我在这里下载了 Raspbian 的硬浮动图像 http www raspberrypi org downloads http www raspberrypi org downloads 我将推荐的硬浮动映像复制到 SD 卡上 并且 Ras
  • 早期的BIOS怎么能使用CALL呢?

    我纯粹是出于爱好原因 试图理解 PC 中的一些低级代码 我为随机的旧千兆字节 MB 下载了一个过时的 BIOS ROM 映像 https www gigabyte com Motherboard GA 8I845GE775 G rev 10

随机推荐