在空虚拟机实例中运行程序集?

时间:2013-10-21 10:13:30

标签: assembly virtualbox hobby-os

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

我想尝试编写一个简单的bootloader。我的目标是为业余爱好操作系统工作。

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:9)

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

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.

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