汇编软件MASM和调试工具DEBUG的使用
第一部分 汇编软件MASM简介
(备注:MASM汇编软件不区分大小写字母)
1.1 MASM简介
汇编就是把汇编语言编写的源代码(扩展名为.asm)翻译成计算机能够识别的二进制语言序列,目前常用的汇编程序是MASM,简称宏汇编程序。宏汇编程序目前有两个版本MASM5.0和MASM6.0
汇编步骤:
第一步:将源程序翻译成等价的二进制语言,形成的文件扩展名为.obj
备注:
用MASM5.0编译时,汇编过程还会产生列表文件(扩展名为.LST),主要用于给出源程序和机器代码程序清单,供查询程序使用;
汇编过程还会产生交叉引用文件(扩展名为.CRF),它是为一个源程序所引用的各种符号进行前后对照的文件,主要用于给出不同文件段中互相引用的全部符号表;
这两个文件是可有可无的,可在汇编过程加以控制。
但是用MASM6.0不会产生这两个文件。
第二步:链接
链接就是把一个或者多个目标文件合并成一个可执行的文件(扩展名为.EXE)
备注:
链接过程还会生出一个扩展名为.MAP的文件,它可以每个段的地址分配情况和长度;在链接的过程中还与一个库文件(扩展名为.LIB)相关。一般的汇编程序不需要库文件,只有与某些高级语言(如C语言)接口时才需要库文件,此时只需要输入库名即可。
第三步:运行
在此过程中,常用的调试工具是DEBUG。
1.2 应用举例
比如下面的程序:
;abcd.asm
data segment
data ends
stack segment para stack
stack ends
code segment
start: push ds
code
第一步:汇编
第二步:链接
示意图如下:
示意图如下:
第二部分: 调试工具DEBUG的使用
(这里介绍一个常用的DEBUG命令)
2.1 A(汇编命令)
功能:从汇编语言程序创建可以执行的机器码
格式:A address
参数:address制定汇编语言程序的位置,address使用十六进制数,并且不用h结尾。
备注:如果不制定位置,它会从上次停止处得地址开始汇编。
执行效果:
2.2 C(表命令)
功能:比较内存的两个区域存放的内容
命令格式:C range address
参数:
range:指定第一个待比较的内存起始地址和结束地址
address:指定待比较的第二个内存区域的起始地址
使用举例:
2.3 D(显示内存名)
格式:D [range]
参数:range 指定显示其内容的内存区域的起始地址和长度,如果不指定range则显示从以前D命令指定的显示地址范围的末尾处开始显示128个字节内容。
使用示例:
2.4 R(寄存器显示命令)
功能:显示或者改变一个或者多个CPU寄存器的内容
格式:R [register-name]
参数:无
显示所有寄存器的内容,以及寄存器存储区域中的标志。
执行示例:
参数:[register-name]指定显示值的寄存器名,同可以还可以对值进行修改
2.5 T(跟踪命令)
功能:执行一条指令,并显示所有寄存器的内容,所有标志的状态和所执行指令的源代码形式。
命令格式:T[=address] [number]
参数:
=address指定DEBUGE启动跟踪指令的地址,如果省略,则跟踪将从当前CS:IP寄存器所指定的地址开始
number:指定要跟踪的指令数,该值为十六进制数,默认值为1
2.6 G(运行命令)
格式:
G [=address][breakpoints]
参数:
=address:指定当前在内存中药开始执行的内存地址,如果不指定参数,将从CS:IP寄存器中当前地址中开始执行程序。
breakpoints:为G命令设置的临时断点
示例如下:
2.7 U(反汇编命令)
格式:
U[range]
参数:
range:指定反汇编代码的起始地址和结束地址,或者起始地址和长度
无参数:则从前面U命令所显示地址的后一个地址开始,显示20h个字节内容(默认情况)
2.8 Q(退出命令)
在DEBUG的提示符下输入Q,将会回到DOS环境下。