假设函数foo定义为:
def foo(x,y):
return x + y
然后说我有函数调用:
foo(2,3)
其对应于x86-64:
movq $2 %rdi
movq $3 %rsi
call foo
我知道如果函数foo
有一个返回值,它将被存储在寄存器%rax
中。但这到底意味着什么呢?
程序集将类似于:
movq $2 %rdi
movq $3 %rsi
call foo
foo:
movq -8(%rsb) %rax
addq -16(%rsb) %rax
请你在汇编中完成foo的定义好吗?它使用%rax
吗?它如何使用%rax
?
我的问题是如何使用%rax来获取函数的返回值,以及%rax
中的这个值如何在调用者和被调用者之间传递。
1条答案
按热度按时间aamkag611#
为了说明这是如何工作的,我将使用函数
foo
作为示例:下面是
z
的值是如何计算的。(实际上可能会发生的情况是,编译器只是预先计算了17*3,并将其作为常量加载,但这对我试图演示的内容没有帮助。)