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

 

一、实验内容与结论

1. 教材实验1结论
此部分书写内容:
教材实验1中「2. 实验任务」(P45)
实验任务(1) 机器码数据较多,只用前4行实验即可。 用t命令和a命令两种方式,写入内存。用t命令单步调试。附上实验截图。

-a命令准备编写汇编代码

-t命令单步执行

 

-e命令将指令写入内存

-t命令单步执行

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

执行9次-t命令得到AX=0x(0100)=2^8
实验任务(3) 附上在debug里实验的截图,并且基于实验结果,作必要的文字说明。

发现FFF0:00F0后连续16个内存单元包含了ROM生产日期01/01/92,对日期内存单元修改后,查看发现修改是无效的。原因是这些内存C0000~FFFFF是ROM区域只可读不可修改。
实验任务(4) 附上在debug里实验的截图,并且基于实验结果,作必要的文字说明

 

 

 按书上代码输入按回车键后出现如上图所示彩色图案。

 

修改这段连续内存单元的值,发现显示器图案内容发生了变化。

 

增加修改的内存单元数,发现显示器显示的图案的内容有所增加。

A0000~BFFFF所对应内存为显卡区域,改变它的值会直接在显示器上打印图案。

 

  2. 教材实验2结论
此部分书写内容:
教材实验2中「2. 实验任务」(P74)
实验任务(1) ① 截图记录:使用 e 命令修改 内存单元0022:0~0022:f 中的数据,及修改后查看是否正确 写入的操作 ② 截图记录:使用 a 命令输入的 p74 指令 ③ 截图记录:每一行指令单步调试(如单步调试步骤多,可分屏截图,但不要有遗漏) ④ P74 中指令执行后各个寄存器填空结果,以在文档中手工标注或手机拍照截图方式复制在 文档中。 对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。如不一 致,分析原因。

按实验要求输入代码,如上图。

 

 

 -t命令单步执行后,每步结果如上图。

 

 

预期结果如上图。

实验任务(2)
① 截图记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值, 及修改后查看的部分 ② 单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元 值的变化,并思考原因。 以文字方式陈述: ① 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是? ② 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。

 073F是CS的值,0108是IP的值;2000是AX的值,继续执行会发现右边是即将入栈元素。

mov sp,10意思是将0010赋给sp(栈指针寄存器),前两个指令是把2000赋给ss(栈段段地址寄存器)。初始栈顶是20010,栈底是20011

二、实验总结

1.本次实验掌握了debug的常用命令:

-e 修改内存单元的内容

-d 查看内存单元的内容

-r 查看也可修改指定寄存器的内容

-a写汇编代码

-t或-p用于单步测试代码(-p进入子程序)

-g执行指定区间长度的代码

2.熟悉了栈的结构与使用;

3.尝试通过2种方法将指令存入内存(汇编指令、机器码);

4.初步认识接触了中断机制。

 

posted @ 2020-10-12 22:46  喵小屁  阅读(214)  评论(3)    收藏  举报