学汇编语言肯定还是要练习的,ZJUT 的汇编课程使用的汇编语言是微软的 MASM。

最理想的实验环境就是 DOS 系统。

Dos 模拟器

哥们的这篇文章中用的 dosbox 其实并不好用: 例如无法迅速调整界面字体大小,导致在高分辨环境下十分瞎眼。

笔者推荐使用 dosbox-staging.

在 Archlinux 下安装:

1
paru -S dosbox-staging-bin

开箱即用,十分方便。

配置

下载常用工具 (上述连接也是哥们的服务,笔者比较懒hhh)

解压到某一个文件夹中,例如笔者是 ~/Learn/asm/tools

Dos模拟器需要手动挂载盘符,而且没有添加 PATH 变量的情况下十分甚至九分的难用。

在配置文件 ~/.copfig/dosbox-staging.conf 最后(autoexec块)后加上

1
2
3
MOUNT C: path/to/your/dir
C:
SET PATH=%PATH%;C:\TOOLS

上述命令假设你的工作目录下的tools目录中为masm.exe等

DOS 系统不区分大小写

除此之外 masm 在进行汇编以及 link 进行链接的时候还需要敲一堆回车,为了方便笔者编写了以下的 bat 批处理文件

1
2
3
4
5
echo compile and run %1

masm %1.asm %1.obj nul.lst nul.crf
link %1.obj, %1.exe, , , ,
%1.exe

并将之放置在上述的 tools 目录中 使用命令(例如这个脚本叫run.bat, 你的汇编源代码为example.asm)

1
run example

则可以编译运行.

Debug 常用命令

  • q 退出
  • ? 帮助菜单
  • d 10:10 10 以一行16个字节的方式打印从10:10 后 10 * 16 个字节
  • u 10:10 10 反编译,同上范围
  • r 打印寄存器状态
  • u cs:ip 可以直接通过cs等等读取寄存器
  • t 1 执行1步,(默认1步)

一般如果要看数据段内容,执行:

  • t 3(执行到寄存器赋值完毕)
  • d ds:0 打印 ds:0 开始的几行内容