我可以用什么环境来编写操作系统的二进制代码?

时间:2015-04-19 15:33:43

标签: assembly binary operating-system hex-editors mbr

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

  • 我安装了oracle viratualbox并创建了hdd disk

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

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

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

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

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

如何更有效地进行此测试以学习自举(以及简单开发后)操作系统?

1 个答案:

答案 0 :(得分:4)

当我进行这种开发时,我从头开始构建一个磁盘映像,并将虚拟机指向它作为软盘。通过这种方式,汇编程序的输出(目标文件)可以是软盘的完整引导扇区,您可以轻松地链接其他扇区。例如:

;   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之后添加要从后面的扇区加载链的代码,你就可以简单地将它加载到内存中,因为你知道它落在下一个扇区的开头。