步骤一 下载nasm编译器
nasm编译器用于把汇编代码转换为机器指令,免费,直接在官网上下载安装即可,安装完成后最好配置一下环境变量,在控制台输入:nasm -version
来测试是否安装成功:
步骤二 编写源代码
新建一个a.asm文件,输入以下代码:
mov ax,0xb800
mov ds,ax
mov byte [0x00],'a'
mov byte [0x02],'s'
mov byte [0x04],'m'
jmp $
times 510-($-$$) db 0
db 0x55,0xaa
然后执行编译:nasm -f bin a.asm -o a.bin
步骤三 安装virtualBox虚拟机
上一步编译了一个a.bin文件,执行这个a.bin的方式有很多,在windows上可以连接成exe执行,这里使用书上使用的方式,在虚拟机中执行。
首先下载安装virtualBox虚拟机,然后点新建按键新建一台虚拟机器。新建时要注意以下两点:
- 虚拟机的类型版本要选择Other和Other/Unknown
- 需要自己创建一个虚拟硬盘,硬盘的类型一定要是VHD,且一定要是固定大小的。至于硬盘大小,不要太小即可,例如可以选择100M。还有一点要记住这个硬盘文件位置,一会要写数据进去。
除了这两点,其他的内容随意就好,这还有一篇详细的安装使用方法VirtualBox安装手册
步骤四 把机器指令写入到硬盘中
计算机在启动时有一个约定:会把硬盘中最开始的512字节读取到内存执行,所以,我们只需要把刚刚编译好的机器指令a.bin写入到虚拟硬盘的最开始的512字节就行。
《x86汇编语言-从实模式到保护模式》一书的作者提供了一个工具可以写入,可以自行百度下载booktool使用,由于我用的是mac,作者只提供了windows的程序,所以只能自己写入Java代码来写入了
public class Tool {
private static final String path = "/Users/luohao/VirtualBox VMs/8086/";
public static void main(String[] args) throws Exception{
RandomAccessFile randomAccessFile = new RandomAccessFile(path + "8086.vhd", "rw");
FileInputStream fis = new FileInputStream(path + "a.bin");
randomAccessFile.seek(0);
byte[] buff = new byte[1024];
int len = 0;
while ((len = fis.read(buff)) >= 0) {
randomAccessFile.write(buff, 0, len);
}
System.out.println("Finish...");
}
}
注意运行时先修改a.bin文件的位置和你硬盘文件的位置
步骤五 执行
选择刚刚创建的虚拟机,点击启动即可
不出意外的话,屏幕上会显示asm
字符串
网友评论