RISC-V-asm-programming/mult_recursive.s
2024-03-04 15:27:17 +07:00

43 lines
828 B
ArmAsm

.text
main:
addi a0 x0 110
addi a1 x0 50
jal mult
mv a1 a0
addi a0 x0 1
ecall
j exit
mult:
# a0 = a, a1 = b
# Set Up
addi sp sp -8 # Move stack pointer down by 8 bytes to store a, ra
sw a0 4(sp) # Store a
sw ra 0(sp) # Store ra
addi t0 x0 1 # t0 = temporary 1
bne a1 t0 return # if b != 1 then jump to return
# Base Case
addi sp sp 8 # Move stack pointer up to previous ra
jr ra # return a
return:
# a + mult(a, b-1)
addi a1 a1 -1 # b = b-1
jal mult # call mult(a, b-1)
# After get output from function (get a0)
lw t1 4(sp) # load a into t1
lw ra 0(sp) # Load ra
addi sp sp 8 # Move stack pointer up to previous ra
add a0 a0 t1 # a + mult(a, b-1)
jr ra
exit:
addi a0 x0 10
ecall