# COS235- HW4 # Nicholas Pease # 31 OCT 2024 .data: inputUInt: .space 32 dots: .asciz ".." .text: main: li a7, 5 # input unsigned int (A) la a0, inputUInt ecall mv a1, a0 # a1 = A li a7, 5 # input unsigned int (B) la a0, inputUInt ecall mv a2, a0 # a2 = B # CALL RECURSIVE FUNCTION jal kapow jal kapow # PRINT RETURN VALUE li a7, 34 ecall mv t0, a0 li a0, 9 li a7, 11 ecall mv a0, t0 li a7, 1 ecall jal newline li a7, 10 ecall # Exit program kapow: # A0 = return # A1 = A, X # A2 = B, Y # A3 = Saved # t0 = Loop # t1 = Temporary addi sp, sp, -16 sw a3, 12(sp) sw ra, 8(sp) sw a1, 4(sp) sw a2, 0(sp) # save all values before run li t0, 0 # loop counter (0) li a7, 4 # print string la a0, dots # print dots kapow_forLoop: ecall addi t0, t0, 1 bne t0,a2,kapow_forLoop # END FOR LOOP li a0, 32 li a7, 11 ecall li a7, 1 # print int mv a0, a2 # print Y ecall jal newline # print newline li a0, 1 blt a0, a2, kapow_gt1 # if Y > 1, jump blt zero, a2, kapow_gt0 # if Y > 0, jump # others y < 0 j kapow_return kapow_gt0: mv a0, a1 # return X j kapow_return kapow_gt1: li t0, 2 div a2,a2,t0 # Y = Y / 2 jal kapow # recursive call mv a3, a0 # a3 = first return value lw t1, 0(sp) # load original Y (t1) li t0, 2 # remainder number (t0) rem t0,t1,t0 # t0 = Y (t1) % 2 (t0) add a2, t0, a2# Y = prevY + y%2 jal kapow mul a0, a3, a0 # return = x * y kapow_return: lw a3, 12(sp) lw ra, 8(sp) lw a1, 4(sp) lw a2, 0(sp) addi sp, sp, 16 ret newline: mv t0, a0 li a0, 10 li a7, 11 ecall mv a0, t0 ret