Write Your Own Operating System Tutorial(中文版)- Lesson 3: NASM

来源:互联网 发布:淘宝哪里看自己的等级 编辑:程序博客网 时间:2024/05/22 17:32

 Lesson 3: NASM


    这节课我们将学着用一个汇编语言编译器来写我们的程序。前几课里我们使用的是DEBUG。把玩过这些之后,你很快就会发现用DEBUG来编写哪怕是一小段指令都是非常痛苦的(改起来更难)。我们需要简单的方法。我们将从使用“Netwide Assembler”(NASM)开始。去它的官方网站http://www.octium.net/nasm/,你能得到一份编译器。

    现在我们将借助这个编译器,来创建和我们在Lesson 2末尾一样的操作系统。下载启动程序h.asm并且仔细看一看。第一条指令应该还算熟悉。这是跳过引导记录数据的指令。在这里,它跳到标号begin处。在跳转指令后面是20字节的数据。这是我用DEBUG从我磁盘上读到的。这些值应该可以用。如果你愿意,你也可以用你磁盘上的数据来替换它们。它们中的大多数可能是一样的。

(注意:在DEBUG中,一个字节以上的数据在显示时是颠倒的。因为在INTEL架构中,低字节存储在低地址,反之亦然。所以字节看上去是倒的。)

标号begin之后的代码和我们在第二课写的差不多,仅仅是在屏幕上打出字母“H”然后进入死循环。在文件的最后,你能够看到我对这段代码长度是否为512字节(一个扇区的大小)进行了检查,之后以“times”开始的那一行开始在代码的末尾添加0,直到文件的最后。这是为了使可执行部分的大小正好为510字节。再之后,是两字节的署名0x55,0xAA。在命令行方式下输入以下命令,编译这个文件。

nasmw h.asm -o h.bin

这将把文件编译为纯二进制文件h.bin。看一下文件的大小。如果你顺利的话,那应该正好是512字节,正好能够放到软盘的引导扇区去。

现在我们要把这个文件复制到软盘上。插入软盘,运行DEBUG,输入一下命令。

debug

-n h.bin

-l 0


这将把我们的文件载入到开始地址为0的内存。如果你想看看文件是不是被顺利的编译和加载,你可以使用dump(d)和unassemble(u)命令。你可以看到我们刚才写的可怜巴巴的几行代码。注意看一下,文件中已经正确的添加了0以用来对齐,直到扇区最后的0x1FE和0x1FF。另外,DEBUG在CX寄存器中记录了一共从文件中读入了多少字节。(你可以用r命令来显示寄存器的内容。)

当软驱中有软盘的时候,用这条命令将文件写入磁盘。

-w 0 0 0 1

用这张盘重启计算机,看看实际动作的程序吧。现在,在源码中试试其他东西。例如,修改一下代码来打印更多的字符。如果你准备好了,我们将进入下一课,在那里,我们将创建一个“Hello, World”操作系统。

原创粉丝点击