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; Remember that pointer arithmetic takes the size of the underlying type into account. MIPS Comparisons (Assume: $s0: A) Array version ------------- move $t1, $zero # t1 = i addi $t2, $zero, 500 # t2 = 500 addi $t3, $zero, 2 # t3 = 2 loop: slt $t0, $t1, $t2 # t0 = 1 if i < 500 beq $t0, $zero, exit # if i >= 500, goto exit sll $t4, $t1, 2 # t4 = 4 * i add $t4, $t4, $s0 # t4 = A + 4*i = addr of A[i] sw $t3, 0($t4) # store 2 out to A[i] addi $t1, $t1, 1 # i++ j loop exit: Pointer version --------------- move $t1, $s0 # t1 = ptr = A addi $t2, $s0, 2000 # t2 = A + 2000 addi $t3, $zero, 2 # t3 = 2 loop: slt $t0, $t1, $t2 # t0 = 1 if ptr < A+2000 beq $t0, $zero, exit # if ptr >= A+2000, goto exit sw $t3, 0($t1) # store 2 out to *ptr addi $t1, $t1, 4 # ptr++ (ptr += 4) j loop exit: