【发布时间】:2020-10-19 06:48:39
【问题描述】:
我已经阅读了这篇文章: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
【问题讨论】:
-
您对程序集的更改应该会产生效果。关于为什么您没有看到更改,我最好的猜测是您正在链接旧版本的程序集。请包括您正在使用的编译和链接步骤。
-
LOL 我发现了这个错误,我从 docker 中提取代码,但我在我的 IDE 上编码,它不会更改 docker 中的代码
标签: riscv