实验任务(1)
1.使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后cpu中相关寄存器中的内容的变化
使用A指令:
使用E指令:
用U命令将从1000:0开始的内存单元中的内容翻译为汇编指令:
修改cs与ip
逐条执行:
2.将下面3条指令写入2000:0开始的内存单元中,利用这3条指令计算2的8次方。
修改cs与ip
将ax作为累加单元,设置初始值为1
jmp将立即数转移到ip中
在最后一张图,通过最后一个ax可以看出2的8次方的结果是16进制的0100
3.查看内存的内容
Pc机主板上的rom中写有一个生产日期,在内存fff00h-fffffh的某几个单元中,请找到这个生产日期并试图改变它
通过上图可以发现生产日期在只读的地址空间,只能读取,不能写入
4.向内存从b8100h开始的单元中填写数据
由图可看出图上方出现了图形
改变地址后,图形形状和位置都发生了变化
实验任务(2)
1.使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空
使用 e 命令修改内存单元0022:0~0022:f 中的数据,及修改后查看是否正确写入:
使用 a 命令输入的 p74 指令:
每一行指令单步调试:
执行push时先sp-2,再放入数据到栈中
执行pop时,先取出数据到寄存器,然后sp+2
P74 中指令执行后各个寄存器填空结果:
以上运行结果与理论分析结果基本一致
2.仔细观察3.19中的实验过程,然后分析:为什么2000:0-2000:f中的内容会发生改变?
使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值, 及修改后查看的部分:
单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值:
以文字方式陈述: ① 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?
第一行给ax寄存器赋值2000;第二行初始化栈基地址为ax中的值;第三行初始化栈顶偏移地址为10
初始栈顶的地址为2000:0010,初始栈底地址为2000:000E。
② 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。
dos下系统只有一个栈,不仅存cs:ip,还暂存数据。