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