In pratica dalla traccia ne ho dedotto che il nuovo scopo fosse quello di ordinare il vettore in ordine crescente.
.globl main
.data
vettore: .word 0:100
stringa: .asciiz "IL VETTORE ORDINATO E': "
Nswitch: .asciiz "IL NUMERO DI SCAMBI EFFETTUATI E': "
.text
main:
move $t0, $zero #inizializzo indice vettore
li $s0, 0
lettura:
li $v0, 5
syscall
move $t1, $v0 #leggo intero da tastiera
beq $t1,$zero, precontrollo
sw $t1, vettore($t0)
addi $t0, $t0, 4
j lettura
precontrollo:
li $s1, 0
subi $s4, $t0, 4
li $t4, 0 #indice dei pari
li $t5, 4 #indice dei dispari
controllo:
bgt $t5, $s4, prestampa #se l'indice dei dispari è maggiore della dimensione del vettore esco
lw $t6, vettore($t4)
lw $t7, vettore($t5)
sub $t8, $t6, $t7 #metto la sottrazione tra elemento pari ed elemento dispari
bgtz $t8, switch
addi $t4,$t4,4
addi $t5,$t5,4
j controllo
switch:
li $s1, 1
sw $t6, vettore($t5)
sw $t7, vettore($t4)
addi $t4,$t4,4
addi $t5,$t5,4
addi $s0, $s0, 1
j controllo
prestampa:
bnez $s1, precontrollo
addi $t3, $t3, 0
li $v0, 4
la $a0, stringa
syscall
stampa:
li $v0,1
lw $a0, vettore($t3)
syscall
li $v0, 11
li $a0, 32
syscall
beq $t3, $s4, fine
addi $t3, $t3, 4
j stampa
fine:
li $v0, 11
li $a0, 13 #carriage return
syscall
li $v0, 4
la $a0, Nswitch
syscall
li $v0,1
move $a0, $s0
syscall
li $v0, 10
syscall
Perchè non mi funziona il carriage return?