11

如何在空的虚拟机(virtualbox、vmware)实例中运行汇编代码?

我想尝试编写一个简单的引导加载程序。我的目标是为一个爱好操作系统工作。

4

2 回答 2

12

您必须在虚拟硬盘上写入正确的主引导记录。为了做到这一点,必须了解引导过程是如何工作的以及代码在哪个地址执行。这里没有足够的空间来写所有的细节,但是有很多描述它们的互联网页面。简而言之,在初始引导后(开机自检)之后,BIOS 搜索存储设备,直到找到第一个扇区的最后两个字节包含 little-endian 字 AA55h(MBR 引导签名)的存储设备。然后 BIOS 将引导扇区从可引导设备加载到地址 0000h:7C00h(注意这一切都是在真正的 x86 模式下完成的)并将执行转移到引导代码。MBR 的空间限制只有 512 字节,所以引导通常会被转发到下一个阶段,即 MBR 中的小代码用于将另一个引导代码从磁盘的某处加载到内存中,然后将执行转移到那里。从虚拟软盘引导可能会有些不同。在现代系统中,MBR 与 GPT 交换。正如你所看到的,这里涉及到很多事情,虽然并不像看起来那么困难。

于 2013-10-21T11:35:32.733 回答
10

在虚拟机中写入引导扇区与在真机上写入是一样的。您必须创建一个启动盘,它将在您的目标驱动器上安装您的引导加载程序。所以你基本上必须执行这些步骤:

1. Write a bootloader and put it in an imagefile. (http://wiki.osdev.org/Babystep1)
2. create a boot disc, which will put the image into the bootsecotr of your target harddisc (This can be a simple DOS disk or a linux environment, hwatever. (http://wiki.osdev.org/Bootable_CD)
3. boot from the loader in your environment.

查看我在上面的第一条评论中发布的链接,应该详细解释所有这些。

于 2013-10-21T12:46:36.233 回答