汇编语言字符串复制指令?PUSH和POP指令必须成对出现吗?如果不必要那在什么情况不需要,什么情况需要?

 我来答
coolaa
推荐于2016-03-28 · TA获得超过408个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:187万
展开全部
根据我的理解,PUSH和POP并不是非用不可的指令,无非是临时保护一下有可能会被破坏的寄存器数据,你也可以手动将这些数值保存到一个中间暂存的寄存器,等突发事件(通常是中断)过后,再把原来的值取回来,效果一样,但你必须设置一些寄存器来做暂存器。但是用PUSH和POP可以更方便地保存一大堆需要保护的数据,两者通常都是成对出现的,如果你不POP,那你PUSH干嘛?同时你必须记住后进先出的原禅枯则,如果顺序搞错,那么数值就全乱了。

如果你非要不成对出现,也可以啊。比如,你先PUSH ACC 再PUSH 60H,然后进行一大堆的操作,突然再来一个PUSH ACC ,这样也没人说你不可以呀,只是你要记住,堆栈那里进了3个值,分别是第一次的A值,60H那里的值,第二次的A值。然后你开始回复数据,假如你不想要第一次的A值了,你可以只POP ACC 和POP 60H,这样就是三个PUSH,却只用了两个POP,可以呀,编译不会指出你有错误,但是厅或你自己要记住,还有一个值存着,没有取出,就是第一次的A值。当下一次你再进行PUSH的时候,请记得这一点,那个值一直存着,不会被清理掉,直到你所使用的POP还清了“欠”PUSH的“债”。

以上讲那么多,只是想说明,没有什么是死的,只要你了解它的处理过程,像楼上兄弟所说的,堆栈只是一个指针,你只要明白它当前指向哪里,就可以活用它。比如上面我所说的例子,如果你想让A跟60H交换一个数值,只需要把后进先出的顺序颠倒一下,用后进后出就可以了:
PUSH ACC
PUSH 60H
………………
POP ACC
POP 60H
注意,上面不是通常的出贺伏洞栈顺序,其结果就是ACC和60H的值对调了一下。
weicaihui2008
2011-11-25 · TA获得超过215个赞
知道小有建树答主
回答量:367
采纳率:100%
帮助的人:200万
展开全部
PUSH和POP指令必须成对出现,否则出错;在不影响返回后的程序的值,可不需要;一般中断程序都要用到,例如:累加器A,影响A的值,就必须要用PUSH ACC和POP ACC;在用到查侍码表时两者都用到DPTR时,就必须要用宴升PUSH DPH PUSH DPL和POP DPL POP DPH,如果影响到晌谈老C,Ri时就必须要用PUSH PSW和POP PSW等
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1303417681
2011-11-27
知道答主
回答量:41
采纳率:0%
帮助的人:28.1万
展开全部
这亮坦个是堆栈的操作,你想想,把数据压入(PUSH)堆栈,不弹出来(POP)栈顶指敬瞎桐针怎么变化神察啊?所以必须要成对出现!否则编译会报错!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
thompson2002
2011-11-25 · TA获得超过176个赞
知道小有建树答主
回答量:307
采纳率:0%
帮助的人:242万
展开全部
所谓Push和pop从哪段本姿缓衡质上讲是堆栈指针的移动。
如迹做果你能保证指针移动正确,也可以不配对使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式