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
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.