init commit
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
.data
|
||||
array: .word 1, 2, 3, 4, 5, 6
|
||||
orig: .asciiz "Original array: "
|
||||
rev: .asciiz "\nReverse array: "
|
||||
|
||||
.text
|
||||
|
||||
main:
|
||||
|
||||
jal printOriginalArray
|
||||
jal printReverseArray
|
||||
|
||||
ori $v0, $0, 10 # system call code 10 for exit
|
||||
syscall # exit the program
|
||||
|
||||
reverse:
|
||||
bge $a0, $a1, done # if the start index is greater or equal to the end index, we are done
|
||||
|
||||
lw $t2, array($a0) # load the element at start index
|
||||
lw $t3, array($a1) # load the element at end index
|
||||
sw $t3, array($a0) # store the element from the end at the start index
|
||||
sw $t2, array($a1) # store the element from the start at the end index
|
||||
|
||||
addi $a0, $a0, 1 # increment the start index
|
||||
subi $a1, $a1, 1 # decrement the end index
|
||||
|
||||
b reverse # recursively reverse the remaining elements
|
||||
done:
|
||||
jr $ra # return to the caller
|
||||
|
||||
printOriginalArray:
|
||||
li $v0, 4
|
||||
la $a0, orig
|
||||
syscall
|
||||
|
||||
li $s0, 21 # limit of offsets for 6 elements in the array
|
||||
li $v0, 1 # syscall 1 to print an int
|
||||
li $t0, 0
|
||||
|
||||
origWhile:
|
||||
bge $t0, $s0 origDone # while the offset is less than 21
|
||||
lw $a0, array($t0) # load the next word in the array
|
||||
syscall # print
|
||||
|
||||
addi $t0, $t0, 4 # increment the offset by 4
|
||||
|
||||
b origWhile # return to start of while loop
|
||||
origDone:
|
||||
jr $ra # return to caller
|
||||
|
||||
printReverseArray:
|
||||
li $v0, 4
|
||||
la $a0, rev
|
||||
syscall
|
||||
|
||||
li $s0, -1 # lower limit of 6 offsets
|
||||
li $v0, 1 # syscall 1 to print an int
|
||||
li $t0, 20
|
||||
|
||||
revWhile:
|
||||
bge $s0, $t0 revDone # while the offset is less than 21
|
||||
lw $a0, array($t0) # load the next word in the array
|
||||
syscall # print
|
||||
|
||||
subi $t0, $t0, 4 # increment the offset by 4
|
||||
|
||||
b revWhile # return to start of while loop
|
||||
revDone:
|
||||
jr $ra # return to caller
|
||||
Reference in New Issue
Block a user