0.准备工作
  • masm.exelink.exe拷贝到虚拟机的DOS系统中;
  • 熟悉DOS系统自带编辑器edit.exe的使用;

再来回顾一下整个过程:
【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编

1. 使用edit编辑源程序

在命令行中输入edit打开编辑器,然后编辑程序,以如下源代码为示例:

assume cs:coding

codesg segment
	mov ax,0123H
	mov bx,0456H
	add ax,bx
	add ax,ax

	mov ax,4c00H
	int 21H
codesg ends

end

【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_02
然后将源代码保存为.asm格式的文件:
【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_03
【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_04

2.使用masm对源文件编译

本文中使用masm 5.0汇编编译器。

  1. 进入masm.exe所在目录,运行masm:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_05
  2. 输入源文件的文件名:
  • 文件名称:如果是.asm,则直接输入filename即可,否则输入完整的文件名;
  • 文件路径:如果是当前目录,则直接输入filename即可,否则输入完整的路径名;
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_06
  1. 输入目标文件的文件名,默认.obj格式:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_07
  2. 输入列表文件的名称,这个文件是编译器将源程序编译为目标文件所产生的中间文件,不需要产生,直接按回车即可:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_08
  3. 输入交叉引用文件的名称,这个文件同列表文件一样,是编译器将源程序编译为目标文件产生的中间结果,不需要保存,直接按回车即可:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_09
  4. 编译过程错误提醒和警告提醒
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_10
3.使用link对目标文件链接

本文中使用link 3.60链接器。

  1. 进入link.exe所在目录,运行link:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_11
  2. 输入目标文件的文件名,规则同上:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_12
  3. 链接器已经默认可执行程序文件名为1.exe,直接按回车即可:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_13
  4. 输入映像文件的名称,这个文件是链接器将目标文件链接为可执行文件的过程中产生的中间结果,不需要产生,直接按回车即可:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_14
  5. 输入库的名称,如果程序里用到了库里的子程序,则需要输入,这里没有用到,直接回车即可:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_15
  6. 链接完成,生成可执行程序,输入链接信息:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_16
4. 编译和链接过程的简化

从2、3节可以看出,整个编译和链接的过程经历了很多不必要的步骤,这里可以将整个过程简化:

  • 编译使用:masm <filepath\filename>;(注意最后有个分号)
  • 链接使用:link <filepath\filename>;(注意最后有个分号)

【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_17

5.执行可执行文件

首先进入到可执行程序所在目录,然后输入文件名运行即可:
【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_18

6.使用debug调试可执行程序

debug程序的作用:

  • 将程序载入内存;
  • 设置CS:IP指向程序的入口;
  • 继续保持对CPU的控制,便于执行程序;
  1. 使用命令debug <可执行程序路径\名称>开始调试(名称需要带上.exe后缀):
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_19
  2. 使用debug程序的指令开始调试,如:
    【8086汇编】从汇编源程序到可执行文件(masm + link工具链的使用)_8086汇编_20