|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
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 |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jul 2006
Messaggi: 43
|
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 |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Mar 2007
Messaggi: 15
|
se magari potresti provarlo e dirmi se funziona mi faresti un enorme piacere
così magari vedi l'errore che da |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Mar 2007
Messaggi: 15
|
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) |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Mar 2007
Messaggi: 15
|
comq xbubbax e kuntz87 sono sempre io
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
Codice:
.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 ![]() ricordo anche io la parola chiave word, chissà come mai non va... Ultima modifica di recoil : 16-04-2007 alle 23:22. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:20.