预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一实验目的 1.掌握汇编程序的编辑,编译,连接和执行的全过程; 2.学习和掌握用DEBUG调试程序的方法. 二实验任务及内容 1.用编辑软件,输入以下汇编语言源程序 2.通过编译,连接形成可执行文件. 3.用DEBUG将可执行文件调入,并进行调试. (1)用D命令观察数据区在内存中的具体内容,记录单元A和B的具体地址. (2)用U命令对目标代码反汇编,观察反汇编后的结果.注意发现源程序的起始 位置,并记录这个起始地址. (3)用T命令作单步跟踪调试.比较每条指令执行后的结果和原来的理解是否 一致.得出程序运行的结果:它们是写在什么单元,具体内容是什么;并判断结果是 否正确. (4)在子程序SUB1的入口处设一断点,用G命令执行程序.在断点处观察堆 栈的内容,比较堆栈的内容和程序返回地址是否一致. (5)用E命令修改单元A,B的内容,重新执行程序,并记录结果. (6)用M命令和A命令对程序进行修改:将主程序中最后两条指令(ADD和 ADC)修改为一条CALLSUB1指令,重新执行程序. (7)退出DEBUG. 4.重新使用编辑软件,把源程序最后一句中的STAR去掉.再次生成可执行文件, 并用DEBUG调入内存.当使用U命令时,显示的结果与前一次(未加STAR)的结果 有何不同? 三画出程序流程图 开始 各段初始化 数据A自乘并保存结果 数据B自乘并保存结果 数据A、B相乘并保存结果 计算完成后,所有结果相加 结束 四给出源程序 DATSEGMENT ;数据段定义 ADB20;(自定) BDB15;(自定) YDB3DUP(0) ZDB0,0 ;为各个变量分配内存空间 DATENDS STASEGMENTSTACK ;堆栈段定义 DW50DUP(?) STAENDS CODSEGMENT ;代码段定义 ASSUMECS:COD,DS:DAT STARPROCFAR PUSHDS ;ds寄存器保护 XORAX,AX ;ax寄存器清空,影响标志位 PUSHAX ;ax压栈 MOVAX,DAT MOVDS,AX ;程序初始化,给DS赋初值 MOVAX,STA MOVSS,AX ;给SS赋初值 MOVAL,A MOVZ,AL MOVZ+1,AL CALLSUB1 ;将AL中的数据 A自乘 MOVAL,B MOVZ,AL MOVZ+1,AL CALLSUB1 ;将AL中的数据B自乘 MOVAL,A MOVZ,AL MOVAL,B MOVZ+1,AL CALLSUB1 ;将A和B相乘 ADDWORDPTRY,AX ;A*A+B*B+2*A*B ADCBYTEPTR[Y+2],0 RET STARENDP SUB1PROC MOVAL,Z MOVAH,Z+1 MULAH ;AX=AH*AL ADDWORDPTRY,AX ADCBYTEPTR[Y+2],0 RET SUB1ENDP CODENDS ENDSTAR 五给出程序运行结果 编译通过后进入DEBUG 程序运行结果数据段显示 数据段初始化后内容及地址 部分反汇编 完整单步调试过程 修改A、B内容 1-7修改后运行结果 六回答预习题 1.熟悉常用的DEBUG命令. 2.阅读并分析程序的功能. 该程序实现求两个数和的平方的功能 3.若SS=2000H,SP=FFFFH,向堆栈中压入4字节数据后,如何用D命令显示压 入堆栈的内容? 使用debug指令“d2000:0000”即可显示压入堆栈的内容,这是因为SP+1会溢出,变成0000 七、实验心得及总结 本次实验是微机原理软件实验的第一次实验,也是我首次实际使用汇编语言。虽然之前还没有开始动手编程,但是对书中的各个例子和课件中示例程序的研读,也让我初步了解了汇编语言在实际编程环境中的运行大体情况。 在实验过程中,我逐步学会了在DOS环境下的程序编写、编译、链接和调试,并且在debug的过程中对书本上学到的关于寄存器、数据处理和存放等方面的知识有了更加直观和感性的认识,对数据在内存中的处理了解加深,同时也激发了我进一步学习好微机原理的兴趣和热情。 此次实验将是我接触微机原理软件实验的一个良好开端,我会努力在后续的实验中更多地学习微机原理以及汇编语言的知识和技能。