scounixadmin 发表于 2010-04-10 16:25

**函数调用为啥不保存所有的寄存器???**

难道不怕被‘被调用函数’修改吗?

EricFisher 发表于 2010-04-10 16:28

如果约定好哪些寄存器不需要保存,并且代码遵从这种约定,就可以了。

prolj 发表于 2010-04-10 16:29

瞎墨迹啥?MIPS有几个寄存器是专门保存参数的,x64那么多寄存器,一般函数也就两三个参数,一定要入栈么?

scounixadmin 发表于 2010-04-10 16:37

我个人觉得**一般情况下**,所有用到的数据(全局,局部...),都在内存中,所以不需要保护所有寄存器。
但是优化情况下,比如说将中间变量放在寄存器中,估计就要将此寄存器pop到栈中保护起来了。
望大虾指点这种理解是否正确?谢谢!!!

EricFisher 发表于 2010-04-10 16:52

函数调用,会使程序执行从当前帧(frame)进入到新的帧,需要保存相关的寄存器,以确保在返回到先前的帧时,相关寄存器的内部不会被破坏(clobber)。

scounixadmin 发表于 2010-04-10 17:00

楼上的大虾,但是我只看见函数调用时只是把‘实参,EBP,局部变量’入栈,并没有把其他的寄存器入栈,这矛盾吗?

EricFisher 发表于 2010-04-10 17:15

没看过x86汇编 :(

jzhang918 发表于 2010-04-10 23:15

EricFisher解答正确。
页: [1]
查看完整版本: **函数调用为啥不保存所有的寄存器???**