实验1 用机器指令和汇编指令编程
一、实验目的
1. 熟练掌握使用debug工具编写和调试x86汇编命令的方法
2. 掌握8086CPU、寄存器、内存的基础知识
3. 理解并掌握内存中多字节数据的存放:小端法
4. 理解并掌握「栈」内存空间的特性和使用
5. 掌握指令mov, add, sub, jmp, push, pop的基础用法
二、实验准备
1. 复习教材第1~2章内容,完成教材内相关检测点
2. 复习教材第3章「栈」的知识:栈的特性、寄存器 SS 和 SP、指令 push 和 pop ,完成教材 3.6~3.9 节内的问题 3.6~3.12,检测点 3.1~3.2
3. 结合教材实验1(P35)和课程QQ群文件中的文档,学习debug工具用法。
三、实验内容
实验一
1)任务1
这里因为看错要求,把实验二的要求看成了这里的,所以修改了内存单元 0022:0 ~0022:7连续 8 个字节数据,变为50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H。使用的命令如下:

然后又把第一行命令“mov ax,4E20H” 改成了“mov ax,0022H”,其他的命令没有改变,具体的命令如下:

运行前的初始状态,使用r命令检查

后续使用t命令进行单步执行,具体如下:




使用e命令修改内存,并再次使用t命令进行调试




(2)任务2 计算 2 的 8 次方
输入3条编译代码

刚开始执行的初始状态:

最终计算到结果时的状态:

(3)任务3 查看的生产日期
使用d命令查看内存 FFF00H~FFFFFH,发现存在非0数值。

发现是一个日期值,这里推测是设备的生产日期,我们尝试对其修改

发现并不能对其修改
(4)任务4
向内存从B8100H开始的单元中填写数据,可以看到窗口第二行出现颜符号,改变填写的数据,符号改变


根据实验推测可能是因为这一段数据对应的是显存部分。
实验二
(1)任务1
这时才发现,之前的要改的内存时实验二,使用e命令修改了内存。

再根据书上的命令,输入代码

使用t命令进行单步执行



填写书上的结果

(2)任务2
输入命令并修改内存数值

使用 t 指令,单步运行


发现出现了混乱的数据。分析可能产生的原因:
1)前3行的指令时用来设置栈底位置,此时栈底为2000:0,栈顶为1fff:000e
2)可能时再修改ss:sp临时使用了某些寄存器,而开辟临时空间的,然后还没回收(猜测)。
对于评论中提到的关于实验一的任务2的错误进行重做,修改。
上文错误的原因主要是错误的计算了256在16进制下的数值,应该是100H而不是0008H。
先编写2条代码

使用 t 命令进行单步执行,直到执行到 ax=100H


成功运行到 ax=100H,实验完成。

浙公网安备 33010602011771号