动手开发操作系统- 0x1
Posted Yivies
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手开发操作系统- 0x1相关的知识,希望对你有一定的参考价值。
0x4:NASM
NASM:Netwide Assembler (简称 NASM)是一款基于x86架构的汇编与反汇编软件。它可以用来编写16位(8086、80286等)、32位(IA-32)和64位(x86_64)的程序。 NASM被认为是Linux平台上最受欢迎的汇编工具之一。我们将会用它来编译我们的源代码。安装方法百度有很多,我在这里不再复述,下面看看它的使用方法:
nasm -f bin [asm filename] -o [bin filename]
asm filename是源代码文件的名称,bin filename是要输出的.bin文件的名称。
0x5:VHDTool
VHDTool是我自己开发的一个小工具,这里有到GitHub页面的超链接,大家可以去下载它的源码,再使用自己喜欢的编译器将他编译,或者直接下载程序。这个工具的作用是将我们编译出来的.bin文件写入到vhd虚拟磁盘里。用法如下:
vhdtool -x [bin filename] [vhd filename]
这会将bin filename所指定的文件,写入vhd filename,写入使用 -x 选项,工具中会让我们输入写入的开始扇区,示例如下:
也可以用它来查看二进制内容,查看二进制内容使用 -v 选项,该过程也会让我们输入查看的字节数:
0x6:第一个引导程序
什么是引导程序?想必学过操作系统原理的朋友都了解过,这里不妨再说一下操作系统的启动过程:在我们按下开机键的那一刻起,我们的计算机系统将执行Bios进行加电自检,之后BIOS会将硬盘或者软盘里的第一个扇区的内容加载到内存中的 0X7C00 的位置,而第一个扇区的内容,就是我们的引导程序,所以第一个扇区也被称为 主引导扇区,一般大小为 512 字节。而我们的主引导程序将会把硬盘里的操作系统加载到内存里,最后让 CPU 跳转到操作系统的内存区运行程序,我们来看一段简单的引导程序代码:
section BOOT align=16 vstart=0x7c00 main: mov ax, 0xb800 mov es, ax mov si, string mov di, 0x0 mov cx, 0x18 s0: mov al, ds:[si] mov es:[di], al inc si inc di loop s0 hlt string: db \'H\',0x07,\'e\',0x07,\'l\',0x07,\'l\',0x07, db \'o\',0x07,\'!\',0x07, \'M\',0x07,\'y\',0x07, db \' \',0x07,\'O\',0x07,\'S\',0x07,\'!\',0x07 times 510-($-$$) db 0x0 db 0x55, 0xaa
用我们的NASM编译成.bin文件后再用VHDTool写入我们上一章节的.VHD文件的第一个扇区后启动我们的虚拟机,我们会看到以下内容:
是不是感到很惊奇,我们的第一个手写引导程序就出来了!
以上是关于动手开发操作系统- 0x1的主要内容,如果未能解决你的问题,请参考以下文章
NMAKE:致命错误 U1077:“cl.exe”:返回代码“0x1”停止。在命令提示符下