熟悉DEBUG调试环境实验

  • 格式:docx
  • 大小:157.78 KB
  • 文档页数:6

实验一、Debug调试

姓名:孙杨威 学号:12281201

班级:计科1202班 任课教师:李济生

一、实验目的

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

2. 学习DEBUG调试工具的基本使用方法;掌握debug调试命令a、u、r、d、t、g

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

二、实验题目

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

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

三、实验过程

1. 启动计算机的WINDOWS操作系统,在开始菜单中找到“运行”,输入“cmd”后回车,启动ms-dos command程序,再在该程序内输入“DEBUG”并按回车,即启动DEBUG调试程序。

2. 开始编程

可以看到,对32位数的低16位操作时,存放地址是073F:0100,指令长度为3,即在寄存器类型的指令上增加1,在进行ADC加法指令时,考虑到了进位CF,所以指令长度为4。 使用r命令后,可以看到指令执行前各寄存器的内容,CS:IP的内容为0100,执行的指令为MOV AX,F271,操作数寻址为立即数寻址,内存单元的值为0F271。

使用t命令单步执行指令后,所得结果如图

执行过程中,CS:IP的内容随指令长度的变化依次增加,标志位寄存器只有AF,PF,CF的值在计算过程中有变化,最后AF=AC,说明低4位向高4位有进位,而CF=CY,说明最高位有进位,OF=NV,表明计算结果没有溢出。

对程序使用r命令查看寄存器AX,DX的值,如下图

可知,AX = 4909,DX = 07D6,CF=1,说明运算结果低16位为4909,高16位为07D6,还有一位进位1,即结果是107D64909,计算正确。

2.

打开t3-2.exe,并使用-u命令反汇编的将结果如下图:

执行指令结果如下图:

使用d命令查看程序运行过后的结果如下图,可以看到,内存单元的存放顺序是低地址放低字节,高地址放高字节,同时数据的存放是按顺序连续存放的,指令的存放与数据是同时的,都存放在连续的内存地址中,

使用e命令对内存单元的内容进行修改,再次运行程序,可见结果也有了相应的改变。

图表 1

四.实验体会

通过本次实验我学会了如何在64位系统中使用debug,并初步了解了debug的功能和作用,以及相关工具的运用。Debug基本指令a、u、r、d、t、g、e的用法使我收益匪浅。第一个实验是编写一个32位二进制数的加法,因为初步认识debug,不太熟悉,请教了同学才知道,的确费了很多力,有了一点经验,第二个实验做起来才得心应手了许多,这让我认识到万事开头难,只要不怕困难,最后一定能解决。

思考题:

1.程序中的指令、数据是如何在存储器中存储的?

答:程序中的数据和指令都是按顺序分别在不同的段内存地址中存放的,低地址放低字节,高地址放高字节。

2.如何理解程序执行过程的顺序性?

答:之所以说程序是按顺序执行的,是因为在程序执行时,指向代码段的内存偏移地址寄存器IP按照指令长度,从小到大,自动顺序跳跃。

3.如何理解标志位寄存器中的数据?

答:标志位寄存器中的数是用来指示当前指令执行之前各部分的状态,如从OF可以知道上次执行计算时有没有产生溢出,从ZF可以判断上条指令执行后是不是结果为0,同时,有的标志位寄存器还参与运算,如CF,AF,在算数运算中,标志位寄存器中的值是运算结果的一部分。