感覺。。實現一下還是有點意義的。。
用的是mips指令集,不造是不是過時了。。
然後參考資料:
實現上不敢用保留暫存器,因為用完貌似需要恢復原暫存器的值,所以全部都用臨時暫存器的值
然後遇到了幾個問題:
一、變數的定義
主要是在資料段裡幹,資料段用.data標識
然後定義方式是"變數名: .變數型別 初始值"
eg.a:.word 4
二、輸入輸出
設定好$v0和$a0的值,然後用syscall就可以了
如何設定引數見參考資料
三、新語法
li即load immediate,載入常數
la即load address,載入位址,主要是.data段裡面的位址
四、調式
基本只能靠靜態差錯
不過可以通過看暫存器的值來判斷錯誤出現的地方,比如在中間將乙個無關的暫存器設成乙個特定的值,程式錯的時候直接看那個暫存器的值判斷程式有沒有執行到當前位置
其他的就沒什麼了吧?
主要貼下**。。
.data
size:.word 100#max size
array:.space 404
space:.asciiz " "
.text
.globl main
main:
#input
li $v0,5
syscall
sw $v0,size
sll $t6,$v0,2
sub $t7,$t6,4
li $t1,0
input:
li $v0,5
syscall
sw $v0,array($t1)
addi $t1,4
li $t0,0
slt $t0,$t1,$t6
beq $t0,1,input
#sort
li $t1,0
for1:
li $t2,0
for2:
add $t3,$t2,4
lw $t4,array($t2)
lw $t5,array($t3)
#if array[i]>array[i+1]
li $t0,0
slt $t0,$t5,$t4
bne $t0,1,endif
#swap
sw $t5,array($t2)
sw $t4,array($t3)
endif:
addi $t2,4
li $t0,0
slt $t0,$t2,$t7
beq $t0,1,for2
addi $t1,4
li $t0,0
slt $t0,$t1,$t6
beq $t0,1,for1
#output
li $t1,0
output:
li $v0,1
lw $a0,array($t1)
syscall
li $v0,4
la $a0,space
syscall
addi $t1,4
li $t0,0
slt $t0,$t1,$t6
beq $t0,1,output
jr $ra
彙編 實現氣泡排序 講解
有乙個首位址為a的n字陣列,編寫程式採用氣泡排序使該陣列中的數按照從大到小的次序整序。資料儲存在a的陣列中 即記憶體中 我們需要利用氣泡排序實現從大到小排序。description data segment use16 a dw 8,16 41,22 50n equ a 2 data ends de...
彙編 氣泡排序
在emu8086除錯過 assume cs code,ds data data segment array dw 49,38,65,97,76,13,27 要排序的數 count dw array 2 獲取排序數目 data ends code segment start mov ax,data m...
彙編 氣泡排序。。。
最近在學習彙編,也發現自己好長時間沒寫部落格了,就更新乙個昨天用彙編寫的氣泡排序吧 上個星期五開始學的彙編,寫的較挫,望見諒 有bug還望提出,一起討論 data segment buf db 10,4,6,55,30,90,78,88,69 n buf data ends code segment...