实验任务(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,还暂存数据。

posted on 2020-10-18 21:53  cox4869  阅读(152)  评论(3编辑  收藏  举报