Προς το περιεχόμενο

quicksort se mips


Aelg3

Προτεινόμενες αναρτήσεις

Δημοσ.

Re paidia iparxei kanenas pou mporei na me voithisei?

Prepei na kanw ena programma se mips assembly pou na dexetai mia akolouthia arithmwn kai me ton algorithmo quicksort na tous vazei se auksousa seira.

Δημοσ.

eurander

 

Efxaristw gia to endiaferon.

 

Pantou kollaw :)

 

Den exw ksana kanei assembly kai den tin paw katholou.

Mas exei valei afti tin ergasia kai mono an tin kanw exw elpides gia to mathima.

 

Elpizw na voithisei kapoios

Δημοσ.

Βασικα πρεπει να την ξεκινησεις μονος σου και να μας πεις συγκεκριμενα προβληματα. Δε μπορουμε να σου λυσουμε την ασκηση απο την αρχη οπως καταλαβαινεις. Εξαλλου ειναι εναντια και στους κανονες του forum. Οποτε προσπαθησε να την ξεκινησεις και εδω ειμαστε.

Δημοσ.

Afta eini oti ekana alla den doulevei.

Den mporw na katalavw giati.

Den kanei sorting katholou tous arithmous.

 

-------------------------------------------

QuickSort

-------------------------------------------

 

.data

prompt:

.ascii "Please enter integers. \n"

.asciiz "Entering zero terminates the input. \n"

output_msg:

.asciiz "The sorted array is: \n"

newline:

.asciiz "\n"

array:

.word 200

 

.text

.globl main

main:

la $a0,prompt # prompt user for input

li $v0,4

syscall

 

la $t0,array

read_more:

li $v0,5 # read a number

syscall

sw $v0,($t0) # store it in the array

beqz $v0,exit_read

addu $t0,$t0,4

b read_more

exit_read:

# prepare arguments for procedure call

la $a1,array # a1 = lo pointer

move $a2,$t0

subu $a2,$a2,4 # a2 = hi pointer

jal qsort

 

la $a0,output_msg # write output message

li $v0,4

syscall

 

la $t0,array

write_more:

lw $a0,($t0) # output sorted array

beqz $a0,exit_write

li $v0,1

syscall

la $a0,newline # write newline message

li $v0,4

syscall

addu $t0,$t0,4

b write_more

exit_write:

 

li $v0,10 # exit

syscall

 

 

qsort:

subu $sp,$sp,16 # save registers

sw $a1,0($sp)

sw $a2,4($sp)

sw $a3,8($sp)

sw $ra,12($sp)

 

ble $a2,$a1,done # end recursion if hi <= lo

 

move $t0,$a1

move $t1,$a2

 

lw $t5,($t1) # t5 = xsep

 

lo_loop: #

lw $t2,($t0) #

bge $t2,$t5,lo_loop_done # LO while loop

addu $t0,$t0,4 #

b lo_loop #

lo_loop_done:

 

subu $t1,$t1,4 # hi = hi-1

hi_loop:

ble $t1,$t0,sep_done #

lw $t3,($t1) #

blt $t3,$t5,hi_loop_done # HI while loop

subu $t1,$t1,4 #

b hi_loop #

hi_loop_done:

 

sw $t2,($t1) #

sw $t3,($t0) # x<=>x[j]

b lo_loop #

 

sep_done:

move $t1,$a2 #

lw $t4,($t0) #

lw $t5,($t1) # x <=>x[hi]

sw $t5,($t0) #

sw $t4,($t1) #

 

move $a3,$a2 # save HI for the second call

move $a2,$t0 #

subu $a2,$a2,4 # set hi as i-1

jal qsort

 

move $a1,$a2 #

addu $a1,$a1,8 # set lo as i+1

move $a2,$a3

jal qsort

done:

lw $a1,0($sp) # restore registers

lw $a2,4($sp)

lw $a3,8($sp)

lw $ra,12($sp)

addu $sp,$sp,16

 

jr $ra

  • 2 χρόνια αργότερα...
Δημοσ.

εμένα μου τρέχει πάντως αυτό που έγραψες και κάνει σωστό sorting.

 

που είναι το πρόβλημα??

 

μήπως δεν χρησιμοπείς σωστά το SPIM??

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...