diff --git a/mult_recursive.s b/mult_recursive.s new file mode 100644 index 0000000..100618d --- /dev/null +++ b/mult_recursive.s @@ -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 +