【asm基础】使用nasm和bochs学习汇编

工具介绍

nasm是一个汇编编译工具,它是开源的,且使用比较广泛,具体关于nasm的介绍可以看《nasmdoc.pdf》,在安装nasm后可以在安装目录下找到该pdf文件。

bochs是一个开源的模拟器,这里主要用来运行通过nasm编译出来的二进制。

还需要介绍一个工具vim,它是linux下广泛使用的编辑器,这里使用了它的windows版本。

使用流程

使用vim写一个简单的程序,代码如下:

mov ax, 0xb800 ;表示的是显存起始位置(后面还会提到)
mov ds, ax
mov byte [0x00], 'H' ;打印 Hello World!
mov byte [0x01],0x07
mov byte [0x02], 'e'
mov byte [0x01],0x07
mov byte [0x04], 'l'
mov byte [0x01],0x07
mov byte [0x06], 'l'
mov byte [0x01],0x07
mov byte [0x08], 'o'
mov byte [0x01],0x07
mov byte [0x0C], 'w'
mov byte [0x01],0x07
mov byte [0x0E], 'o'
mov byte [0x01],0x07
mov byte [0x10], 'r'
mov byte [0x01],0x07
mov byte [0x12], 'l'
mov byte [0x01],0x07
mov byte [0x14], 'd'
mov byte [0x01],0x07
mov byte [0x16], '!'
mov byte [0x01],0x07
jmp $ ;让 CPU 挂这里
times 393 db 0
db 0x55, 0xaa ;虚拟机需要检测 MBR 标记

然后通过nasm编译,编译命令如下:

编译得到的img文件将用于bochs中。

启动bochsdbg工具:

设置Disk&Boot这一项:

设置完成后保存,运行Start启动模拟,之后会有两个界面:

一个是前台的显示:

一个是后台的调试:

bochs启动后会停留在0xfffffff0的位置,即运行BIOS前。这里的BIOS可以在bochs的安装目录中找到:

打开bios.bin可以看到对应的代码:

之后通过s命令可以单步执行BIOS:

 

由于当BIOS执行完成后,会跳转到0x7c00的位置,而该位置的数据是BIOS从硬盘中读取的,这里就是我们的 Helloworld.img文件。通过b 0x7c00,可以在该位置打上断点,然后通过c命令执行运行到断点处:

这一句指令刚好跟我们的Helloworld.img二进制中的指令一致:

也与我们写的代码一致:

mov ax, 0xb800
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值