实验1 用机器指令和汇编指令编程
实验1 用机器指令和汇编指令编程
1 教材实验1结论
-
实验任务(1)
使用Debug,将下面的程序写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。
| 机器码 | 汇编指令 |
| b8 20 4e | mov ax,4E20H |
| 05 16 14 | add ax,1416H |
| bb 00 20 | mov bx,2000H |
| 01 d8 | add ax,bx |
1)使用e命令将指令写入内存,并用t命令单步调试。


2)使用a命令将指令写入内存,并用t命令单步调试。


-
实验任务(2)
将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
用a命令写入指令,并用t命令单步调试:

开始调试:

结束调试:

2的8次方为256即0100H。
-
实验任务(3)
查看内存中的内容。
PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。
查看FFF00~FFFF的内存:

由此可知,生产日期是在fff0:00f0到fff0:00ff处,改变这个日期并再次查看fff0:00f0到fff0:00ff处的内容:

这个生产日期并没有发生变化。
阅读第1章中的1.15节的内容后可知原因为:C0000到FFFFF为各类ROM地址空间,我们向地址C0000~FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。
-
实验任务(4)
向内存从B8100H开始的单元中填写数据:

产生现象:右上角出现彩色图案。
填写不同的数据:

产生现象:彩色图案发生改变。
改变填写的地址:

产生现象:在其他位置出现彩色图像。
阅读第1章中的1.15节的内容后可知原因为:A0000到BFFFF为显存地址空间,向地址A0000~BFFFF的内存中写数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上。
2 教材实验2结论
-
实验任务(1)
1)使用e命令将内存单元0022:0 ~0022:7连续8个字节数据修改为50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H并查看:

2)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际情况填空。
使用a命令输入p74指令:

使用t命令进行单步调试:





p74中指令执行后各个寄存器填空结果:

经过比较,理论分析的结果与单步调试结果一致。
-
实验任务(2)
仔细观察3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题,那么要恭喜你,因为你有很好的悟性。大多数学习者对这个问题还是比较迷惑的,不过不要紧,因为随着课程的进行,这个问题的答案将逐渐变得显而易见。
使用a命令输入图3.19中的7行指令,使用e命令修改2000:0~2000:f的值,及修改后查看的部分:

单步调试每一行汇编指令,每一条指令单步调试后,都使用d命令查看2000:0~2000:f的值:




文字陈述:
- 前3行汇编指令的功能
设置栈的段地址SS=2000H,不能直接向段寄存器SS中送入数据,所以用ax中转,因为栈为空,所以设置栈顶的偏移地址SP=0010H。
初始栈顶:2000:0010H
初始栈底:2000:000EH
- 对单步调试结果的思考及可能原因的分析
初始没有执行代码时,2000:0~2000:f的值都为00,创建站结构指向这段内存后出现数据,观察后发现其中有cs值,ip值,ax值等,使用t命令单步执行引发单步中断,执行中断例程时,CPU会将一些中断例程使用的寄存器变量自动压栈到栈中,当执行到push ax时,将ax中的数据压入栈中。

浙公网安备 33010602011771号