实验二

实验内容

任务一:使用debug将程序段写入内存,逐条执行后填空。

① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H

② 将 P74 实验任务(1)中第 1 行的 mov ax, ffff → 改为 mov ax, 0021

 

(1)先用e命令写入数据,之后d命令显示查看,再使用a命令逐一写入指令:

 

(2)r命令后再逐条执行:

  

这里0021:0=3130(高位31,低位30),所以ax=3130

 

push ax就是将ax=6462存入栈,地址为sp-2=00FE

push bx 将bx=6C6A存到sp-2=00FC

pop出栈就是将ax,bx交换数据

得到ax=6C6A,bx=6462

push [4] 将0021:4=3534存到栈,地址为sp-2=00FE

push [6] 将0021:6=3736存到栈,地址为sp-2=00FC

 


 任务二:观察实验过程后分析

(1)a命令输入指令,将2000:0~f 的值修改为0后显示查看:

 

(2)r命令后逐条执行,每次执行显示一次内存:

 通过ax将ss的值修改为2000之后,就是mov sp,10这条指令了。但图中没有出现这条语句,实验任务之前的一部分内容解释了,凡是修改栈段寄存器SS指令的下一条指令也会紧接被执行,这是中断机制,大概是为了能控制栈段大小。

而2000:0~f的值之所以改变 是因为对定义栈段时SS,IP, CS的值进行了暂存,0020对应ss=2000, 0801对应ip=0108, 3F07对应cs=073F。


 

总结与体会

纸上得来终觉浅,对于书本上学过一遍的东西,不经过自己亲自实验大概真的挺难记住的。这一部分实验让我对于push和pop这两条指令有了稍加清晰的理解,但栈方面的不少问题还要花时间弄明白透彻。

 

转载于:https://www.cnblogs.com/czh805168697/p/9960453.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值