我知道寄存器用于在x64中在调用函数和被调用函数之间传递参数。第一个参数通过寄存器rdi传递。第二个参数通过寄存器rsi传递。然后是rdx,rcx,r8,r9。然而,我观察到的一个有趣的现象是,gcc对于首先应该传递哪个参数没有统一的想法。假设函数A和函数B将调用函数C,函数C具有三个参数c1,c2,c3。
在功能A中,您将看到:
mov rdi, c1
mov rsi, c2
mov rdx, c3
call C
但是,在功能B中,您将看到:
mov rsi c2
mov rdi c1
mov rdx c3
call C
所以,我的问题是gcc如何决定参数传递的顺序?非常感谢。