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

Posted on 2020-10-22 16:40  zzzzero  阅读(195)  评论(3)    收藏  举报

1. 教材实验1

  • 实验任务(1)

机器码数据较多,只用前4行实验即可。

e命令和a命令两种方式,写入内存。(使用t命令单步调试)

e命令:

a命令:

 

 

 

 

 

 

  •  实验任务(2)

附上a命令写入和t命令单步调试实验截图。对于单步调试较多的部分,只截调试开始,和调试出正确结果的部分即可。

 

 

 

 

 

 

  •  实验任务(3)

附上在debug里实验的截图,并且基于实验结果,作必要的文字说明。

找到了ROM中的生产日期01/01/92  在内存FFFF6~FFFFDH单元中

 

 

 试图修改这一块内存全为0,失败。

 

 

 由于ROM是只读存储器,不能被修改,这个日期也是提前实现写进去的,只能读。

  • 实验任务(4)

附上在debug里实验的截图,并且基于实验结果,作必要的文字说明

 

改变数据

 

 

改变地址

 

根据书上得知,地址A0000~BFFFF的内存单元是显存,在这里写数据就会被输出出来。改变数据就是改变写入的内容,能够显示不同的图案。改变地址就是在显示器的不同位置显示出来。

2. 教材实验2

实验任务(1)

截图记录:使用 e 命令修改内存单元0022:0~0022:f 中的数据,及修改后查看是否正确写入的操作

 

 

② 截图记录:使用 a 命令输入的 p74 指令

 

 

 

截图记录:每一行指令单步调试(如单步调试步骤多,可分屏截图,但不要有遗漏)

 

 

 

 

 

 

 

 

 

 

  P74 中指令执行后各个寄存器填空结果,以在文档中手工标注或手机拍照截图方式复制在文档中。

对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。如不一致,分析原因

试验过程

分析过程如上,和我们课上学习分析的栈一致。

  • 实验任务(2)

 

 

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

 

 

 

 单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元值的变化,并思考原因

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以文字方式陈述:

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

 

mov ax,2000    将2000H送至ax寄存器

 

mov ss,ax         初始化设置ss栈顶段地址为2000H

 

mov sp,10         初始化sp栈顶偏移量为10
初始时的栈顶和栈顶都是:2000:0010

 

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

这一块空间不仅存了AX,还存了CS,IP的值,当有数据入栈时这些前面原有的数据先前移动空出位置。

可能是dos下系统只有一个栈。所以才会又这种情况。

 五、实验总结


 使用t命令的两种形式,在调试前,如果写入的地址不是默认的,一定不要忘记更改cs和ip。

通过实际写一遍代码,查看内存的变化更能了解它指令在硬件中的改变。理论和实际环境中有什么区别。