一、一个源程序从写出到执行的过程
第一步:编写汇编源程序
第二步:对源程序进行编译连接
第三步:执行可执行文件中的程序
二、源程序
codesg segment ; 定义一个段,段的名称为“codesg”,这个段从此开始
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4C00H
int 21H
codesg ends ; 名称为“codesg”的段到此结束
end
伪指令:
1. segment 和 ends 的功能是定义一个段,segment 说明一个段开始,ends 说明一个段结束。一个段必须有一个名称来标识
2. end 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指 end 就结束对源程序的编译
标号:
汇编源程序中,除了汇编指令和伪指令外,还有一些标号,比如 “codesg“ 一个标号指代了一个地址。
程序返回:
mov ax,4C00H
int 21H
三、编译
完成对源程序的编辑后,可以对其进行编译,生成包含机器代码的目标文件
VS Code 中下载插件 MASM/TASM
打开DOSBox 挂载
编译过程:
解析:
1. 运行 masm 程序,第一个默认文件后缀名是 .asm,所以直接输入 1 (在同一目录下)
2. 提示输入要编译出的目标文件的名(回车默认为 1.obj)
3. 提示输入列表文件的名称(回车跳过)
4. 提示输入交叉引用文件的名称(回车跳过)
1. 源文件(.asm)
源文件是你编写的汇编代码,通常扩展名为 .asm
。这是编译过程的输入文件,其中包含了你的汇编语言指令。
作用:
- 包含程序的汇编源代码。
- 由 MASM 编译器读取和处理,生成目标文件。
2. 目标文件(.obj)
目标文件是汇编源文件经过编译后生成的中间文件,通常扩展名为 .obj
。它包含了机器码,但还不是一个可执行文件。
作用:
- 包含了机器码和重定位信息,可以被链接器处理。
- 由 MASM 编译器生成,用于后续的链接步骤。
3. 列表文件(.lst)
列表文件是编译过程中可选生成的文件,通常扩展名为 .lst
。它包含了源代码、生成的机器码、符号表以及其他调试信息。
作用:
- 用于调试和查看编译过程中的详细信息。
- 方便开发者检查源代码与生成的机器码的对应关系。
4. 交叉引用文件(.crf)
交叉引用文件也是编译过程中可选生成的文件,通常扩展名为 .crf
。它列出了源代码中每个符号(变量、标签等)的定义和使用位置。
四、连接
连接过程
解析:
1. 运行 link 程序,第一个默认文件后缀名是 .obj,所以直接输入 1 (在同一目录下)
2. 提示输入要生成的可执行文件的名称,默认为 1.exe
3. 提示输入映像文件的名称(回车跳过)
4. 提示输入库文件的名称(回车跳过)
5. 最后一个警告是没有栈段
1. 目标文件(.obj)
作用:
- 包含汇编代码编译后的机器码和重定位信息。
- 被 LINK 程序读取并链接成可执行文件。
2. 可执行文件(.exe)
作用:
- 最终生成的可执行程序文件。
- 可以在操作系统下运行。
3. 映像文件(.map)
作用:
- 可选文件,用于调试。
- 包含程序的内存映像和符号信息。
- 帮助开发者理解程序的内存布局和符号地址。
4. 库文件(.lib)
作用:
- 可选文件,包含预编译的函数和程序代码。
- 在链接过程中,LINK 程序可以使用库文件中的代码。
- 有助于重用代码和减少可执行文件的大小。
五、以简化方式进行编译和连接
注意:同一目录下才不用加路径
六、程序执行过程的跟踪
为了观察程序的运行过程,可以使用 Debug
使用 T 命令单步执行每一条命令,到了 int 21H 用 P 命令结束程序