实验1 用机器指令和汇编指令编程
一、教材实验1
(1)实验任务1
用A命令将指令写入内存,用T命令逐条观察CPU中相关寄存器内容的变化
程序段如下:
再用T命令逐一查看寄存器内容的变化:



通过d指令可以查看存储单元存储的机器码

我们可以将073f:0121的存储的内容与刚才输入的汇编指令的机器码进行一一对应,可以发现,这些存储单元存储的就是汇编指令的机器码
(2)实验任务2
利用汇编指令计算2的8次方
汇编程序段:

通过t指令查看最终结果

通过该图片可以看出,AX寄存器的值为0100,AX为8位的寄存器,则AX寄存器10进制值为2的8次方,即为256。
(3)实验任务3
PC机主板上的ROM中写有一个生产日期,在内存FFF00~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。
汇编程序段:

由运行结果最后一行的01/01/92可以看出这就是我们想要找到的存储单元。
那我们尝试修改一下日期对应的存储单元内容

可以发现我们是无法修改这些存储单元的内容的,题目早已给出我们答案,即生产日期是写入在ROM中的,只读而不可写。
(4)实验任务4
向内存从B8100H开始的单元中填写数据,请先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

尝试填写不同的数据
、
可以看出有几行右边的显式内容发生了改变。
尝试改变填写的地址

可以看出这次确实是发生改变了。
我去查询了一下,8086地址0~7FFFH为RAM空间,而A000H~FFFFH为ROM空间,不可以修改。
二、教材实验2
(1)实验任务1
A、使用e命令修改内存单元0022:0~0022:f的值,及修改后查看的部分。
先用d命令查看原先0022:0单元里面的内容,再进行修改

修改完之后进行比对,由图可得,确实是正确写入的操作。
B、使用debug,将程序段写入内存,逐条执行,得出实际寄存器中的值。
首先先用e命令修改前七个单元的内容

再用a命令输入指令调试

使用T指令监察得出各个寄存器的值的变化。



由图可得;

观察结果,再结合自己的计算,实验结果是正确的。
C、观察并解答为什么2000:0~2000:f中的内容会发生改变?
使用a命令输入7行指令并用e指令修改2000:0~2000:f单元的值

然后用t命令监察,再用d指令观察2000:0 f内容的变化

此时还没有变化,继续执行

可以看到此时中间00 20是对应了ax的值 后面的08 01是对应了IP的值 3F 07对应了CS的值,继续执行

ax、ip值发生变化,存储单元的值也相应发生了变化

随着本次操作ax的入栈,可以发现,数据都往前面移动了两个单元

ax变化,代表ax寄存器的存储单元值也发生了变化

再次入栈,数据再次往前移动两个单元。
问题分析:
前三行汇编指令的功能:
mov ax,2000 mov ss,ax 设置栈的段地址,用ax作为中转向段寄存器ss送入数据 mov sp,10 设置栈顶的偏移地址,所以sp=0010H
初始时栈顶:2000:0010 栈顶2000:000E
对于2000:0 f变化的分析:
从执行指令的过程来看,这些存储单元的变化就是从mov sp,10开始的,而且有6个存储单元分别表示了三个寄存器的值,而随着ax的入栈,数据也会随着往前移动。
三、实验总结
个人觉得这次实验还是比较难的,而且量比较大,将书上两个实验结合成了一个实验。主要还是对教学内容的理解不够,导致有时候会对实验的结果产生疑问。所以,实验课还是必须要在理论课的基础上的,如果没有理论课的基础,那么实验课就做的没有任何价值。
浙公网安备 33010602011771号