问题描述
我实际上是汇编(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
从表中我们可以看出,参数确实是在寄存器r4
-r7
中传递的,每个寄存器都有32位。从同一个文档中我们了解到 int 是 4 个字节。这意味着 x
将传入 r4
。 &x
未在此处传递,因为这是按值调用。如果你想访问x
的地址,好的编译器会先尝试看看它是否需要,只有在放弃后才会在栈帧上分配内存。