步骤一:编写汇编程序(linux版)
在linux下,我使用as86和ld86这2个程序来产生代码。(我这里以linux的Ubuntu发行版为例)。
as86对于我们这个任务来说足够简单,因此也比较适合我们。
另外一个原因恐怕是在1990年的时候,linux系统的创始者,被奉为神明的linus大牛就是使用as86来编写linux的启动代码的。
无论如何,在PC机上凡是类UNIX的系统都有这套汇编器,而且一般是在bin86软件包内。
在Ubuntu下要安装bin86软件包,只需要在终端中输入命令 sudo apt-get install bin86 即可。
下面是我们的代码:
1 entry start
2 start:
3 mov ax,#0xb800
4 mov ds,ax
5 mov byte[0],#0x41
6 mov byte[1],#0x1f
7 hlt
8
上面这段就是我们需要的as86汇编代码。在linux下将它保存为boot.s文件。
entry start 这一句正如字面意思所言,我们的程序就从start这里开始。
代码的意义等我们讲完windows版本的汇编代码再在步骤二解释,我们先在linux终端中输入命令把代码汇编成机器指令:
as86 -o boot.o boot.s
ld86 -o boot boot.o
这样我们就在linux中得到了我们接下来要写入U盘的文件boot,
而且我们希望PC从U盘启动的时候就运行我们的boot小程序(而不是试图在U盘上启动别的什么操作系统)。
步骤一:编写汇编程序(windows版)
在windows中我没找到可以用的bin86软件包,我下载了一个cygwin版本的,不过它的ld86总是报错。
而我平时一直喜欢用MinGW做C\C++的编译器,索性我们就使用这个windows版的gcc中自带的汇编程序gas。
在linux中当然也可以使用gas,不过这反而增加了点麻烦