程序集的函数参数

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的地址,好的编译器会先尝试看是否需要它,只有在放弃后,才会在栈帧上分配内存。