一些常见的汇编语言调试指令,调试时会用到
如何进行调试?
假设某段汇编语言程序经过编译、连接后生成可执行文件example.exe
- 在DOS提示符下键入debug命令进行调试
d:\masm>debug example.exe这时候就显示提示符==-,就可在这个短线后输入debug命令==。 - u 反汇编命令
【格式】-u [起始地址 终止地址]
【说明】这里方括号里的内容是可选的。
【功能】将机器代码反汇编成汇编指令
【结果】键入u后显示信息如下:
说明:最左边给出的程序的段地址:偏移地址,即CS:IP值,
右边是汇编语言指令,中间是汇编语言指令对应的机器语言指令。注意:调试程序默认的数制是十六进制。 - g 设置断点命令
【格式】-g 断点地址
【说明】启动程序,设置断点
【结果】假如我们把断点设在CS:IP=141D:0004。
在debug提示符==-下键入g4==(g和4之间可以有空格,也可以没有空格)结果如下:
程序停在断点处,并显示出所有寄存器以及各标志位的当前值,最后一行给出下一条将要执行指令的地址、机器语言指令及汇编语言MOV AX,1419。我们可以从显示的寄存器的内容来了解程序运行是否正确。从图中可以看出各个段的16位段基地址值,如==(DS)=1419H,(ES)=141BH,(SS)=1419H,(CS)=141DH==。执行的下一步DS EX会变化成黄色部分的值
- t 单步执行命令g命令设置了断点之后,从这个断点开始,每键入一次t命令,就按顺序执行一条指令,这样我们就可以跟踪程序的运行。通过查看寄存器和存储单元的内容,有利于查找程序中的算法错误或逻辑错误。
【格式】t
键入单步调试命令,运行结果如下:

可以看出,AX寄存器中原来的数0000已经被新的数1419替换了。下一条即将执行的指令是MOV DS,AX,我们继续执行单步调试命令。
继续执行单步调试命令:
可以看出,DS寄存器中原来的数1409已经被新的数1419替换了。我们继续执行单步调试命令,程序就可以一步一步地往下执行。
d 显示存储单元的内容命令对于我们这个程序,由于它是要求把存储器数据段中的一串字符传送到附加段中,所以单从寄存器或在DOS提示符下键入可执行文件名是看不到运行结果的,因而需要用d命令分别查看数据段和附加段的有关区域的内容。
【格式】-d 段基址:偏移地址
【结果】如果我们要查看数据段内0偏移地址开始的存储单元的内容,可以键入如下的命令(假设程序已运行到RET指令处,即CS:IP=141D:001C ):
最左边是数据段基地址:偏移量,中间是存储单元的内容,每行为16个字节,为一个小段(Paragraph),最右边为对应的ASCII码,不能显示的ASCII字符以点号显示。
[例如1419:0000即数据段0偏移处,对应61,由于是按4位二进制数显示一位十进制数进行显示的,因此我们将61变为0110 0001=97,等于a的ASCI码值]
可以看出,我们定义的字符串已显示在数据段开始的存储单元中,字符串的首地址就是位于数据段0偏移处。该图显示的是串操作结束之后的结果。从图的右边我们还可以看出,在数据段偏移地址0020H处又存放着同样的字符串,我们在数据段中只定义了一次,为什么在这里却显示了两次呢?原来1419:0020的地址恰恰就是附加段的首地址,1419:0020转换成物理地址是1419×10+0020=141B0H,而附加段的首地址是141B:0000转换成物理地址是141B×10+0000=141B0H,二者相等,从这里也可以看出,经过串移动操作后,数据段中的串已成功的移到了附加段中,这还可以从下面看出。
如果我们要查看附加段内0偏移地址开始的存储单元的内容,可以键入如下的命令:
同样,最左边是附加段基地址:偏移量,中间是存储单元的内容,每行为16个字节,为一个小段(Paragraph),最右边为对应的ASCII码,不能显示的ASCII字符以点号显示。从图的最右边可以看出,经过是串移动操作结束之后,数据段中的字符串已成功的移到了附加段中。r 显示寄存器内容命令
【格式】r [寄存器名]
方括号中寄存器名是可选的,如果没有键入寄存器名,则显示所有寄存器的内容。【结果】
(1) 显示全部寄存器的内容,可键入如下命令:
(2) 显示ax寄存器的内容,可键入如下命令:
最后一行的冒号提示以新的值替换ax中原有的值。如果输入1234后ax的内容变为1234H,结果如下:
- q 退出命令
【格式】q
【结果】结束debug运行环境,回到DOS提示符。
- q 退出命令