/* Copy numVals values from A into B */
int i;
for ( i = 0; i < numVals; i++ )
B[i] = A[i];
Using Array Indexing | Using Pointers |
---|---|
/* Copy numVals values from A into B */
int i;
for ( i = 0; i < numVals; i++ )
B[i] = A[i];
|
/* Copy numVals values from A into B */
int * ptrA, * ptrB;
for ( ptrA = A, ptrB = B; ptrA < A + numVals;
ptrA++, ptrB++ )
*ptrB = *ptrA;
|
C Array Indexing | MIPS Equivalent | |
---|---|---|
/* Copy numVals values from A into B */
int i;
for ( i = 0; i < numVals; i++ )
B[i] = A[i];
|
move $t0, $zero
LOOP: slt $t1, $t0, $a2
beq $t1, $zero, ENDLP
sll $t2, $t0, 2
add $t3, $a0, $t2
add $t4, $a1, $t2
lw $t5, 0($t3)
sw $t5, 0($t4)
addi $t0, $t0, 1
j LOOP
ENDLP: ...
|
# $a0 = A, $a1 = B, $a2 = numVals # $t0 = i = 0 # $t1 = 1 if i < numVals # leave loop if i >= numVals # $t2 = 4 * i # t3 = A + 4i, i.e., &A[i] # t4 = B + 4i, i.e., &B[i] # read A[i] into $t5 # store $t5 out to B[i] # increment i # jump to top of loop |
Body of loop (array access) is highlighted; loop components are not. |
C Pointers | MIPS Equivalent | |
---|---|---|
/* Copy numVals values from A into B */
int * ptrA, * ptrB;
for ( ptrA = A, ptrB = B; ptrA < A + numVals;
ptrA++, ptrB++ )
*ptrB = *ptrA;
|
move $t0, $a0
move $t1, $a1
sll $t2, $a2, 2
add $t2, $a0, $t2
LOOP: slt $t3, $t0, $t2
beq $t3, $zero, ENDLP
lw $t4, 0($t0)
sw $t4, 0($t1)
addi $t0, $t0, 4
addi $t1, $t1, 4
j LOOP
ENDLP: ...
|
# $a0 = A, $a1 = B, $a2 = numVals # $t0 = ptrA = A (or &A[0]) # $t1 = ptrB = B (or &B[0]) # $t2 = 4 * numVals # $t2 = A + 4 * numVals # $t3 = 1 if ptrA < A + 4*numVals # leave loop if ptrA >= A + 4*numVals # read *ptrA into $t4 # store $t4 out to *ptrB # increment ptrA (by 4 because ptr to int) # increment ptrB (by 4 because ptr to int) # jump to top of loop # after loop, return to address in $ra |
Body of loop (array access) is highlighted; loop components are not. |