1

为了学习操作系统的引导,我用这种方式做了一些简单的测试:

  • 我安装 oracle virtualbox 并创建 hdd 磁盘

  • 我安装十六进制编辑器 HxD 并将代码写入此硬盘磁盘,打开显示此硬盘的文件

在第一个 512 字节扇区的末尾,我在 1FE 和 1FF 字节中写入 55 AA,

以及我从第一个扇区的第一个字节编写的其他代码。

通过这种方式,我必须从 HxD 中解除对 hdd 文件的阻止,因为在完成此操作之前,virtualbox 无法启动它。

我想用虚拟机或者其他真机(第二种方式不太方便),因为它创建了一个独立的开发环境。

我怎样才能更有效地进行学习引导(以及简单开发后)操作系统的测试?

4

1 回答 1

4

当我进行这种开发时,我从头开始构建磁盘映像并将 VM 指向它作为软盘。这样,您的汇编程序的输出,即目标文件,可以成为软盘的完整引导扇区,您可以轻松地链接加载更多扇区。例如:

;   x86 architecture systems all support MBR style boot sectors.  An
;   MBR boot sector must be 512 bytes in length and have machine
;   language code originating at 0000:7c00.  Additionally, it must
;   have the signature "0x55aa" as the final word in the sector or it
;   is not a valid boot sector.



org 0x7c00                  ; BIOS will load the MBR to this location 
                            ; and then jump here to continue execution

; Your code here!

                            ; As stated above, the boot sector must 
times   510-($-$$) db 0     ; Create padding to fill out to 510 bytes
dw      0xaa55              ; Magic number in the trailer of a boot sector
                            ; We write it as 0xaa55 because we're little
                            ; endian and it will be reversed to the required
                            ; 0x55 0xaa

只需添加您的初始代码。创建一个指向名为“floppy.img”或类似名称的目标文件的链接,然后告诉 VirtualBox 在哪里可以找到它。瞧!

您没有问,但我希望您能看到您实际上可以将所有代码放入此文件中;只需在后面添加要从后面的扇区链式加载的代码0xaa55,您就可以简单地将其加载到内存中,因为您知道它位于下一个扇区的开头。

于 2015-04-19T15:53:55.413 回答