汇编实验二 用机器指令和汇编指令编程

﹥>﹥吖頭↗ 提交于 2019-12-28 14:42:02

实验日期    11.18            

学院:计软院     专业: 计科      年级: 2017级   

班次:6班          姓名:庄桢立    学号:20171308231   

一、实验目的

1. 熟练掌握使用debug工具编写和调试汇编命令的方法

2. 理解并掌握内存中多字节数据的存放

3. 理解并掌握「栈」内存空间的特性和使用

4. 理解并掌握8086汇编指令mov, add, sub, push, pop的用法

二、实验准备

1. 复习第 3 章「栈」的知识:栈的特性、寄存器 SS 和 SP、指令 push 和 pop 

2. 完成教材 3.6~3.9 节内的问题 3.6~3.12,检测点 3.1~3.2 3. 结合教材实验1 (P35)及公邮文件中心→实验下的 “实验1辅助文档.pdf”复习debug 工具用法。

三、实验内容

1. 教材实验2(P71) 

1)练习「1.预备知识:Debug 的使用」 

2)在练习基础上,完成

「2. 实验任务」 补充: 为了便于验证实验结果,对「2. 实验任务」中的(1)做如下两点调整:

① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H 

② 将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021 

    实验前,请理论上分析指令执行后各个填空处的值,并记录下来。

    实验时,通过在 debug 中调试,观察实验结果与理论分析是否一致,如不一致,尝试 发现问题所在,并分析原因。

 

四、实验结论

实验任务(1):

① 截图记录:使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操 作

② 截图记录:使用 a 命令输入的 p74 指令  

③ 截图记录:每一行指令单步调试(如单步调试步骤多,可分屏截图,但不要有遗漏)

④ P74 中指令执行后各个寄存器填空结果,以在文档中手工标注或手机拍照截图方式 复制在文档中。 对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。 如不一致,分析查找原因。

 

 

修改前先用-d命令查看 0021:0~0021:f 的数据,再用e命令修改数据,修改后再用d命令查看是否正确写入

 

 

使用-a命令输入指令

 

 

用-t命令执行每一条语句

 

 

 

mov ax,[0]     ;ax=3130       

add ax,[2]      ;ax= 6462      

mov bx,[4]     ;bx= 3534      

add bx,[6]      ;bx= 6C6A     

push ax         ;sp= 00FE  ;修改的内存单元的地址是2200:FE内容为6462       

push bx         ;sp= 00FC  ;修改的内存单元的地址是2200:FC内容为6A6C     

pop ax           ;sp= 00FE  ;ax=6C6A      

pop bx           ;sp= 0100   ;bx=6462       

push [4]         ;sp= 00FE  ;修改的内存单元的地址是2200:FE内容为3435

push [6]         ;sp= 00FC  ;修改的内存单元的地址是2200:FC内容为3736

 

以上命令将内存单元2200:FE和内存单元2200:FC的值进行了交换

通过观察,指令mov sp 0100似乎没有执行, 实际上,在T命令执行mov ss,ax时,下一条指令mov sp,0100 也紧接着被执行。


 

实验任务(2): 

① 截图记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分 

② 单步调试每一行汇编指令的截图。且每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单 元值的变化,并思考原因。

 

 

前三段指令的通过修改段寄存器SS和寄存器SP的值来修改栈顶的段地址和偏移地址 。

命令mov sp,0010修改了偏移地址,使得任意时刻SS:SP都指向栈顶元素。

 

五、总结与体会

通过本次实验

1)对栈的概念以及栈元素的存放和修改有了更多的了解

2)学到了“Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行”

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!