I'm working on a homework assignment that requires me to compute the grayscale value of a series of hex values in an array. That's the part I understand. I need to loop through this array of values until a -1 is encountered. Here's what I've got:
# --------------------------------
# Below is the expected output.
#
# Converting pixels to grayscale:
# 0
# 1
# 2
# 34
# 5
# 67
# 89
# Finished.
# -- program is finished running --
#---------------------------------
.data 0x0
startString: .asciiz "Converting pixels to grayscale:\n"
finishString: .asciiz "Finished."
newline: .asciiz "\n"
pixels: .word 0x00010000, 0x010101, 0x6, 0x3333,
0x030c, 0x700853, 0x294999, -1
.text 0x3000
main:
ori $v0, $0, 4 #System call code 4 for printing a string
ori $a0, $0, 0x0 #address of startString is in $a0
syscall #print the string
LOOP: ori $a0, $0, 0x0
lw $t1, 48($a0)
beq $t1 -1, exit
addi $t4, $0, 3
sll $t2, $t1, 8
srl $s1, $t2, 24 #$s1 becomes red value
sll $t2, $t1, 16
srl $s2, $t2, 24 #$s2 becomes green value
sll $t2, $t1, 24
srl $s3, $t2, 24 #$s3 become blue value
add $t1, $s1, $s2
add $t1, $t1, $s3
div $t1, $t4
mflo $s4 #$s4 becomes grayscale value
or $a0, $0, $s4
ori $v0, $0, 1
syscall
ori $v0, $0, 4
ori $a0, $0, 43
syscall
j LOOP
exit:
ori $v0, $0, 4 #System call code 4 for printing a string
ori $a0, $0, 33 #address of finishString is in $a0; we computed this
# simply by counting the number of chars in startString,
# including the \n and the terminating \0
syscall #print the string
ori $v0, $0, 10 #System call code 10 for exit
syscall #exit the program
I know that 48 needs to be incremented by 4 for every iteration of the loop, I just have no idea how to do this in MIPS. Any help is much appreciated!