实验一、Debug调试实验指导书
一、实验目的
1.进一步学习汇编语言基本指令使用方法;
2.学习DEBUG调试工具的基本使用方法;掌握debug调试命令a、u、r、d、t、g等
3.逐条观察程序指令的执行过程,理解指令的功能,理解程序自动、顺序地执行的概念,实践其过程(重点)。
二、实验题目
1.编写、输入一个32位二进制数相加程序,逐条执行指令,观察指令执行情况。
2.使用已经过汇编和连接的小程序(),将其装入内存,逐条执行指令,观察执
行过程和结果。在实验过程中,使用D命令修改XXX和YYY单元中的数据,再
重新计算其结果。
三、编程提示
1.启动计算机的WINDOWS操作系统,运行DEBUG程序。
2.方法1:在开始菜单中到“运行”,输入“cmd”后回车,启动ms-dos command程序,
再在该程序内输入“DEBUG”并按回车,即启动DEBUG调试程序。
3.方法2:在开始菜单中到“运行”,输入“DEBUG”后确定,即启动DEBUG调试程
序。
4.开始编程
方法1:在debug中输入a命令,并回车。显示出的地址是当前指令代码所存放的地址。接着,逐条有序地输入汇编指令,直接回车即可结束程序指令的输入过程。
如需修改程序,则先确定错误指令的地址,再使用“a 地址号”命令修改。注意,修改前后指令长度如发生改变,会对该指令以后的指令码的存储造成影响,使程序不能正确执行。(为什么?)
方法2:将事先已经准备好的可执行程序(.exe文件)装入存储器,使用如下命令:debug 文件名.exe。(.exe必须写全,否则不到程序文件,为什么?)
5.程序调试过程
(1)使用u命令将程序反汇编,观察其汇编指令的与源程序的对应关系,观察每一
条指令的代码、存放地址、指令代码长度等;(重要)
(2)使用r命令读出各寄存器中的数值,从CS:IP寄存器中的数值确定程序当前应执
行的指令;(结合计算机硬件知识加以理解)
(3)察看当前指令的长度、指令代码、指令功能、操作数的寻址方式、所涉及的寄
存器和存储器中的数值;
(4)使用d命令读出所关注的存储器中的数值,并计算其地址顺序;
(5)使用t命令执行单条指令,察看指令执行后相关存储器和存储器中的数值变化情
况,察看标志位寄存器的变化情况,判断指令执行后的计算结果是否正确?如
遇到条件转移指令时要判断是否转移,转移或不转移时下一条指令的地址是什
么?(重要)
(6)使用e命令读出、修改存储器中的相关数据,可重新执行相关计算指令,再观
察结果。
(7)使用g命令可以执行一段程序,相当于设置“断点”执行(例如: g 段地址:偏移
地址)。(在C语言集成调式环境中也可单行执行、设置断点等,与t命令有何联
系?)
四、实验步骤
1.进入DEBUG,输入程序代码。
2.按照题目要求和编程提示进行实验,并对实验数据进行记录。
五、实验要求
逐条执行实验所用汇编语言小程序中的指令,每执行一条指令都要观察:
1.CS:IP寄存器中的数值,看其指向了哪条指令,该指令的长度如何?指令代码如何?
2.观察其它各寄存器的数值变化,获悉指令的执行结果。
3.观察每条指令执行后,标志位寄存器的数值变化情况。DEBUG中标志位寄存器数
据表示方式如下表:
4.读出相关存储器中的数据,获悉程序中用于计算的数据的存储地址和数据情况,以
及指令的执行结果。
六、思考题
1.程序中的指令、数据是如何在存储器中存储的?
2.如何理解程序执行过程的顺序性?
3.如何理解标志位寄存器中的数据?
七、附:t3-2.asm
DSEG SEGMENT
XXX DW 1234H
YYY DW 5678H
ZZZ DD ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV AX,XXX
XOR DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,YYY
ADC DX,0
MOV WORD PTR ZZZ,AX
MOV WORD PTR ZZZ+2,DX
MOV AH,4CH
INT 21H
CSEG ENDS
END START
实验二、寻最大和最小数实验
一、实验目的
1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。
2、通过循环结构程序熟悉汇编语言程序设计的主要方法。
3、了解和掌握程序设计过程中算法的选择。
4、掌握汇编语言调试方法。
二、实验内容
以buff开始的内存单元中有10个有符号数(字节型DB):
-37、28、-115、-2、98、-100、93、120、56、-99
请编写程序,出最大的数并存入MAX单元中,同时也出最小的数并存入MIN单元中,在Debug下运行程序,查看数据区MAX和MIN的内容检验运行结果。
三、编程提示
1、在数据段设置buff 区(DB)存放10个被测试的数,再分别设置字节数据MAX、MIN。
例如:buff db -37、28、-115、-2、98、-100、93、120、56、-99
MAX db
MIN db
2、通过一个循环程序完成比较,先用第一个数与第二个,把较小的数放在AL中,较大
的数放在AH中。
3、以后每次都用AL与后面的数比较,把小的总放在AL中;然后再用AH与后面的数比
较,把大的放在AH中;比较结束后AL和AH分别放最小和最大数。
四、实验步骤
1、在EDIT或其它编辑方式下输入源程序,并以XXX.ASM名保存。
2、用MASM 文件汇编源程序,C>MASM XXX; 如有错误,回到第一步,如没错误,到第
三步。
3、用LINK连接程序,C>LINK XXX; 形成XXX.EXE文件。
4、在DEBUG调试环境下调试并运行XXX.EXE程序。
C>DEBUG XXX.EXE回车
首先用R指令,然后使用U指令查看自己所编写的程序,确定断点后,使用G命令
执行程序到断点,查看结果,程序运行结束后,用 D DS:0 检查数据区MAX及MIN
内容,检查结果是否正确。
五、思考
1、查看DOS操作系统把可执行程序装载到的内存的首地址及结束地址。
2、查看MAX和MIN的段地址及偏移地址。
3、分别计算数据段和代码段占用的地址空间大小。
实验三、统计学生成绩
一、实验目的
1、熟悉汇编语言各种跳转指令的功能和用法。
2、学会用程序流程图来分析和设计分支程序。
3、通过顺序和分支结构来熟悉汇编语言程序设计的主要方法。
4、了解和掌握程序设计过程中算法的选择。
二、实验内容
设有20个学生成绩分别56、78、67、40、87、99、63、51、74、100,90,80,68、88、55、66、84、96、45、73分。编写程序实现统计低于60分、60-69分、70-79分、80-89分、90-99分及100分的人数,并分别存放在s5、s6、s7、s8、s9、s10单元中。
三、实验编程提示
1、设计实现算法,并画出程序流程图。
2、定义一数据段,首先定义一变量组存储学生的分数,再定义6个字节变量s5、s6、
s7、s8、s9、s10用于统计各分数段的人数。
3、在代码段中实现程序功能,程序开始应实现初始化存储变量及程序循环次数;并通
过比较指令实现判断分支。
四、实验步骤
1、在EDIT或其它编辑方式下输入源程序,并以XXX.ASM名保存。
2、用MASM 文件汇编源程序,C>MASM XXX; 如有错误,回到第一步,如没错误,到第
三步.
3、用LINK连接程序,C>LINK XXX; 形成XXX.EXE文件。
4、在DEBUG环境下运行调试程序:C> DEBUG XXX.EXE回车,使用U命令反汇编自己
编写的程序,查到断点地址,用G命令使程序执行到完成初始化的功能;此时使用D 命令查看数据段的内容,是否有学生的分数并查看s5、s6、s7、s8、s9、s10字节变量的地址及内容。然后查程序功能结束的命令对应的断点地址,用G命令使程序运行到断点;此时再使用D命令查看存储各分数段的学生人数是否正确。如正确,调试结束;
否则,从新单步调试查错误。再从第一步修改源程序开始。
五、思考
1、请问存放学生分数的变量物理地址是什么?
2、请问各分数段的变量地址是多少?
3、如果想在屏幕上显示结果将怎样编写下面的程序?
实验四、查字符
一、实验目的
1、了解汇编语言子程序的概念。
2、掌握汇编语言子程序的定义、调用和返回。
3、掌握设计汇编语言子程序及过程的基本方法。
4、清楚调用指令CALL及返回指令RET执行时堆栈内容及指针的变化。
5、掌握子程序和主程序间的参数传递方法。
二、实验内容
试编写一个有主程序和子程序结构的程序模块。
主程序:要求从键盘接收一串字符并存于字节数组TABLE中,显示字符CHAR出现的次数。
子程序:在以TABLE为首地址的字节数组中查CHAR,统计出现的次数。
三、实验编程提示
汇编table指令什么意思1、主程序通过循环程序接收键盘输入(AH=1,INT 21H),存入TABLE,并把字符个数
存入变量N中。
2、子程序实现在TABLE中查CHAR,并把出现的次数存入BX中。设计查程序时应
先画出程序流程图。
3、在主程序中显示BX的值(为简化程序,可以使CHAR出现的次数不超过9)。
四、实验步骤
1、根据上述算法先画出程序框图。
2、在EDIT或其它编辑方式下输入源程序,并以XXX.ASM名保存。
3、用MASM 文件汇编源程序,C>MASM XXX; 如有错误,回到第一步,如没错误,到第三步.
4、用LINK连接程序,C>LINK XXX; 形成XXX.EXE文件。
5、运行程序:C> XXX.EXE 回车
应在屏幕上先显示提示信息,例如please enter:后,等待键盘输入字符,输入字符时应注意各种情况的出现,输入结束后应在屏幕出现CHAR字符出现的次数。如果程序有问题,则在debug环境下查错误后,回到第一步。
6、显示信息可使用DOS调用MOV AH,9;INT 21H;DX存显示信息的偏移地址。
五、思考
1、子程序和主程序之间的参数传递是通过什么方式实现的?
2、在DEBUG环境下观察执行CALL指令时CS、IP寄存器是否变化。
3、在DEBUG环境下观察执行CALL、RET时堆栈的变化。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论