C Comparisons Array Pointers ----- -------- int A[500]; int A[500]; int i; int * ptr; for (i = 0; i < 500; i++) for (ptr = A; ptr < A+500; ptr++) A[i] = 2; *ptr = 2; (Assume: $s0: A) Pointer version --------------- add $t0, $zero, $s0 # ptr = A, i.e., ptr = &A[0] addi $t1, $zero, 500 # t1 = 500 sll $t1, $t1, 2 # t1 = 500 * 4 addi $t1, $s0, $t1 # t1 = A + 500*4, i.e., t1 = &A[500] (beyond end) addi $t9, $zero, 2 # t9 = 2 LOOP: slt $t2, $t0, $t1 # t2 = 1 if ptr < A+500 beq $t2, $zero ENDLOOP # go to ENDLOOP if ptr >= A+500 sw $t9, 0($t0) # store 2 out to &A[i], i.e., *ptr = 2 addi $t0, $t0, 4 # ptr++, i.e., add sizeof int to ptr j LOOP # go to top of loop ENDLOOP: ... Array version ------------- add $t0, $zero, $zero # i = 0 addi $t1, $zero, 500 # t1 = 500 # addi $t8, $zero, 1 # t8 = 1 addi $t9, $zero, 2 # t9 = 2 LOOP: slt $t2, $t0, $t1 # t2 = 1 if i < 500 beq $t2, $zero ENDLOOP # go to ENDLOOP if i >= 500 # Calculate &A[i] so we can put a 2 there sll $t3, $t0, 2 # t3 = 4 * i # OR add $t3, $t0, $t0 # OR t3 = 2i # add $t3, $t3, $t3 # t3 = 4i add $t4, $s0, $t3 # t4 = &A[0] + 4i, i.e., A + 4i, i.e., &A[i] sw $t9, 0($t4) # store 2 out to &A[i], i.e., A[i] = 2 addi $t0, $t0, 1 # i++ # OR add $t0, $t0, $t8 j LOOP # go to LOOP ENDLOOP: ...