# MIPS assembly program to calculate base ^ power recursively # # Purpose of registers: # $s0 = base # $s1 = exponent # $s2 = result # $s3 = counter variable .text main: li $s0, 3 # Let's compute 3^4 = 81. li $s1, 4 li $s2, 1 # initially, set answer to 1. move $s3, $s1 # Set the counter = exponent. jal power li $v0, 1 # Now, print the answer move $a0, $s2 syscall li $v0, 10 # end of program syscall #-------------------------------------------------------------------- power: sw $ra, 0($sp) # save return address on system stack addi $sp, $sp, -4 if: blt $s3, 2, else # if counter < 2, time to multiply addi $s3, $s3, -1 # otherwise, decrement counter and jal power # call power recursively else: mul $s2, $s2, $s0 # multiply one power at a time addi $sp, $sp, 4 # Restore return address lw $ra, 0($sp) jr $ra # return #--------------------------------------------------------------------- # At the point where take the base case and begin to multiply, # # PC = 0x00400064 # $ra = 0x00400060 # $sp = 0x7fffefec # # memory(0x7fffefec) = 0x00000000 # memory(0x7fffeff0) = 0x00400060 = address of "mul" instruction # memory(0x7fffeff4) = 0x00400060 # memory(0x7fffeff8) = 0x00400060 # memory(0x7fffeffc) = 0x00400034 = address of "li $v0, 1"