這是計組第乙個小實驗,實現從鍵盤輸入十個數字,並把它們按從大到小排序輸出。
氣泡排序流程圖
c語言實現氣泡排序
void swap(int a, int k)
void sort(int a, int n) }}
.data
sortarray:
.space 40
separate:
.asciiz " "
line:
.asciiz "\n"
.text
.globl main
main:
la $t0, sortarray #陣列起始位址
add $t1, $zero, $t0
#指向陣列起始位址
addi $t8, $t0, 40
#陣列終止位址
addi $t3, $zero, 0
#輸入計數器
inputdata:
li $v0, 5
#輸入整型資料/read_int
syscall
sw $v0, 0($t1) #存入陣列
addi $t1, $t1, 4
addi $t3, $t3, 1
#輸入計數器加1
slti $s0, $t3, 10
#計數器小於10,繼續輸入
bnez $s0, inputdata
addi $t3, $zero, 0
#外層迴圈計數器i = 0
outloop:
add $t1, $zero, $t0
#每次進入排序迴圈,讓$t1指向陣列起始位址
slti $s0, $t3, 10
#i < 10,進入內層迴圈
beqz $s0, print
#i > 10, 退出迴圈,列印排序後的陣列
addi $t4, $t3, -1
#j = i - 1
inloop:
slti $s0, $t4, 0
#j < 0,退出內層迴圈
bnez $s0, exitinloop
sll $t5, $t4, 2
#$t5 = j * 4
add $t5, $t1, $t5
#$t5 = 陣列起始位址 + j * 4
lw $t6, 0($t5) #$t6 = a[j]
lw $t7, 4($t5) #$t7 = a[j + 1]
slt $s0, $t6, $t7
#a[j] < a[j + 1],交換
bnez $s0, swap
addi $t4, $t4, -1
#j--
j inloop #繼續內層迴圈
swap:
sw $t6, 4($t5) #$t6 = a[j + 1]
sw $t7, 0($t5) #$t7 = a[j]
addi $t4, $t4, -1
#j--
j inloop #繼續內層迴圈
exitinloop:
addi $t3, $t3, 1
#i++
j outloop #進入外層迴圈
print:
lw $a0, 0($t0) #要列印的資料存到$a0
li $v0, 1
#系統呼叫/print_int
syscall
la $a0, separate #列印空格
li $v0, 4
#系統呼叫/print_string
syscall
addi $t0, $t0, 4
bne $t0, $t8, print
#在陣列終止位址前繼續列印
la $a0, line #陣列列印完後換行
li $v0, 4
#系統呼叫/print_string
syscall
j exit
#退出程式
exit:
li $v0, 10
#系統呼叫/退出程式
syscall
實驗結果
pcspim模擬器顯示
組合語言實現氣泡排序
氣泡排序 author jrh 2011.7.10 assume ds data data segment a dw 1,4,2,5,7,9,6,3 data ends code segment start mov ax,data mov ds,ax mov cx,8 dec cx lop1 pus...
彙編 組合語言實現氣泡排序 loop指令實現
1 2 迴圈程式設計3 loop指令實現4 氣泡排序5 for int i 0 i6 for int h 0 j j 10 11 12datas segment 13 buffer db 12,3,6,23,54,121,99,100,46,23 待排序的10個數 14datas ends 15co...
組合語言 氣泡排序
在資料區,給出了學生人數及組合語言課程的成績,請將成績排序並儲存在原資料區。assume cs cseg,ds dseg,ss sseg sseg segment stack dw 10h dup sseg ends dseg segment dw 123,5,9,11,33,6,9,76,100,...