在书中有这么一句话:
根据惯例,寄存器eax,edx,ecx被划分为调用者保存(caller save)寄存器。当过程P调用Q时,Q可以覆盖这些寄存器,而不会破坏P所需要的数据。
我感到有些奇怪,Q覆盖了这些调用者保存寄存器之后,那怎么恢复值?难道在覆盖调用者保存寄存器之前被压入了调用者的栈帧里面?
在书中有这么一句话:
根据惯例,寄存器eax,edx,ecx被划分为调用者保存(caller save)寄存器。当过程P调用Q时,Q可以覆盖这些寄存器,而不会破坏P所需要的数据。
我感到有些奇怪,Q覆盖了这些调用者保存寄存器之后,那怎么恢复值?难道在覆盖调用者保存寄存器之前被压入了调用者的栈帧里面?
caller save的意思是保存这个值的责任在caller (P), 如果P需要则应该自己保存到栈上。