汇编语言_实验二_用机器指令和汇编指令编程
Posted alexanderyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言_实验二_用机器指令和汇编指令编程相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
四、实验结论
实验任务(1):
1.使用e命令将将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H,使用d命令查看修改结果:
2.使用a命令将课本P74页汇编指令写入内存:
3.将以上指令分步执行,观察执行结果:
实验前理论分析结果如下:
mov ax,0021
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ; ax=3130H
add ax,[2] ; ax=6462H
mov bx,[4] ; bx=3534H
add bx,[6] ; bx=6C6AH
push ax ; sp=00FEH,修改的内存单元的地址是220FEH 内容为6462H
push bx ; sp=00FCH,修改的内存单元的地址是220FCH 内容为3534H
pop ax ; sp=00FEH,ax=3534H
pop bx ; sp=0100H,bx=6462H
push [4] ; sp=00FEH,修改的内存单元的地址是220FEH 内容为3534H
push [6] ; sp=00FCH,修改的内存单元的地址是220FCH 内容为6C6AH
将理论分析与上机调试结果作比较,发现二者完全相同。
实验任务(2):
1.使用a命令将课本P75页的七行指令输入内存,使用 e 命令修改 2000:0~2000:f 的值,使用d命令查看修改后的值:
2.单步调试每一条指令,并在每一条指令执行完毕后,查看内存单元20000H~2000FH的值:
3.① mov ax,2000:将2000H放入寄存器ax中;mov ss,ax:将寄存器ax中的数据赋给SS;mov sp,10:将0010H放入寄存器sp中,实际上我们通过这个指令确定了栈段的大小。初始时栈顶位于2000:0010,栈底位于2000:000E。
②对于内存单元2000:0~2000:F发生的变化,我观察到以下几点:
变化的位置并不是固定的——不如说,是相对的,始终集中在栈顶先前5个字。而且第一个字始终是寄存器AX中的值,第三个字第四个字分别是IP和CS的值(0000H和01A3H暂时还未解明其含义)。
变化发生在修改栈段后的任一一条汇编指令执行后,但是通过r命令直接修改寄存器的话,并不会发生任何变化,不过一旦执行任何一条汇编指令,即使是和栈、和上面涉及到的三个寄存器都无关的指令(比如mov b,1111),执行后相应位置内存单元中的数据也会随之改变。当然还有一种可能是栈顶之前存储一份寄存器的状态,并不是执行某一条汇编指令后才开始的,而是栈顶本来就要存放寄存器的状态,只是在修改SS之前,2000:0000~2000:000F这些内存单元并不是栈顶之前的部分。我因此又实验了一下发现,即使不修改SS:SP的值,在执行汇编指令后也会在SS:SP之前存储这些东西,而一旦修改了SS:SP的值,原来与寄存器同步更新的内存单元就不再变了。至于为什么是这样,我还是查查资料吧。_(:з」∠)_
五、总结与体会
通过本次实验,我提高了对[栈]内存空间特性的掌握和理解,进一步加深了使用debug工具的熟练程度。同时,通过查找资料,解决了针对实验中出现的问题而产生的疑惑,对8086CPU的中断机制有了一定的了解。
以上是关于汇编语言_实验二_用机器指令和汇编指令编程的主要内容,如果未能解决你的问题,请参考以下文章