南京信息工程大学实验报告 实验名称 实验 2 用机器指令和汇编指令编程 实验日期 12.21
学院 计软院
专业 计算机科学与技术
年级 2017级
班次 5
姓名 陈奕明
学号 20171308194
一、实验目的
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. 教材实验2中「2. 实验任务」(P74)
实验任务(1):
① 截图记录:使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操作
数据输入完成,查询结果正确。
② 截图记录:使用 a 命令输入的 p74 指令
指令输入完成。
③ 截图记录:每一行指令单步调试(如单步调试步骤多,可分屏截图,但不要有遗漏)
STEP1
STEP2
STEP3
STEP4
④ P74 中指令执行后各个寄存器填空结果,以在文档中手工标注或手机拍照截图方式 复制在文档中。
对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。 如不一致,分析查找原因。
结果一致:数据出栈和入栈的规则为入栈时 sp=sp-2,出栈时 sp=sp+2。
实验任务(2):
① 截图记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分
② 单步调试每一行汇编指令的截图。且每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单 元值的变化,并思考原因。 以文字方式陈述: ① 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别 是? ② 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。
截图如下:
1、从mov ax,3123 这条指令开始 2000:0 ~ 2000:f 中的值就发生了没有意料到的变化,出现了不需要的数字;2、在栈顶所在位置的的内存单元中存放的始终是AX 中的值即3123;
五、总结与体会
栈,是一种计算机领域极其常见的一种数据结构,而通过这次实验,我觉得算是了解到了栈这一种数据结构在系统内存中最基层的变化原理,感觉受益匪浅,尤其需要注意学习的是栈顶在有数据变动的SP的值的变化规则,即入栈时 sp=sp-2,出栈时 sp=sp+2。