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

Bug fix .file 1 \"arrcopy.c\" .globl source .data .align 2 source: .word 3 .word

ID: 3843948 • Letter: B

Question

Bug fix

   .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) Debugging MIPS Debug the loop written in arrcp.s. The program is suppose to copy integers from memory address in $a0 to memory address in $a1, until it reads a zero value. The number of integers copied (up to but not including the zero value) should be returned so stored into $v0. Q1. How many bugs are there? Q2. How do you fix the bug(s)? Q3. What is your strategy to finding the bug(s)? Fix the code so it work in arrcp.s.

Explanation / Answer

1. Count $v0 is not initialized.
2. Zero integer is counted.(1 and 2 fixed by initializing $v0 to -1)
3. Source pointer ($a0) incremented by 1, not 4.
4. Destination pointer ($a1) incremented by 1. not 4.

.data
source: .word 3, 1, 4, 1, 5, 9, 0
dest: .word 0, 0, 0, 0, 0, 0, 0
var A=-1
countmsg: .asciiz " values copied. "

.text

main: la $a0,source
la $a1,dest

loop: mov $v0, A
   lw $v1, 0($a0) # read next word from source
addiu $v0, $v0, 1 # increment count words copied
sw $v1, 0($a1) # write to destination
addiu $a0, $a0, 1 # advance pointer to next source
addiu $a1, $a1, 1 # advance pointer to next dest
bne $v1, $zero, loop# loop if word copied not zero

loopend:
move $a0,$v0 # $a0 <- count
jal prin # print it

la $a0,countmsg # $a0 <- countmsg
jal prins # print it

li $a0,0x0A # $a0 <- ' '
jal prinsy # print it

finish:
li $v0, 10 # Exit the program
syscall

prin:
li $v0, 1
syscall # Print it
jr $ra # Return

prins:
li $v0, 4
syscall # Print it
jr $ra # Return

prinsy:
li $v0, 11   
syscall # Print it
jr $ra # Return

Fixed Code :

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote