函数调用汇编语言

时间:2017-09-01 09:50:34

标签: assembly riscv risc

我正在尝试在Simple RISC中创建一个简单的程序。我需要在while循环中进行函数调用(返回类型为int)。可以在不使用堆栈指针的情况下实现吗? (附上我的C ++代码供参考)

while(k>0){
    int p=k%10;
    int r=power(p);     //power returns p^p
 result+=r;
 k=k/10;
}

1 个答案:

答案 0 :(得分:0)

据我从标签中了解,您希望在riscv上实现该功能。

是的,你可以在没有堆栈指针的情况下完成它,它是一个非常简单的函数,但是如果它更复杂,你也可以避免使用堆栈指针,但你需要保存临时变量并在堆栈的某处注册

以下是代码:

;a0 function arg, a3 return value
;x0 is hardwired to 0,
.text
.globl  power
.type   power , @function


power:
add a3,x0,1
add a4,a0,0
power_0:
mul a3,a3,a0
add a4,a4,-1
bnez  a4,power_0
jr ra

我没有看到避免堆栈指针的重点,但如果你说明了完整的问题,那么可以有更好的解决方案