Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

arrcopy.c ~~~~~~~~ #include <stdio.h> int source[] = {3, 1, 4, 1, 5, 9, 0}; int

ID: 3853214 • Letter: A

Question

arrcopy.c

~~~~~~~~

#include <stdio.h>

int source[] = {3, 1, 4, 1, 5, 9, 0};
int dest[10];

int main ( ) {
int k;
for (k=0; source[k]!=0; k++) {
   dest[k] = source[k];
}
printf ("%d values copied ", k);
return 0;
}

arrcopy.s

~~~~~~~~~~

   .file   1 "arrcopy.c"
   .globl   source
   .data
   .align   2
source:
   .word   3
   .word   1
   .word   4
   .word   1
   .word   5
   .word   9
   .word   0
   .rdata
   .align   2
$LC0:
   .ascii   "%d values copied "
   .text
   .align   2
   .globl   main
   .ent   main
main:
   .frame   $sp,24,$31       # vars= 0, regs= 1/0, args= 16, extra= 0
   .mask   0x80000000,-8
   .fmask   0x00000000,0
   subu   $sp,$sp,24
   sw   $31,16($sp)
   jal   __main
   la   $9,source
   lw   $2,0($9)
   move   $8,$0
   beq   $2,$0,$L8
   move   $7,$0
   la   $10,dest
$L6:
   addu   $8,$8,1
   sll   $3,$8,2
   addu   $5,$7,$9
   addu   $2,$3,$9
   addu   $6,$7,$10
   lw   $4,0($2)
   move   $7,$3
   lw   $3,0($5)
   #nop
   sw   $3,0($6)
   bne   $4,$0,$L6
$L8:
   la   $4,$LC0
   move   $5,$8
   jal   printf
   lw   $31,16($sp)
   move   $2,$0
   addu   $sp,$sp,24
   j   $31
   .end   main

   .comm   dest,40

(Exercise) Compiled C MIPs This exercise contains a function that does the same array copy functionality. However, now we wrote the code in C and used a cross compiler to automatically generate the MIPS code. You will find the original C code in arrcopy.c and auto-generated assembly in arrcopy.s. Now look in arrcopy.s to answer the following: Q4. Where is the source pointer stored originally? Q5. Where is the dest pointer stored originally? Q6. What instruction is used to load the address of source and dest pointers? Q7. Where does the loop to copy values start? (give line and the first instruction and/or label of where it is) Q8. Explain what each line in the loop is trying to do in the following format: Instruction add $4, $0, $0 (as an example) Purpose to do nothing Corresponding C x 0;

Explanation / Answer

Compiled C->MIPS
1.Where is the source pointer stored originally?
la $9,source # The source pointer

2.Where is the dest pointer stored originally?
la $10,dest # destination pointer

3.What instruction is used to load the address of source and dest pointers?
la is used to load the pointers, and addu is used to add offsets to the pointers

4.Where does the loop to copy values start?(give line # and the first instruction and/or label of where it is)
move $7,$3