#	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

Leave a Reply

Your email address will not be published. Required fields are marked *