汇编语言实验1 用机器指令和汇编指令编程

2021-03-18 15:28

阅读:664

标签:info   enter   image   只读   play   输出   利用   汇编   width   

四、实验结论

1. 教材实验1(P45)

(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器的内容变化

使用e命令修改内存:

技术图片

使用a命令修改内存:

技术图片

技术图片

(2)将下面3条指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方

技术图片

单步调试:

 开始部分:

技术图片

结束部分:ax=0100H

技术图片

(3)查看内存中的内容

从FFF00开始查看

技术图片

生产日期应为01/01/92。尝试修改生产日期:

技术图片

使用e命令修改内存后发现数据未被修改。由此可知生产日期在只读的地址空间,所以只能读取,不能写入。结合当前时间来看ROM的生产日期是虚拟的。

(4)向内存从B8100H开始的单元填写数据

技术图片

向B8100H地址写入数据后在窗口中出现了图像。翻阅教材1.15节得知A0000H~BFFFFH为显存地址空间。向这些内存单元写数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上。

2.  教材实验2(P74)

(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际情况填空

首先使用 e 命令修改 内存单元0022:0~0022:f 中的数据,及修改后使用d命令查看是否正确写入

技术图片

使用 a 命令输入汇编指令并填空

技术图片

单步调试

技术图片

技术图片

技术图片

技术图片

push ax后2200:00FE中的内容

技术图片

push bx后2200:00FC中的内容

技术图片

push [4]后2200:00FE中的内容

技术图片

push [6]后2200:00FC中的内容

技术图片

与之前的理论填空结果相比较,可知结果正确

(2)进行以下实验,并分析:为什么2000:0~2000:f中的内容会发生改变?

图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分

技术图片

单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用d命令查看2000:0~2000:f 的值。

技术图片

观察上图,发现执行momv ss, ax与mov sp, 10后2000:0~2000:f中的内容发生改变,继续调试

技术图片

技术图片

观察上图可知,红框中内容没有发生改变,且其中073FH与CS寄存器的值相对应,①的值与AX寄存器的值相对应,②的值与IP寄存器的值相对应,③为栈中存储的数据。通过了解,知道DOS系统中只有一个栈,系统会用该栈暂存相关数据。

以文字方式陈述:

1)前三行汇编指令的功能是什么?特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?

mov ax, 2000      ; 将2000H送至ax寄存器
mov ss, ax        ; 将ax寄存器的值送至ss栈顶段地址寄存器
mov sp, 10        ; 将0010H送至sp栈顶偏移地址寄存器

显然初始时栈顶和栈底为2000:0010

2)基于单步调试观察到的变化,给出你对此的思考及可能原因分析

通过单步调试以及查阅资料,知道DOS系统中只有一个栈,系统会用该栈暂存相关数据,因此内存单元中的值会被修改。

汇编语言实验1 用机器指令和汇编指令编程

标签:info   enter   image   只读   play   输出   利用   汇编   width   

原文地址:https://www.cnblogs.com/xywei0905/p/13794851.html


评论


亲,登录后才可以留言!