title: loop through array mips
body: <p>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: </p>
  
  <pre><code> # --------------------------------
  # 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
  </code></pre>
  
  <p>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!</p>