DOSBox 0.74环境下进行汇编语言的调试

一些常见的汇编语言调试指令,调试时会用到
如何进行调试?
假设某段汇编语言程序经过编译、连接后生成可执行文件example.exe

  1. 在DOS提示符下键入debug命令进行调试
    d:\masm>debug example.exe这时候就显示提示符==-,就可在这个短线后输入debug命令==。
  2. u 反汇编命令
    【格式】-u [起始地址 终止地址]
    【说明】这里方括号里的内容是可选的。
    【功能】将机器代码反汇编成汇编指令
    【结果】键入u后显示信息如下:
    在这里插入图片描述
    说明:最左边给出的程序的段地址:偏移地址,即CS:IP值,
    右边是汇编语言指令,中间是汇编语言指令对应的机器语言指令。注意:调试程序默认的数制是十六进制
  3. g 设置断点命令
    【格式】-g 断点地址
    【说明】启动程序,设置断点

    【结果】假如我们把断点设在CS:IP=141D:0004。
    在debug提示符==-下键入g4==(g和4之间可以有空格,也可以没有空格)结果如下:
    在这里插入图片描述

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

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

在这里插入图片描述
可以看出,AX寄存器中原来的数0000已经被新的数1419替换了。下一条即将执行的指令是MOV DS,AX,我们继续执行单步调试命令。
继续执行单步调试命令:
在这里插入图片描述
可以看出,DS寄存器中原来的数1409已经被新的数1419替换了。我们继续执行单步调试命令,程序就可以一步一步地往下执行。

  1. 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字符以点号显示。从图的最右边可以看出,经过是串移动操作结束之后,数据段中的字符串已成功的移到了附加段中。

  2. r 显示寄存器内容命令
    【格式】r [寄存器名]
    方括号中寄存器名是可选的,如果没有键入寄存器名,则显示所有寄存器的内容。【结果】
    (1) 显示全部寄存器的内容,可键入如下命令:
    在这里插入图片描述
    (2) 显示ax寄存器的内容,可键入如下命令:
    在这里插入图片描述
    最后一行的冒号提示以新的值替换ax中原有的值。如果输入1234后ax的内容变为1234H,结果如下:
    在这里插入图片描述

    1. q 退出命令
      【格式】q
      【结果】结束debug运行环境,回到DOS提示符。

版权声明:本文为qq_45639157原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。