熟悉DEBUG调试环境试验

来源:互联网 发布:ettercap linux 安装 编辑:程序博客网 时间:2024/06/08 20:10

  1. 实验目的与要求

  1. 进一步学习汇编语言基本指令使用方法;

  2. 2. 学习DEBUG调试工具的基本使用方法;掌握debug调试命令aurdtg

  3. 逐条观察程序指令的执行过程,理解指令的功能,理解程序自动、顺序地执行的概念,实践其过程(重点)

  1. 实验内容

  1. 编写、输入一个32位二进制数相加程序,逐条执行指令,观察指令执行情况。

  2. 使用已经过汇编和连接的小程序(t3-2.exe),将其装入内存,逐条执行指令,观察执行过程和结果。在实验过程中,使用E命令修改XXXYYY单元中的数据,再重新计算其结果。

  1. 实验程序设计思路

实验内容一思路:32位二进制数相加分为高位带符号16位和低位不带符号位16位,分别将两个32位数的高位16位带符号相加值赋给sum1,将两个32位数的低位16位不带符号相加赋给sum2,最后根据标志符号位来判断这两个32位数是否相加进位,得到最后的结果,其中高位16位为sum1,低位16位为sum2

程序流程图如下:

 

实验内容二思路:将代码进行外包装好后在dos窗口中运行并利用E命令进行修改存储单元的内容,看看运行的结果的区别。

 

 

  1. 实验结果分析

实验内容一:

  1. 实验的原始数据:

    先利用u命令进行反汇编,查看代码的内容是否成功读入dos窗口中并检查代码的内容是否正确。

代码内容确认无误后利用t命令进行单步调试

 

 

给数据段寄存器DS赋值

 

 

将地址为0000H的数据单元的内容赋给DX寄存器

因为DX内容是一个字,所以连跳两个数据单元,将地址为0002H的数据单元的内容赋给AX寄存器

 

 

同理,将地址为0004H的数据单元的内容赋给BX寄存器

 

 

同理,将地址为0006H的数据单元的内容赋给CX寄存器

 

 

AX寄存器的内容和CX寄存器的内容相加后放入AX寄存器中

 

 

AX寄存器的内容放入地址为0008H的数据单元中,从标志位寄存器中可以看出来因为是无符号数相加所以看CY可知产生了进位,OV表示发生了溢出现象

 

 

 

 

BX寄存器内容和DX寄存器内容相加,并将结果存入DX寄存器中

 

 

 

 

DX寄存器中的内容存入地址为000A的数据单元中,看标志位寄存器的数值变化情况因为是NV可知没有发生溢出,NC表示没有发生进位,此时寄存器AX的值为7465H表示两数低16位相加的结果,寄存器DX的值为0008H表示两数高16位相加的结果,即最后的结果为00087465H

 

 

返回DOS窗口,结束代码段

 

 

 

 

  1. 实验结果:

    实验结果表示最后的运算正确,最后32位数相加的值为00087465H

         

实验内容二:

  1. 实验的原始数据:

    先利用u命令进行反汇编,确认代码的内容。

    再利用t命令进行单步调试

     

     

    给数据段寄存器DS赋值

     

     

    将地址为0000H的单元内容赋给寄存器AX,从DS0000=1234可知单元内容为1234H

     

     

    XOR异或命令将DX寄存器内容置零

    AX寄存器内容自身相加并赋给自身

     

     

    ADCDX+00作用是将进位标志值1加入到DX中,而从标志寄存器中我们可以看出此时并没有发生溢出,所以应该DX并没有获得进位的值

     

     

    再次执行将AX寄存器内容自加给自己的命令

     

     

    ADCDX+00作用是将进位标志值1加入到DX中,而从标志寄存器中我们可以看出此时并没有发生溢出,所以应该DX并没有获得进位的值

     

     

    再次执行将AX寄存器内容自加给自己的命令

     

     

    ADCDX+00作用是将进位标志值1加入到DX中,而从标志寄存器中我们可以看出此时并没有发生溢出,所以应该DX并没有获得进位的值

     

    再次执行将AX寄存器内容自加给自己的命令

     

     

    ADCDX+00作用是将进位标志值1加入到DX中,而从标志寄存器OV中我们可以看出此时发生溢出,所以应该DX获得进位的值加1

     

     

    将地址为0002H的数据单元的内容同AX寄存器内容相加并将结果赋给AX寄存器,而0002H地址寄存器的数据单元内容为5678H

     

     

    ADCDX+00作用是将进位标志值1加入到DX中,而从标志寄存器中我们可以看出此时并没有发生溢出,所以应该DX并没有获得进位的值

     

     

    AX寄存器的内容放入地址为0004H的数据单元中。

     

     

    DX寄存器的内容放入地址为0006H的数据单元中。

    返回DOS窗口并结束代码段

     

     

  2. 实验结果:

    从中可看出AX自加后的结果产生了进位,并将进位赋给了DX,即DX作为高16位,AX的值作为低16位。

     

     

    修改XXXYYY变量的值再进行运算,将XXX的值改为8866HYYY的值改为9911H实验过程如下:

     

  1. 实验体会

  通过本次实验,我了解了DOS窗口的基本操作步骤,和如何利用外包装将DOS汇编指令进行包装后再运行。在实验过程中遇到了一些错误例如在MASM进行生成.EXE文件时无法识别0F365H这个标志,我查阅资料并没有相关错误的产生原因,后来发现是因为在生成.EXE文件时在还未生成.OBJ文件时就命名了所以报错了,而且如果是直接进行DOS窗口进行汇编的话一些伪代码是无法识别的,比如在ASM文件中可以写0F365H,但是在DOS窗口里用A命令写代码是不能在字母前面加0的。

MOV WORD PTR ZZZ,AX

MOV WORD PTR ZZZ+2,DX   

DOS窗口中是无法直接进行汇编操作的。并且在实验过程中熟悉了各种命令的使用,对汇编语言有了更深一层的理解和认知。

0 0
原创粉丝点击