View Full Version : Bubble Sorte in MIPS
Qualcuno mi aiuta a modificare questo bubble sort in MIPS in modo da funzionare per un vettore di 6 elementi e per far si che stampi il vettore ordinato.
.text
.globl main
main:
li $a0,10 #parameter n
sll $a0,$a0,2 #number of bytes in array A
outer:
sub $t0,$a0,8 #$t0: j-1
li $t1,0 #no swap yet
inner:
lw $t2,A+4($t0) #$t2<--A[j]
lw $t3,A($t0) #$t3<--A[j-1]
bgt $t2,$t3,no_swap #A[j]<=A[j-1]?
sw $t2,A($t0) #A[j-1]<--$t2 \move bubble
sw $t3,A+4($t0) #A[j]<--$t3 /$t2 upwards
li $t1,1 #swap occurred
no_swap:
sub $t0,$t0,4 #next array element
bgez $t0,inner #more?
bnez $t1,outer #did we swap?
li $v0,10 #exit
syscall
.data
A: .word: 4,6,5,8,2,3,5,1,7,9
mips l'ho fatto in architettura dei processori come esame all'uni...ma onestamente non sono così freschi i ricordi
ma non basta che modifichi la seguente riga:
li $a0,10 #parameter n
se vuoi un vettore di sei elementi fai:
li $a0,6
ho guardato il programma molto al volo ma $a0 dovrebbe fungere da contatore della lunghezza del vettore. Infatti a ogni ciclo lo decrementa:
sub $t0,$a0,8 #$t0: j-1
spero di non aver detto boiate
se magari potresti provarlo e dirmi se funziona mi faresti un enorme piacere
così magari vedi l'errore che da
in pratica il programma dovrà fare questo
Il programma dovrà
definire un'area di memoria array che conterrà un vettore numerico generico
un'area di memoria array che conterrà il vettore ordinato
(opzionale: stampa a video del vettore ordinato)
comq xbubbax e kuntz87 sono sempre io
.data
A: .byte 4,6,5,8,1,3,10,2,7,9
.text
.globl main
main:
li $s0,10 #parameter n
li $t0,0 # $t0 fa da contatore per il ciclo outer
la $a1,A # in $a1 indirizzo dell'array
outer:
li $t1, 0 #$t1 contatore ciclo interno
li $t5, 0 #$t5 per vedere se c'è stato swap
inner:
add $t4,$a1,$t0 # in $t4 indirizzo A[i]
lb $t2,0($t4) # $t2<--A[i]
add $t4,$a1,$t1 # in $t4 indirizzo A[j]
lb $t3,0($t4) #$t3<--A[j]
bgt $t2,$t3,no_swap #A[i]>A[j]?
sb $t2,0($t4) #A[j]<--$t2 \move bubble
add $t4,$a1,$t0
sb $t3,0($t4) #A[i]<--$t3 /$t2 upwards
li $t5,1
no_swap:
addi $t1,$t1,1 # j = j + 1
bne $t1,$s0,inner # j = 10?
beqz $t5,endsort # niente swap, si puo' uscire
addi $t0,$t0,1 # i = i + 1
bne $t0,$s0,outer # i = 10?
endsort:
li $t0,0 # contatore per stampa numeri
print:
add $t4,$a1,$t0
lb $a0,0($t4)
li $v0,1
syscall
addi $t0,$t0,1
bne $t0,$s0,print
li $v0,10 #exit
syscall
ho usato byte perché con la direttiva word spim dava errore, non ricordo come si carica una word e il mio collegamento a internet penoso non mi contente di verificare come si fa :rolleyes:
ricordo anche io la parola chiave word, chissà come mai non va...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.