Q1. Consider the following MIPS assembly code fragment. The sort
function implements bubble sort using a helper function swap.
Assume there are no syntax errors. But, there are 10 bugs in this code with respect to the
semantics of MIPS and runtime bugs. That is, there are exactly 10 lines of code that either
need to be modified or added to get this code working correctly.
• If an instruction needs to be modified, state the instruction as is and then state what
it should be modified to be.
• If an instruction needs to be added, state before which instruction it should be added
and the instruction to add.
1 # swap k and k+1 of an array where a0 is array addreess and a1 is k
2 swap :
3 add $t0 , $v1 , $zero #t0 = k
4 add $t0 , $v0 , $t0 #t0 = v[k]
5 lw $t1 , 0( $t0 ) # load v[k]
6 lw $s1 , 4( $t0 ) # load v[k+1]
7 sw $s1 , 0( $t0 ) #v[k] = v[k+1]
8 sw $t1 , 4( $t0 ) #v[k+1] = v[k]
9 jr $ra
10
11 # Bubble sort an array of ints with address a0 and length a1
12 sort :
13 addi $sp , $sp , 16 # make room for ints on stack
14 sw $s3 , 12( $sp )
15 sw $s2 , 8( $sp )
16 sw $s1 , 4( $sp )
17 sw $s0 , 0( $sp )
18 add $s2 , $a0 , $zero #s2 = a0 ( address of v array )
19 add $s3 , $a1 , $zero #s3 = a1 ( length of v array )
20 add $s0 , $zero , $zero #s0 = i = 0
21 for1tst :
22 slt $t0 , $s0 , $s3 #t0 = (s0 < s3)
23 beq $t0 , $zero , exit1
24 addi $s1 , $s0 , -1 #s1 = j = i-1
25 for2tst :
26 slti $t0 , $s1 , 0 #t0 = (s1 < 0)
27 bne $t0 , $zero , exit2 #go to exit2 if (s1 < 0)
28 sll $t1 , $s1 , 2 #t1 = j * 4
29 add $t2 , $s2 , $t1 #t2 = v + (j*4)
30 lw $t3 , 0( $t2 ) #t3 = v[j]
31 lw $t4 , 4( $t2 ) #t4 = v[j+1]
32 slt $t0 , $t4 , $t3 #t3 = v[j+1] < v[j]
33 beq $t0 , $zero , exit2 #go to exit2 if v[j+1] >= v[j]
34 add $v0 , $s2 , $zero #set args for swap proc
35 add $v1 , $s1 , $zero
36 j swap # call swap
37 addi $s1 , $s1 , -1 # decrement j
38 j for2tst # iterate inner loop
39 exit2 :
40 addi $s0 , $s0 , 1 # increment i
41 j for1tst # iterate outer loop
42 exit1 :
43 lw $s0 , 0( $sp )
44 lw $s1 , 4( $sp )
45 lw $s2 , 8( $sp )
46 lw $s3 , 12( $sp )
47 addi $sp , $sp , -16
48 jr $ra