掌握汇编语言上机调试的重要性
1、 为了便于大家理解,以及直观体现汇编的调试过程。首先我们看一段程序,从中可以看出调试对于程序员的重要性。下面一段代码要实现的功能是:把数据段中的串string1传送到附加段的string2中。
2、datasegment ;定义数据段string1db‘assemblylanguage’dataendsextrasegment ;定义附加段string2db17dup(?)extrasegmentcodesegment ;定义代码段mainprocfarassumecs:code,ds:data,es:extrastart:pushdsxorax,ax ;ax寄存器清零,作用同subax,ax一样pushaxmovax,data ;把数据段地址装入ds寄存器movds,axmovax,extra ;把附加段地址装入es寄存器moves,axleasi,string1 ;把源串首址装入si寄存器leadi,string2 ;把目的串首址装入di寄存器movcx,17 ;把字符串长度装入cx寄存器cld ;清方向标志,在串处理时,地址自动增加repmovsb ;重复串传送操作,重复次数放在cx中retmainendpcodeendsendstart
3、 假设上述代码经编译、连接后生成的可执行文件是example.exe1、在DOS提示符下键入debug命令。d:\masm>debugexample.exe 这时候就显示提示符-,就可在这个短线后输入debug命令。
4、u反汇编命令指令使用方法:-u[起始地址终止地址];上面方括号里的内容是可选的。他的作用是将机器代码反汇编成汇编指令;键入u后显示信息如下:

7、 程序停在断点处,并显示出所有寄存器以及各标志位的当前值,最后一行给出下一条将要执行指令的地址、机器语言指令及汇编语言MOVAX,1419。我们可以从显示的寄存器的内容来了解程序运行是否正确。从图中可以看出各个段的16位段基地址值,如(DS)=1419H,(ES)=141BH,(SS)=1419H,(CS)=141DH。
8、t单步执行命令 g命令设置了断点之后,从这个断点开始,每键入一次t命令,就按顺序执行一条指令,这样我们就可以跟踪程序的运行。通过查看寄存器和存储单元的内容,有利于查找程序中的算法错误或逻辑错误。 键入单步调试命令,运行结果如下:

10、 可以看出,DS寄存器中原来的数1409已经被新的数1419替换了。我们继续执行单步调试命令,程序就可以一步一步地往下执行。
11、d显示存储撮劝丛食单元的内容命令对于我们这个程序,由于它是要求把存储器数据段中的一串字符传送到附加段中,所以单从寄存器或在DOS提示符下键入可执行文围泠惶底件名是看不到运行结果的,因而需要用d命令分别查看数据段和附加段的有关区域的内容。使用方法:-d段基址:偏移地址程序在DOS中显示的内容:如果我们要查看数据段内0偏移地址开始的存储单元的内容,可以键入如下的命令(假设程序已运行到RET指令处,即CS:IP=141D:001C):

13、 同样,最左边是附加段基地址:偏移量,中间是存储单元的内容,每行为16个字节,为一个小段(Paragraph),最右边为对应的ASCII码,不能显示的ASCII字符以点号显示。从图的最右边可以看出,经过是串移动操作结束之后,数据段中的字符串已成功的移到了附加段中。
14、r显示寄存器内容命令语法格式:r[寄存器名] 方括号中寄存器名是可选的,如果没有键入寄存器名,则显示所有寄存器的内容。(1)显示全部寄存器的内容,可键入如下命令:

16、 最后一行的冒号提示以新的值替换ax中原有的值。如果输入1234后ax的内容变为1234H,结果如下:

17、q退出命令 结束debug运行环境,回到DOS提示符。