-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.asm
executable file
·162 lines (118 loc) · 2.55 KB
/
functions.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# xSpim Memory Demo Program
# Data Area
.data
space:
.asciiz " "
newline:
.asciiz "\n"
dispArray:
.asciiz "\nCurrent Array:\n"
convention:
.asciiz "\nConvention Check\n"
myArray:
.word 0 33 123 -66 332 -1 -223 453 9 45 -78 -14
#Text Area (i.e. instructions)
.text
main:
ori $v0, $0, 4
la $a0, dispArray
syscall
ori $s1, $0, 12
la $s0, myArray
add $a1, $0, $s1
add $a0, $0, $s0
jal DispArray
ori $s2, $0, 0
ori $s3, $0, 0
ori $s4, $0, 0
ori $s5, $0, 0
ori $s6, $0, 0
ori $s7, $0, 0
add $a1, $0, $s1
add $a0, $0, $s0
jal PrintReverse
add $s1, $s1, $s2
add $s1, $s1, $s3
add $s1, $s1, $s4
add $s1, $s1, $s5
add $s1, $s1, $s6
add $s1, $s1, $s7
add $a1, $0, $s1
add $a0, $0, $s0
jal DispArray
j Exit
DispArray:
addi $t0, $0, 0
add $t1, $0, $a0
dispLoop:
beq $t0, $a1, dispend
sll $t2, $t0, 2
add $t3, $t1, $t2
lw $t4, 0($t3)
ori $v0, $0, 1
add $a0, $0, $t4
syscall
ori $v0, $0, 4
la $a0, space
syscall
addi $t0, $t0, 1
j dispLoop
dispend:
ori $v0, $0, 4
la $a0, newline
syscall
jr $ra
ConventionCheck:
addi $t0, $0, -1
addi $t1, $0, -1
addi $t2, $0, -1
addi $t3, $0, -1
addi $t4, $0, -1
addi $t5, $0, -1
addi $t6, $0, -1
addi $t7, $0, -1
ori $v0, $0, 4
la $a0, convention
syscall
addi $v0, $zero, -1
addi $v1, $zero, -1
addi $a0, $zero, -1
addi $a1, $zero, -1
addi $a2, $zero, -1
addi $a3, $zero, -1
addi $k0, $zero, -1
addi $k1, $zero, -1
jr $ra
Exit:
ori $v0, $0, 10
syscall
# COPYFROMHERE - DO NOT REMOVE THIS LINE
PrintReverse:
#TODO: write your code here, $a0 stores the address of the array, $a1 stores the length of the array
addiu $sp, $sp, -20
sw $s0, 0($sp)
sw $s1, 4($sp)
sw $s2, 8($sp)
sw $s3, 12($sp)
sw $ra, 16($sp)
sll $t0, $a1, 2
move $s0, $a0
add $s1, $t0, $s0
printLoop:
beq $s1, $s0, exitLoop
addiu $s1, $s1, -4
lw $s2, 0($s1)
li $v0, 1
move $a0, $s2
syscall
jal ConventionCheck
j printLoop
exitLoop:
lw $s0, 0($sp)
lw $s1, 4($sp)
lw $s2, 8($sp)
lw $s3, 12($sp)
lw $ra, 16($sp)
addiu, $sp, $sp, 20
li $v0, 10
jr $ra