mips實現氣泡排序
阿新 • • 發佈:2020-12-31
.data .align 4 Array: .space 200 # welcome page LF: .asciiz "\n" welcome:.asciiz " ======================================= * * * 輸入n個數字,氣泡排序後輸出* * * ======================================= " tips: .asciiz "請輸入陣列元素個數n:" msg1: .asciiz "請輸入陣列元素: " msg2: .asciiz " " msg3: .asciiz "\n排序後結果: " .text .globl main main: # welcome介面 li $v0, 4 la $a0, welcome syscall # 換行顯示 li $v0, 4 la $a0, LF # 輸出換行LF syscall # 輸出整數n提示資訊 li $v0, 4 la $a0, tips syscall #接收元素個數n li $v0, 5 syscall # addi $v0,$zero,-1 move $s0, $v0 addi $s0,$s0,-1 # addi $s0,$zero,6 addi $t0,$zero,0 # 讀入陣列 inputArray: li $v0,4 la $a0,msg1 syscall li $v0,5 syscall add $t1,$t0,$zero sll $t1,$t0,2 add $t3,$v0,$zero sw $t3,Array ( $t1 ) addi $t0,$t0,1 slt $t1,$s0,$t0 beq $t1,$zero,inputArray la $a0,Array addi $a1,$s0,1 #a1=6 # 讀入陣列後執行氣泡排序 jal buble_sort # 把氣泡排序後的結果輸出 li $v0,4 la $a0,msg3 syscall la $t0,Array #s0=5 add $t1,$zero,$zero # 輸出陣列 printArray: lw $a0,0($t0) # 將輸入資訊放到a0 這個暫存器上 li $v0,1 syscall li $v0,4 la $a0,msg2 syscall addi $t0,$t0,4 addi $t1,$t1,1 slt $t2,$s0,$t1 beq $t2,$zero,printArray li $v0,10 syscall # 氣泡排序 buble_sort: # a0 = 陣列首地址 # a1 = 陣列大小 add $t0,$zero,$zero #counter1( i )=0 loop1: addi $t0,$t0,1 # i++ bgt $t0,$a1,endloop1 # if t0 > a1, goto endloop1,else goto next line add $t1,$a1,$zero # counter2 = size = 陣列元素個數 loop2: bge $t0,$t1,loop1 # branch to loop1 if $t0 >= $t1 如果t0>=t1,就去執行loop1 addi $t1,$t1,-1 # j-- mul $t4,$t1,4 # t4 + a0=Array[j] addi $t3,$t4,-4 # t3 + a0 = Array[j-1] add $t7,$t4,$a0 # t7 = Array[j] add $t8,$t3,$a0 # t8 = Array[j-1] lw $t5,0($t7) lw $t6,0($t8) bgt $t5,$t6,loop2 # 交換t5,t6 sw $t5,0($t8) sw $t6,0($t7) j loop2 endloop1: jr $ra