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