寄存器内容是否会被调用者覆盖

xiaoxiao2021-02-28  25

IA32(俗称x86)采用了一组统一的寄存器使用惯例., 所有的过程调用都必须遵守, 包括程序库中的过程. 看例子:

yoo: … movq $15213, **%rdx** call who a ddq **%rdx**, %rax … ret who: … subq $18213, **%rdx** … ret

深入了解计算机系统P173说得很清楚。 P里边的保存x使用的寄存器%rdi,在调用Q的时候也要使用,所以为了不覆盖,我们可以继续使用%rdi,但是必须要把%rdi里边的值,先放到一个空间,所以我们push,即保存这个值进入栈里边,这个时候有了备份,就可以修改这个寄存器了。同时,在调用函数结束的时候,要把这个值pop出来。

转载请注明原文地址: https://www.6miu.com/read-2150170.html

最新回复(0)