难道不怕被‘被调用函数’修改吗?
EricFisher解答正确。
没看过x86汇编
楼上的大虾,但是我只看见函数调用时只是把‘实参,EBP,局部变量’入栈,并没有把其他的寄存器入栈,这矛盾吗?
函数调用,会使程序执行从当前帧(frame)进入到新的帧,需要保存相关的寄存器,以确保在返回到先前的帧时,相关寄存器的内部不会被破坏(clobber)。
我个人觉得**一般情况下**,所有用到的数据(全局,局部...),都在内存中,所以不需要保护所有寄存器。但是优化情况下,比如说将中间变量放在寄存器中,估计就要将此寄存器pop到栈中保护起来了。望大虾指点这种理解是否正确?谢谢!!!
瞎墨迹啥?MIPS有几个寄存器是专门保存参数的,x64那么多寄存器,一般函数也就两三个参数,一定要入栈么?
如果约定好哪些寄存器不需要保存,并且代码遵从这种约定,就可以了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(7)
EricFisher解答正确。
没看过x86汇编
楼上的大虾,但是我只看见函数调用时只是把‘实参,EBP,局部变量’入栈,并没有把其他的寄存器入栈,这矛盾吗?
函数调用,会使程序执行从当前帧(frame)进入到新的帧,需要保存相关的寄存器,以确保在返回到先前的帧时,相关寄存器的内部不会被破坏(clobber)。
我个人觉得**一般情况下**,所有用到的数据(全局,局部...),都在内存中,所以不需要保护所有寄存器。
但是优化情况下,比如说将中间变量放在寄存器中,估计就要将此寄存器pop到栈中保护起来了。
望大虾指点这种理解是否正确?谢谢!!!
瞎墨迹啥?MIPS有几个寄存器是专门保存参数的,x64那么多寄存器,一般函数也就两三个参数,一定要入栈么?
如果约定好哪些寄存器不需要保存,并且代码遵从这种约定,就可以了。