最近在学RISC-V的汇编,这里我就以上次作业gcd函数为例,分享一下如何写汇编程序。
C语言版的如下。不多介绍了。
int gcd(int a,int b){
if(b==0)
return a;
return gcd(b,a%b);
}
RISCV汇编的代码如下。
.text
.globl gcd
.type gcd, @function
gcd:
addi sp,sp,-32 #调整栈指针
sd ra,24(sp) #保存函数返回地址
sd s0,16(sp) #保存帧指针(FP)
addi s0,sp,32 #指向栈顶
mv a4,a0 #第一个参数a放在a0中,移到a4
mv a5,a1 #第二个参数b放在a1中,移到a5
#将其保存到堆栈中
sw a4,-20(s0)
sw a5,-24(s0)
bne a5,zero,.return #如果第二个参数b!=0,再调用一次
lw a4,-20(s0) #如果为0,取出参数a,返回
j .end