BIOS 是否将 512 字节引导加载程序复制到 0x7c00

2024-03-10

我正在编写内核;在写这么复杂的东西之前,我认为对内核、引导加载程序、寄存器、BIOS 等进行一些理论阅读不仅会有所帮助,而且是必要的。

本文 http://lennartb.home.xs4all.nl/bootloaders/node3.html说(我引用):

The boot sector loader. 
This loads the first 512-byte sector from the boot disk into RAM and jumps to it.

然后它接着说:

The first sector of a diskette can be loaded at address 0000:7C00. 

因此,引导扇区加载程序将位于内存地址 0x7C00(如果我是对的)的软盘上的 512 字节数据加载到 RAM 中;现在,我的问题是:

  • 由于机器正在启动,RAMhas为空,那么引导加载程序加载到 RAM 的 0x0000 处?
  • (与此上下文无关)是否有任何方法可以获得 GRUB Legacy (v .9x) 引导加载程序的源代码解释?
  • 最后,我应该阅读哪些文章/书籍来熟悉内核等?

我有6年的编程经验,但都是在由内核实现的系统上使用高级语言。

任何帮助表示赞赏。谢谢! :)


...引导扇区加载程序将位于内存地址 0x7C00(如果我是对的)的软盘数据加载到 RAM 中

...

由于机器正在启动,RAM 必须是空的,因此引导加载程序加载到 RAM 的 0x0000 处?

No. 0000:7C00指的是内存地址。 RAM的意思是“随机存取存储器”,意味着内存中的每个位置都可以直接访问。没有什么比“空 RAM”更好的了。也可以参考INT13中断函数“从驱动器读取扇区” https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D02h:_Read_Sectors_From_Drive:参数之一(传入ES:BX)需要指向存储扇区内容的目标地址。因此,BIOS 所做的就是从驱动器加载 512 字节并将其存储到0000:7C00 to 0000:7DFF,然后跳转到0000:7C00执行主引导加载程序代码。

我应该阅读哪些文章/书籍来熟悉内核等?

这个维基非常有用:http://wiki.osdev.org/Main_Page http://wiki.osdev.org/Main_Page。对于启动过程,请查看http://wiki.osdev.org/Boot_Sequence http://wiki.osdev.org/Boot_Sequence.

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

BIOS 是否将 512 字节引导加载程序复制到 0x7c00 的相关文章

  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 长多字节 NOP:通常理解的宏或其他符号

    x86 和 x86 64 处理器不仅具有单字节 这不是什么大秘密NOP指令 还包括各种类型的多字节类 NOP 指令 这些是我设法找到的 AMD 推荐 参考 AMD 系列 15h 处理器的 AMD 软件优化指南 文档 47414 http s
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https

随机推荐

  • 如何判断文本区域中的文本是否换行?

    如何判断文本区域中的长文本是否换行为两行或多行 我不是在谈论所讨论的新行字符here https stackoverflow com questions 3697096 finding number of lines in an html
  • 用于 Elastic 搜索的 C++ api [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 据我了解 弹性搜索 http www elasticsearch org不提供 C api 因此 我假
  • 如果不在 Android 和 iOS 上进行调试,则会崩溃

    环境 React Native Environment Info System OS macOS High Sierra 10 13 6 CPU 4 x64 Intel R Core TM i5 7267U CPU 3 10GHz Memo
  • JTable 上只能编辑一行

    我正在尝试制作一种特殊的 jtable 我希望整个表默认不可编辑 但是 当用户单击一行 然后单击 编辑 j 按钮时 该特定行是可编辑的 一旦他们取消选择该行 它就不再可编辑 我该怎么做呢 要控制哪些单元格可编辑 您需要扩展 JTable 或
  • 未为 ALB 侦听器列出导入的 SSL 证书

    我已通过 DigiCert 创建了 SSL 证书并导入到 ACM 我要求将相同的 SSL 应用于 ALB 和应用程序 并且由于无法导入 ACM 证书 所以我必须遵循这种方式 我已成功导入 SSL 并且可以在控制台中看到它 但是 我无法将其应
  • 教程中的错误(使用 iml 包解释机器学习模型)

    当我尝试在标题为 复制要求 的部分中执行以下代码时 出现以下错误 https uc r github io iml pkg https uc r github io iml pkg classification data df lt rsa
  • 有没有办法使用 Maven Surefire 插件让 junit“快速失败”?

    我目前正在使用maven 开发一个java 项目 我们使用 Maven Surefire 插件来运行我们的 junit 套件作为构建过程的一部分 我们的测试套件在覆盖范围和执行时间方面都在快速增长 当您等待十分钟才发现测试在测试的第一分钟失
  • NAudio 算法播放正弦波,其频率可以实时平滑地改变[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 到目前为止 我已经实现了在此找到的算法博客文章 http mark dot net blogspot com 2009
  • 如何阻止 MS Access 更改我的 SQL 代码?

    我在 MS Access 中编写了一个 SQL 查询 但 Access 把它搞得一团糟 只是为了 图形化 地显示它 我该如何阻止它这样做 如果将 SQL 保存为 QueryDef 对象 即使用图形查询编辑器 则无法阻止 Access 更改
  • 通过 JSON 将数据从 android 发送到服务器

    我有 MySQL 数据库服务器 我需要通过 JSON 更新 MySQL 服务器和从 MySQL 服务器检索数据 所以 我想知道如何做到这一点 并且我对这个示例语句感到非常困惑 HttpPost httppost new HttpPost h
  • 如何在Android模拟器上使用Xposed框架

    我正在尝试使用 API 17 但无法打开Xpose框架 http forum xda developers com showthread php t 1574401 确切的步骤是 启动模拟器 分区大小为 1024 adb install X
  • 对阶乘和多项式的组合进行数值计算

    我正在尝试编写一个简短的 C 例程来计算给定整数 j gt i 通常它们位于 0 到 100 之间 和复数 z 以 z 关联拉盖尔多项式 问题是我希望这个函数可以从 CUDA 内核中调用 即使用 device 属性 因此 标准库 Boost
  • Dart:异步抽象方法

    我正在尝试设计一个接口来抽象不应直接从 UI 使用的长时间运行的操作 为了抽象它 我创建了一个抽象类 其中包含执行此类操作的唯一方法 abstract class MakeSomething Result make Param param
  • 如何出现“创建目标表后架构已更改”错误?

    当我的 Web 应用程序尝试在 MSSQL 2005 数据库上执行 SELECT INTO 时 我遇到了此错误 我确实有两个问题 这个错误是什么意思以及这是如何发生的 有没有办法通过以不同的方式编码来防止这些错误 除了明显的情况之外 有人在
  • 适用于 Windows 的优秀开源错误跟踪/问题跟踪软件 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android 未使用/查找我的希伯来语本地化。

    我正在努力将我的应用程序本地化为多种语言 西班牙语运行良好 但希伯来语没有出现 让我困惑的是 如果我将希伯来语字符串文件夹的内容放在西班牙语文件夹 values es 中 它会很好用 我的希伯来语文件夹中的西班牙语 值 他 不起作用 任何想
  • SQL Case 语句在 where 子句中指定条件?

    我有以下查询 SELECT FROM dbo tblOrders o WHERE o OrderId IN SELECT Value FROM dbo udf GenerateVarcharTableFromStringList Order
  • 相当于 git 的“svn checkout”?

    我应该使用什么 git 命令来相当于svn checkout git checkout 非常感谢 git clone https www kernel org pub software scm git docs git clone html
  • ftp 在 java 中无法正确下载文件?

    当我使用以下代码下载文件时 它只是将文件写入本地目的地 但文件大小均为零 有人能说为什么会发生这种情况以及如何解决它吗 import org apache commons net ftp FTPClient import org apach
  • BIOS 是否将 512 字节引导加载程序复制到 0x7c00

    我正在编写内核 在写这么复杂的东西之前 我认为对内核 引导加载程序 寄存器 BIOS 等进行一些理论阅读不仅会有所帮助 而且是必要的 本文 http lennartb home xs4all nl bootloaders node3 htm