mips組合語言實現排序演算法,其實並不難。只要你掌握了基本的指令語句,並且熟悉c或c++相關演算法,即可輕鬆寫出來。對於mips組合語言還不太熟悉的夥伴,可以參考下面這篇部落格:
它的具體實現**如下:
``
````
****
****
****
****
****
**c++****
****
****
****
****
****
**#include
using namespace std;
int main()
}num[index] = num[i];
num[i] = max;
}for(i = 0; i < 10; i++)
cout<" ";
} **
****
****
****
****
****mips彙編****
****
****
****
****
****
**.text # **段 宣告
.globl main # globl指明程式的入口位址main
main: # 程式入口位址
la $a0,input_num_msg # 取字串首位址
li $v0,4
#4號功能呼叫,輸出字串
syscall
#系統呼叫,輸出字串
la $t6,array # $t6 是陣列首位址
move $t7,$zero
# $t7 是迴圈變數i
addi $t8,$zero,10
# $t8 是陣列長度
move $t9,$zero
# $t9 是迴圈變數j
input: # input**塊用於完成陣列元素的輸入
la $a0,input_int_msg # 取字串首位址
#列印字串,提示使用者輸入陣列的元素
li $v0,4
syscall
li $v0,5
syscall
move $t0,$t7
# 此處類似於c/c++中指標訪問陣列元素的方法
mul $t0,$t0,4
# 陣列元素所佔位元組數*迴圈變數+陣列的起始位址=陣列[迴圈變數]
addu $t1,$t0,$t6
# '無符號數字相加
sw $v0,0($t1) # ''把$v0的資料存入到$t1中,位址偏移量為0
addi $t7,$t7,1
# $t7 = $t7 +1 迴圈變數i+1
blt $t7,$t8,input # branch to input if $t7 < $t8
move $t7,$zero
# 完成輸入後將迴圈變數置為0,可作為下乙個迴圈的迴圈變數,以節省暫存器; $t7作為 i
loop1:
addu $t9,$t7,1
# 每次執行外層迴圈都將內層迴圈的迴圈變數置為i+1
mul $t0,$t7,4
#獲取a[i],作為max,即$t2 為max
addu $t1,$t0,$t6
lw $t2,0($t1) #偏移量,定址
move $t5,$t1
#初始化最後一次和max交換的j的值
loop2:
move $t0,$t9
#獲取a[j]
mul $t0,$t0,4
addu $t4,$t0,$t6
lw $t3,0($t4)
bge $t2,$t3,skip # 如果a[i] > a[j],跳轉到skip**塊
lw $t2,0($t4) # 否則就執行下面這兩句,賦值
move $t5,$t4
#記錄下j的值
skip:
addi $t9,$t9,1
# 內層迴圈變數自增
blt $t9,$t8,loop2 # 且判斷是否還滿足迴圈條件,如果滿足,則跳轉到loop2
lw $t4,0($t1) # 如果不滿足,先進行賦值
sw $t4,0($t5)
sw $t2,0($t1) #'賦值
addi $t7,$t7,1
# 再將外層迴圈的迴圈變數自增
addi $t4,$t7,1
#且判斷是否還滿足迴圈條件
blt $t4,$t8,loop1 # 如果滿足,則跳轉到loop1
# 如果不滿足,則不跳轉,繼續執行下面的**
output:
la $a0,output_int_msg # 列印字串,提示使用者即將輸出程式
li $v0,4
syscall
move $t7,$zero
# 將迴圈變數置為0,用於下一迴圈,節省暫存器
print: # 實現列印陣列元素
move $t0,$t7
mul $t0,$t0,4
addu $t1,$t0,$t6
lw $a0,0($t1)
li $v0,1
syscall
la $a0,seperate # 分隔陣列元素
li $v0,4
syscall
addi $t7,$t7,1
blt $t7,$t8,print
# 如果滿足迴圈條件,跳轉到print繼續執行迴圈
.data # 資料段宣告
array:.space 10
# 給array分配10個空間
input_num_msg:.asciiz "please enter 10 unsigned number:\n"
input_int_msg:.asciiz "please enter an unsigned integers to be sorted:\n"
output_int_msg:.asciiz "the sorted numbers are:\n"
seperate:.asciiz " "
當然,我的**裡的陣列長度已經固定為10。只要適當修改,就可以實現真正的選擇排序。——在源**中增加一段使用者輸入陣列長度的**語句即可。 用組合語言實現氣泡排序 基於MIPS指令系統
這是計組第乙個小實驗,實現從鍵盤輸入十個數字,並把它們按從大到小排序輸出。氣泡排序流程圖 c語言實現氣泡排序 void swap int a,int k void sort int a,int n data sortarray space 40 separate asciiz line asciiz...
組合語言實現氣泡排序
氣泡排序 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...
mips組合語言筆記
因為乙個課程涉及mips組合語言,自己做一些筆記。部落格還有乙個b站的,查mips能查到那個文章。注意 彙編使用的位址也是邏輯位址,有偏移量,通過硬體進行轉化。比如乙個 la操作就會進行對記憶體的好幾次訪問 具體暫存器操作貼乙個圖 1 往a0裡寫資料。3種方式。1 寫立即數 li a0 1 2 暫存...