我已经读过这个alr了:https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf
但仍然找不到RISC-V将参数放入哪个寄存器。
代码fibonacci.c如下所示:
#include <stdio.h>
unsigned long long int fibonacci(int);
int main () {
unsigned long long int ret;
for (int i = 0; i < 94; i++) {
ret = fibonacci(i);
printf("%llu\n", ret);
}
return 0;
}.s代码格式是这样的:
.global fibonacci
.type fibonacci, %function
.align 2
# unsigned long long int fibonacci(int n);
fibonacci:
# insert code here
# Green card here: https://www.cl.cam.ac.uk/teaching/1617/ECAD+Arch/files/docs/RISCVGreenCardv8-20151013.pdf
ret我已经尝试更改a0,a1寄存器中的值,但输出仍然没有更改。
如下所示:
.global fibonacci
.type fibonacci, %function
.align 2
# unsigned long long int fibonacci(int n);
fibonacci:
# insert code here
add a0, a0, a0
addi a1, zero, 1
# Green card here: https://www.cl.cam.ac.uk/teaching/1617/ECAD+Arch/files/docs/RISCVGreenCardv8-20151013.pdf
ret输出仍然是0 1 2 3 ... ... 90 91 92 93
发布于 2020-10-20 04:17:19
调用斐波那契函数的abi对于输入和输出都是a0 ( 32位a1也用于输出)。
Compiler explorer是研究C ->汇编的一个非常有用的工具。在调用fibonacci之后,C代码将a0移动到-32(sp)中,然后移动到a1中用于下面的printf。
https://stackoverflow.com/questions/64422384
复制相似问题