熟悉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,在算数运算中,标志位寄存器中的值是运算结果的一部分。