掌握汇编语言上机调试的重要性

 时间:2024-10-13 17:14:13

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后显示信息如下:

掌握汇编语言上机调试的重要性

5、 最左边给出的程序的段地址:偏移地址,即CS:IP值,右边是汇编语言指令,中间是汇编语言指令对应的机器语言指令。注意:调试程序默认的数制是十六进制。

6、g设置断点命令假如我们把断点设在CS:IP=141D:0004。在debug提示符-下键入g4(g和4之间可以有空格,也可以没有空格)结果如下:

掌握汇编语言上机调试的重要性

7、 程序停在断点处,并显示出所有寄存器以及各标志位的当前值,最后一行给出下一条将要执行指令的地址、机器语言指令及汇编语言MOVAX,1419。我们可以从显示的寄存器的内容来了解程序运行是否正确。从图中可以看出各个段的16位段基地址值,如(DS)=1419H,(ES)=141BH,(SS)=1419H,(CS)=141DH。

8、t单步执行命令 g命令设置了断点之后,从这个断点开始,每键入一次t命令,就按顺序执行一条指令,这样我们就可以跟踪程序的运行。通过查看寄存器和存储单元的内容,有利于查找程序中的算法错误或逻辑错误。 键入单步调试命令,运行结果如下:

掌握汇编语言上机调试的重要性

9、 可以看出,AX寄存器中原来的数0000已经被新的数1419替换了。下一条即将执行的指令是MOVDS,AX,我们继续执行单步调试命令。继续执行单步调试命令:

掌握汇编语言上机调试的重要性

10、 可以看出,DS寄存器中原来的数1409已经被新的数1419替换了。我们继续执行单步调试命令,程序就可以一步一步地往下执行。

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

掌握汇编语言上机调试的重要性

12、 最左边是数据段基地址:偏移量,中间是存储单元的内容,每行为1瀵鸦铙邮6个字节,为一个小段(Paragraph),梓脶阗擗最右边为对应的ASCII码,不能显示的ASCII字符以点号显示。 可以看出,我们定义的字符串已显示在数据段开始的存储单元中,字符串的首地址就是位于数据段0偏移处。该图显示的是串操作结束之后的结果。 从图的右边我们还可以看出,在数据段偏移地址0020H处又存放着同样的字符串,我们在数据段中只定义了一次,为什么在这里却显示了两次呢?原来1419:0020的地址恰恰就是附加段的首地址,1419:0020转换成物理地址是1419×10+0020=141B0H,而附加段的首地址是141B:0000转换成物理地址是141B×10+0000=141B0H,二者相等,从这里也可以看出,经过串移动操作后,数据段中的串已成功的移到了附加段中,这还可以从下面看出。 如果我们要查看附加段内0偏移地址开始的存储单元的内容,可以键入如下的命令:

掌握汇编语言上机调试的重要性

13、 同样,最左边是附加段基地址:偏移量,中间是存储单元的内容,每行为16个字节,为一个小段(Paragraph),最右边为对应的ASCII码,不能显示的ASCII字符以点号显示。从图的最右边可以看出,经过是串移动操作结束之后,数据段中的字符串已成功的移到了附加段中。

14、r显示寄存器内容命令语法格式:r[寄存器名] 方括号中寄存器名是可选的,如果没有键入寄存器名,则显示所有寄存器的内容。(1)显示全部寄存器的内容,可键入如下命令:

掌握汇编语言上机调试的重要性

15、(2)显示ax寄存器的内容,可键入如下命令:

掌握汇编语言上机调试的重要性

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

掌握汇编语言上机调试的重要性

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

  • Arduino 脉冲宽度调制编程效果解读
  • 如何在proteus中放置RS23串口显示器?
  • OPENCV入门教程二:opencv+VS2015开发环境配置
  • C语言中如何获取系统时间
  • 用汇编语言编写一个简单的程序
  • 热门搜索
    舒适达牙膏怎么样 梦幻西游大唐怎么加点 海参怎么发 微信密码怎么找回 宇怎么读 怎么打拼音带声调 纪念币怎么预约 我的世界怎么做飞机 一到十大写怎么写 瑞银信pos机怎么样