实验结论
实验任务(1)
使用 e 命令修改 0021:0~0021:f 数据
使用d命令查看,修改正确
使用a命令输入指令如下
使用t命令单步调试
做实验前书上的填空结果如下
与实验结果进行比较,发现sp的值和修改的内存单元地址与实际不符,经过分析,发现是因为我对栈这部分知识的理解还不够,在计算sp的值时将入栈和出栈的算法弄反了。入栈时 sp=sp-2,出栈时 sp=sp+2。
实验任务(2)
使用a命令输入指令
使用 e 命令修改 2000:0~2000:f 的值,并使用d命令查看修改后的结果
使用t命令单步调试
第一行指令是将 2000H 存入 AX 寄存器中,第二行指令是将 AX 的值送给栈段寄存器 SS,也就是说,前两行指令实现的功能就是将 SS 的值变成 2000,第三行指令的功能是将栈指针寄存器 SP 的值改成 0010。但是在截图中却并没有出现 MOV SP, 10 这条语句,通过阅读书上实验任务部分的文字描述发现这是因为中断机制使得这条指令在执行完 MOV SS, AX 后自动被执行了。
这时,初始栈顶是 20010H,初始栈底是 20012H。
从截图中我有几点发现:1、从 MOV AX, 3123 这条指令开始 2000:0 ~ 2000:f 中的值就发生了变化,出现了不需要的数字;2、在栈顶所在位置的 SP-2 的内存单元中存放的始终是AX 中的值;3、虽然栈底的位置在 20012H,但是入栈时却是从 20015H 开始存数据的。
经过思考,我觉得出现这种状况的原因可能是来自 MOV SP, 10 这条未出现的指令。
总结与体会
1、从实验任务(1)中可以看出,我对栈的知识掌握不够,需要多加理解和练习。
2、通过上网查询资料,初步了解了一下中断机制的概念:
来源:https://www.cnblogs.com/lingana/p/9960731.html