实验2

(1)

ax=3130
ax=6462
bx=3534
bx=6C6A
sp=00FE  修改的内存单元的地址是0100H(偏移地址) 内存为6462
sp=00FC  修改的内存单元的地址是00FEH(偏移地址)内存为6C6A
sp=00FE   ax=6C6A
sp=00FC   bx=6462  (ax和bx的值进行交换)
sp=00FE  修改的内存单元的地址是 0100  内存为3534
sp=00FC  修改的内存单元的地址是 00FE  内存为3736 

 

(2)

第一行 mov ax,2000

第二行 mov ss,ax

第三行 mov sp,10

因为在下面会有push指令,则首先会sp=sp-2,再把ax里存放的值入栈,所以这里的sp要为10,这样sp-2后栈顶指针才为2000:E。初始时栈顶为2000:E,栈底也为2000:E。

 

当用t命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行,所以当完成指令mov ss,ax后直接进行mov ax,3123. 用t命令进行调试时会产生终端。为了保护现场,CPU则先将标志寄存器进栈,再把当前CS的值进栈,最后将IP的值进栈。所以2000:0到2000:f中的内容会改变。

 

总结与体会

栈是一个特殊的存储空间,为先进后出,后进先出。用栈来暂存以后需要恢复的寄存器的内容时,要注意出栈和入栈的顺序。也可用来进行逆序复制。入栈指令push要注意,先进行sp=sp-2,再入栈。出栈指令pop却与其相反,先出栈,再sp=sp+2。这一点尤其要注意。入栈和出栈均是以字(等于两个字节)为单元。在使用时要自行控制栈顶超界的问题。

 

转载于:https://www.cnblogs.com/Sgolden/p/9978896.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值