实验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,实验完成。

posted @ 2020-10-18 23:58  朵在薪哩  阅读(84)  评论(3)    收藏  举报