汇编语言实验1 用机器指令和汇编指令编程
Posted xywei0905
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言实验1 用机器指令和汇编指令编程相关的知识,希望对你有一定的参考价值。
四、实验结论
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 用机器指令和汇编指令编程的主要内容,如果未能解决你的问题,请参考以下文章