程序集的函数参数
Assembly's function parameter
我实际上是汇编 (Nios II) 的初学者,我知道函数参数存储在寄存器中 (r4 -> r7)
但是我想知道这些寄存器是否包含参数的实际值或者它的地址?
例如 C 函数:
int add (int x, int y) {}
r4 是否包含 'x' 或 '&x'?
这是 Nios II 的 ABI:
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/nios2/n2cpu_nii51016.pdf
从table可以看出,参数确实是在寄存器r4
-r7
中传递的,每个寄存器都有32位。从同一份文件中我们了解到 int 是 4 个字节。这意味着 x
将在 r4
中传递。 &x
未在此处传递,因为这是按值调用。如果你想访问x
的地址,好的编译器会先尝试看是否需要它,只有在放弃后,才会在栈帧上分配内存。
我实际上是汇编 (Nios II) 的初学者,我知道函数参数存储在寄存器中 (r4 -> r7) 但是我想知道这些寄存器是否包含参数的实际值或者它的地址?
例如 C 函数:
int add (int x, int y) {}
r4 是否包含 'x' 或 '&x'?
这是 Nios II 的 ABI:
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/nios2/n2cpu_nii51016.pdf
从table可以看出,参数确实是在寄存器r4
-r7
中传递的,每个寄存器都有32位。从同一份文件中我们了解到 int 是 4 个字节。这意味着 x
将在 r4
中传递。 &x
未在此处传递,因为这是按值调用。如果你想访问x
的地址,好的编译器会先尝试看是否需要它,只有在放弃后,才会在栈帧上分配内存。