在汇编中为什么PUSH CS是正确的?但是POP CS是错误的。

如果在段间调用时,为了保护现场将CS压入栈中,但是在调用完子程序之后,如果不把之前保存的CS的值弹出来,也就是使用POPCS指令,那CS的值应如何取得呢?... 如果在段间调用时,为了保护现场将CS压入栈中,但是在调用完子程序之后,如果不把之前保存的CS的值弹出来,也就是使用POP CS指令,那CS的值应如何取得呢? 展开
 我来答
百I度网友AQnlQ
2019-04-20 · TA获得超过143个赞
知道小有建树答主
回答量:188
采纳率:37%
帮助的人:14.5万
展开全部
在汇编程序中,通常可以通过PUSH 指令将指定寄存器内容放入堆栈中保护,也可以通过POP指令将堆栈中的内容装入寄存器,而对于代码段寄存器CS,用户程序只有PUSH CS操作,如写出POP CS,编译程序会报错。这是因为随意变更CS寄存器内容,会造成程序跑乱,很可能造成系统瘫痪。
在发生程序调用时,保护现场是由CP∪跟据调用类型完成的。对段内调用, 只保存偏移地址IP; 若是段间调用,会同时保护段地址寄存器CS和偏移地址寄存器IP。返回指令跟据是NEAR还是FAR决定如何恢复现场,用户编写调用程序时,不需要保护或恢复CS和IP,只要保护其它相关寄存器即可。
若只是想在程序中获取当前的CS值,可以通过PUSH CS将CS值入栈后,再用POP操作将其放入其它寄存器中。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式