实验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的入栈,数据也会随着往前移动。

三、实验总结

个人觉得这次实验还是比较难的,而且量比较大,将书上两个实验结合成了一个实验。主要还是对教学内容的理解不够,导致有时候会对实验的结果产生疑问。所以,实验课还是必须要在理论课的基础上的,如果没有理论课的基础,那么实验课就做的没有任何价值。

posted @ 2020-10-11 19:51  jiangduwang  阅读(197)  评论(2)    收藏  举报