Add mult_recursive.s

This commit is contained in:
Sirin Puenggun 2024-03-04 11:28:01 +07:00 committed by GitHub
parent 06e4b96e11
commit 9c7fc468ef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

37
mult_recursive.s Normal file
View File

@ -0,0 +1,37 @@
.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
addi sp sp -12 # Move stack pointer down by 12 bytes to store a, b, ra
sw a0 8(sp) # Store a
sw a1 4(sp) # Store b
sw ra 0(sp) # Store ra
addi t0 x0 1 # t0 = temporary 1
bne a1 t0 return # if b != then jump to return
addi sp sp 12
jr ra # return a
return:
# a + mult(a, b-1)
addi a1 a1 -1 # b = b-1
jal mult # call mult(a, b-1)
lw t1 8(sp) # load a into t1
lw ra 0(sp) # Load ra
addi sp sp 12
add a0 a0 t1 # a + mult(a, b-1)
jr ra
exit:
addi a0 x0 10
ecall