1. 安装虚拟机Bochs
从上一篇中,我们知道计算机的启动过程是从主引导扇区才真正开始的,而操作系统就是从这开始一步一步把自己运行起来的。其实换个角度想一下,如果我们把编译好的程序放在主引导扇区,不也能够让处理器执行吗?
正常来说是可以的,而且还是在不依赖操作系统的情况下,让编译好的程序可以执行的唯一方法;但是,如果改写了硬盘的主引导扇区,那么windows和linux操作系统就会瘫痪,无法启动,显然这并不是我们所期望的。
解决办法就是在现有的计算机基础上,再虚拟出一台计算机,为此我们需要安装以下几个软件:Bochs,Editplus,NASM汇编器。
Bochs我们可以把它理解为是一个虚拟机,可以模拟64位处理器,并兼容32位和16位,bochs有各种操作系统版本的,这里我们下载Windows操作系统64位的2.6.8bochs。让bochs虚拟机来模拟一台没有“操作系统”的计算机,我们通过真实物理机可以控制这台“没有操作系统”的计算机,去观察这台计算机的寄存器和内存变化。
Editplus是一个功能强大的文本编辑器,我们在写汇编代码时需要用到的。
对于Bochs和Editplus两个软件的安装过程,很简单,这里就不再演示了,大家可以自行百度安装教程。这里我把虚拟机Bochs安装在D:\Bochs-2.6.8目录下,点击bochsdbg.exe程序启动虚拟机
点击start,如果看到下面这个窗口,说明虚拟机启动成功。
2. NASM汇编器
每种处理器都可能会有自己的汇编语言编译器,同一款处理器针对不同平台(linux或windows)也会有不同版本的汇编语言编译器。现存的汇编语言汇编器有很多种,用的比较多的有MASM,FASM,TASM,AS86等… 我们使用的是《x86汇编语言:实模式到保护模式》一书中提供的NASM汇编语言编译器,当然你也可以使用其他的汇编语言编译器。
关于NASM汇编器的下载安装,这里不做过多介绍。
安装完毕后点击运行,NASM汇编器运行之后并不会显示一个图形的用户界面,它只能使用命令的方式进行操作。比如我们用notepad编写了一个汇编语言源程序,并把它保存到NASM的工作目录下,文件名为001.asm ,汇编语言源程序的文件名后缀格式就是“.asm”。
然后在001.asm里写了2条汇编指令,指令后面跟的是注释,在汇编语言中注释的格式统一以“;”符号开始的,该符号后面的内容会被认为是注释,这样在编译过程中认为“;”符号后面开始的都是注释,就会忽略。
下一步就是编译汇编语言源程序了,我们打开CMD窗口,输入以下命令,然后回车,编译就完成了。
其中-f是指定输出文件的格式,而bin就是二进制的意思,-f bin合起来就是输出以二进制形式的文件,-o是指令输出的文件名,这里我们要求输出的文件名为以.bin为文件后缀。
再打开D:\asm\code文件目录,我们可以看到以.bin结尾的文件就是编译好的机器指令程序,打开001.bin文件,以十六进制显示,这些十六进制的内容就是处理器可执行的机器指令。
3. 配置NASM汇编器快速编译
有同学可能会觉得每次写完一个汇编程序都要这样输入命令进行编译实在是太麻烦了,为了方便我们可以使用配置快捷EditPlus快速启动编译器。
打开EditPlus软件,选择工具——首选项:
菜单文本:编译
把NASM汇编器的安装路径输入到命令窗口中,命令:“D:\asm\NASM\nasm.exe”
参数:"-f" “bin” “(FileDir)/$(FileNameNoExt).bin”
动作:捕获控制台输出
之后每次,我们写完一个汇编程序就可以通过editplus编辑器进行编译了,也可以直接按Ctrl + 1快捷键进行编译。