-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathout.asm
158 lines (158 loc) · 3.22 KB
/
out.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
151
152
153
154
155
156
157
158
# @author Angela Jia
# @version Thu May 12 18:06:50 PDT 2022
.data
nl: .asciiz "\n"
varx: .word 0
vary: .word 0
varcount: .word 0
.text
.globl main
main:
li $v0 2
sw $v0 varx # set variable value
la $t0 varx
lw $v0 ($t0) # load variable
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
li $v0 1
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
addu $v0 $t0 $v0
sw $v0 vary # set variable value
la $t0 varx
lw $v0 ($t0) # load variable
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
la $t0 vary
lw $v0 ($t0) # load variable
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
addu $v0 $t0 $v0
sw $v0 varx # set variable value
la $t0 varx
lw $v0 ($t0) # load variable
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
la $t0 vary
lw $v0 ($t0) # load variable
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
mult $v0 $t0
mflo $v0
move $a0 $v0
li $v0 1
syscall
la $a0 nl
li $v0 4
syscall # print expression and move to new line
la $t0 varx
lw $v0 ($t0) # load variable
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
la $t0 vary
lw $v0 ($t0) # load variable
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
ble $t0 $v0 endif1
la $t0 varx
lw $v0 ($t0) # load variable
move $a0 $v0
li $v0 1
syscall
la $a0 nl
li $v0 4
syscall # print expression and move to new line
la $t0 vary
lw $v0 ($t0) # load variable
move $a0 $v0
li $v0 1
syscall
la $a0 nl
li $v0 4
syscall # print expression and move to new line
endif1:
li $v0 14
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
li $v0 14
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
bne $t0 $v0 endif2
li $v0 14
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
li $v0 14
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
beq $t0 $v0 endif3
li $v0 3
move $a0 $v0
li $v0 1
syscall
la $a0 nl
li $v0 4
syscall # print expression and move to new line
endif3:
li $v0 14
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
li $v0 14
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
bgt $t0 $v0 endif4
li $v0 4
move $a0 $v0
li $v0 1
syscall
la $a0 nl
li $v0 4
syscall # print expression and move to new line
endif4:
endif2:
li $v0 15
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
li $v0 14
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
ble $t0 $v0 endif5
li $v0 5
move $a0 $v0
li $v0 1
syscall
la $a0 nl
li $v0 4
syscall # print expression and move to new line
endif5:
li $v0 1
sw $v0 varcount # set variable value
loop6:
la $t0 varcount
lw $v0 ($t0) # load variable
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
li $v0 15
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
bgt $t0 $v0 endw7
la $t0 varcount
lw $v0 ($t0) # load variable
move $a0 $v0
li $v0 1
syscall
la $a0 nl
li $v0 4
syscall # print expression and move to new line
la $t0 varcount
lw $v0 ($t0) # load variable
subu $sp $sp 4
sw $v0 ($sp) # push from reg to stack
li $v0 1
lw $t0 ($sp)
addu $sp $sp 4 # pop from stack to reg
addu $v0 $t0 $v0
sw $v0 varcount # set variable value
j loop6
endw7:
li $v0 10
syscall # terminate