How to do structs in MIPS assembly

[code title=”View Source Code:” collapse=”true”]
# Learning Objectives:
# Functions, arrays, structures.

############################################
#### C++ Code
############################################

#void DisplayTemps(Temp temps[], int len);
#
#struct Temp {
# int lo;
# int hi;
#};
#
#int main() {
# Temp temps[] = { {40, 74}, {45, 80}, {60, 91} };
#
# DisplayTemps(temps, 3);
#
# return (0);
#}
#
#void DisplayTemp(Temp temps[], int len) {
# cout < < "Listing of (lo, hi) temps:"
# << endl;
# for (int i = 0; i < len; i++) {
# cout << temps[i].lo
# << " "
# << temps[i].hi
# << endl;
# }
#}
###

###########################################
#### MIPS code
###########################################

.data

words: .asciiz "Listing of (lo, hi) temps:n"
somespace: .asciiz " "
newline: .asciiz "n"

temps:
# declare an array of structs that is preloaded with values
.word 40,74 #( Just like a 2d array )
.word 45,80
.word 60,91

.text

main:

#######
addiu $sp, $sp, -4
sw $ra, 0($sp)
S
la $a0, temps # DisplayTemps(temps, 3);
addi $a1, $zero, 3 #
jal DisplayTemps ####

lw $ra, 0($sp)
addiu $sp, $sp, 4
jr $ra

DisplayTemps:

###############

li $v0, 4 # print_string
la $a0, words # " Listing of (lo, hi) temps:"
syscall

# FOR LOOP

la $t0, temps #$t0 holds the address of the 1st element
li $t1, 1 # iterator = 1
#a0 holds the current elements value

for:

bgt $t1, $a1, exitfor # exit if iterator > a1 (len)

li $v0, 1 # print_int
lw $a0, ($t0)
syscall

li $v0, 4 # print_string
la $a0, somespace # " "
syscall

li $v0, 1 # print_int
add $t0, 4 # increment the index
lw $a0, ($t0)
syscall

add $t0, 4 #increment index again
lw $a0, ($t0)

li $v0, 4 # print_string
la $a0, newline # "n"
syscall
#Increment iterator
add $t1, 1

j for

exitfor:

jr $ra

[/code]