使用MIPS汇编语言实现冒泡排序:
.data
array : .word 10,23,33,5,20,77,13,28
.align 2
msg1: .asciiz " Array: "
msg2: .asciiz "\n Sorted"
.text
######################################
#$t1 : array pointer
#$t2: array length, 8
#$t3: iteration num
#$s2: a flag, count the print number, 为1时表示还未排序,等于2时表示已经排序,结束程序
######################################
li $s2,0
main:
li $v0,4
la $a0,msg1
syscall
li $t2,8
li $t3,1
la $t0,array
loop:
lw $t1,0($t0)
move $a0,$t1
li $v0,1
syscall
li $v0,11
la $a0,' '
syscall
addi $t0,$t0,4 #计算基址偏移量
addi $t3,$t3,1
ble $t3,$t2,loop
addi $s2,$s2,1
beq $s2,1,Sort
li $v0,10
syscall
Sort:
li $t1,-1 # i
li $t2,-1 # j
la $t0,array
loop1:
addi $t1,$t1,1
li $t2,-1
loop2:
addi $t2,$t2,1
sll $t2,$t2,2
add $t0,$t0,$t2
lw $s1,0($t0)
lw $s2,4($t0)
ble $s1,$s2,next #if a[j] > a[j+1] ,the swap
sw $s2,($t0)
sw $s1,4($t0)
next:
la $t0,array
srl $t2,$t2,2
end2:
ble $t2,6,loop2
end1:
ble $t1,6,loop1
exit:
li $v0,4
la $a0,msg2
syscall
b main