程序集的函数参数

问题描述

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