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”操作系统。
- Write Your Own Operating System Tutorial(中文版)- Lesson 3: NASM
- Write Your Own Operating System Tutorial(中文版) - Lesson 1: 引导扇区
- Write Your Own Operating System Tutorial(中文版) - Lesson 2: 着手我们第一张启动盘
- Write Your Own Operating System Tutorial(中文版)- Lesson 4: Hello, World
- Write Your Own Operating System Tutorial(中文版) -Lesson 5: 动起来!
- Write Your Own Operating System Tutorial(中文版) - Lesson 6: Boot Loader
- Write Your Own Operating System Tutorial(中文版) - 简介
- Building Your Own (Minimal) Operating System
- Write Your Own jQuery Selectors
- Write your own http server
- Write your own Android Authenticator
- Write your own Android Authenticator
- Slax - your pocket operating system
- Project_Write your own operation system
- 操作系统(Operating System)3
- How to write your own custom Form
- iterator pattern, write your own iterator
- Write your own life
- Google 节日徽标全集 (1999-2009) (中)
- 你还在用if else吗?
- Write Your Own Operating System Tutorial(中文版) - Lesson 1: 引导扇区
- 编译原理: Big_endian, Little_endian 问题
- Write Your Own Operating System Tutorial(中文版) - Lesson 2: 着手我们第一张启动盘
- Write Your Own Operating System Tutorial(中文版)- Lesson 3: NASM
- 内存占有计算
- Write Your Own Operating System Tutorial(中文版)- Lesson 4: Hello, World
- extern “C”
- Write Your Own Operating System Tutorial(中文版) -Lesson 5: 动起来!
- 内存申请及存放位置问题
- Write Your Own Operating System Tutorial(中文版) - Lesson 6: Boot Loader
- strlen和sizeof有什么区别?
- 软件书籍推荐