Final
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,17 @@
|
|||||||
|
COS235 HW4
|
||||||
|
Nicholas Pease
|
||||||
|
15 NOV 2024
|
||||||
|
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
This is a program that executes a recursive program to display some dots and ints on a screen.
|
||||||
|
|
||||||
|
Execution:
|
||||||
|
|
||||||
|
This program requires RARS (https://github.com/TheThirdOne/rars) and JDK.
|
||||||
|
|
||||||
|
To execute the program with RARS, run the following command
|
||||||
|
java -jar rars1_6.jar hw.s
|
||||||
|
|
||||||
|
With rars1_6 being the current version of RARS and in the same directory as the file
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# COS235- HW4
|
||||||
# Nicholas Pease
|
# Nicholas Pease
|
||||||
# 31 OCT 2024
|
# 31 OCT 2024
|
||||||
.data:
|
.data:
|
||||||
@@ -7,22 +8,34 @@
|
|||||||
.text:
|
.text:
|
||||||
main:
|
main:
|
||||||
li a7, 5 # input unsigned int (A)
|
li a7, 5 # input unsigned int (A)
|
||||||
|
la a0, inputUInt
|
||||||
ecall
|
ecall
|
||||||
mv a1, a0 # a1 = A
|
mv a1, a0 # a1 = A
|
||||||
|
|
||||||
li a7, 5 # input unsigned int (B)
|
li a7, 5 # input unsigned int (B)
|
||||||
|
la a0, inputUInt
|
||||||
ecall
|
ecall
|
||||||
mv a2, a0 # a2 = B
|
mv a2, a0
|
||||||
|
# a2 = B
|
||||||
|
|
||||||
# CALL RECURSIVE FUNCTION
|
# CALL RECURSIVE FUNCTION
|
||||||
jal ra, kapow
|
jal kapow
|
||||||
|
jal kapow
|
||||||
|
|
||||||
# PRINT RETURN VALUE
|
# PRINT RETURN VALUE
|
||||||
mv a0, a0
|
li a7, 34
|
||||||
|
ecall
|
||||||
|
|
||||||
|
mv t0, a0
|
||||||
|
li a0, 9
|
||||||
|
li a7, 11
|
||||||
|
ecall
|
||||||
|
mv a0, t0
|
||||||
|
|
||||||
li a7, 1
|
li a7, 1
|
||||||
ecall
|
ecall
|
||||||
|
|
||||||
jal ra, newline
|
jal newline
|
||||||
|
|
||||||
li a7, 10
|
li a7, 10
|
||||||
ecall # Exit program
|
ecall # Exit program
|
||||||
@@ -52,33 +65,36 @@ kapow:
|
|||||||
bne t0,a2,kapow_forLoop
|
bne t0,a2,kapow_forLoop
|
||||||
# END FOR LOOP
|
# END FOR LOOP
|
||||||
|
|
||||||
|
li a0, 32
|
||||||
|
li a7, 11
|
||||||
|
ecall
|
||||||
|
|
||||||
li a7, 1 # print int
|
li a7, 1 # print int
|
||||||
mv a0, a2 # print Y
|
mv a0, a2 # print Y
|
||||||
ecall
|
ecall
|
||||||
|
|
||||||
jal ra, newline # print newline
|
jal newline # print newline
|
||||||
|
|
||||||
li t0, 1
|
li a0, 1
|
||||||
blt t0, a2, kapow_gt1 # if Y > 1, jump
|
blt a0, a2, kapow_gt1 # if Y > 1, jump
|
||||||
blt zero, a2, kapow_gt0 # if Y > 0, jump
|
blt zero, a2, kapow_gt0 # if Y > 0, jump
|
||||||
# others y < 0
|
# others y < 0
|
||||||
li a0, 1
|
|
||||||
j kapow_return
|
j kapow_return
|
||||||
|
|
||||||
kapow_gt0:
|
kapow_gt0:
|
||||||
mv a0, a1
|
mv a0, a1 # return X
|
||||||
j kapow_return
|
j kapow_return
|
||||||
|
|
||||||
kapow_gt1:
|
kapow_gt1:
|
||||||
li t0, 2
|
li t0, 2
|
||||||
div a2,a2,t0 # Y = Y / 2
|
div a2,a2,t0 # Y = Y / 2
|
||||||
jal ra, kapow # recursive call
|
jal kapow # recursive call
|
||||||
mv a3, a0 # a3 = first return value
|
mv a3, a0 # a3 = first return value
|
||||||
lw t1, 0(sp) # load original Y (t1)
|
lw t1, 0(sp) # load original Y (t1)
|
||||||
li t0, 2 # remainder number (t0)
|
li t0, 2 # remainder number (t0)
|
||||||
rem t0,t1,t0 # t0 = Y (t1) % 2 (t0)
|
rem t0,t1,t0 # t0 = Y (t1) % 2 (t0)
|
||||||
add a2, t0, a2# Y = prevY + y%2
|
add a2, t0, a2# Y = prevY + y%2
|
||||||
jal ra, kapow
|
jal kapow
|
||||||
mul a0, a3, a0 # return = x * y
|
mul a0, a3, a0 # return = x * y
|
||||||
|
|
||||||
kapow_return:
|
kapow_return:
|
||||||
@@ -20,8 +20,18 @@ main:
|
|||||||
|
|
||||||
# CALL RECURSIVE FUNCTION
|
# CALL RECURSIVE FUNCTION
|
||||||
jal kapow
|
jal kapow
|
||||||
|
jal kapow
|
||||||
|
|
||||||
# PRINT RETURN VALUE
|
# PRINT RETURN VALUE
|
||||||
|
li a7, 34
|
||||||
|
ecall
|
||||||
|
|
||||||
|
mv t0, a0
|
||||||
|
li a0, 9
|
||||||
|
li a7, 11
|
||||||
|
ecall
|
||||||
|
mv a0, t0
|
||||||
|
|
||||||
li a7, 1
|
li a7, 1
|
||||||
ecall
|
ecall
|
||||||
|
|
||||||
@@ -55,6 +65,10 @@ kapow:
|
|||||||
bne t0,a2,kapow_forLoop
|
bne t0,a2,kapow_forLoop
|
||||||
# END FOR LOOP
|
# END FOR LOOP
|
||||||
|
|
||||||
|
li a0, 32
|
||||||
|
li a7, 11
|
||||||
|
ecall
|
||||||
|
|
||||||
li a7, 1 # print int
|
li a7, 1 # print int
|
||||||
mv a0, a2 # print Y
|
mv a0, a2 # print Y
|
||||||
ecall
|
ecall
|
||||||
|
|||||||
Reference in New Issue
Block a user