bubblesort: # prologue addiu $sp, $sp, -24 sw $ra, 4($sp) sw $fp, 0($sp) move $fp, $sp sw $s0, 8($sp) sw $s1, 12($sp) sw $s2, 16($sp) sw $s3, 20($sp) # setup move $s0, $a0 # s0 = &array move $s1, $a1 # s1 = size move $s2, $zero # i =0 loop1: bge $s2, $s1, exit # if i==size break move $s3, $zero # j =0 loop2: addi $s3, $s3, 1 # ++j bge $s3, #s1, end_inner_loop # if j+1 == size break slli $t0, $s3, 2 # t0 = (j+1)*4 addu $t0, $t0, $s0 # t0 = &array + (j+1)*4 lw $t1, -4($t0) # t1 = array[j] lw $t2, 0($t0) # t2 = array[j+1] nop blt $t1, $t2, loop2 # if array[j] < array[j+1] goto loop2 addiu $a0, $t0, -4 # a0 = &array[j] move $a1, $t0 # a1 = &array[j+1] jal swap # swap() nop j loop2 # goto loop2 nop end_inner_loop: j loop1 # goto loop1 addi $s2, $s2, 1 # ++i exit: # epilogue lw $s3, 20($sp) lw $s2, 16($sp) lw $s1, 12($sp) lw $s0, 8($sp) lw $fp, 0($sp) lw $ra, 4($sp) addiu $sp, $sp, 24 jr $ra nop