.data wVet: .space 50 wRes: .space 1 mex_prompt: .asciiz "Inserire caratteri\n" mex_result: .asciiz "\nValore minimo: " .text .globl main .ent main main: la $t0, wVet # punta a inizio vettore li $t1, 0 # inizializzo contatore # stampo primo messaggi la $a0, mex_prompt li $v0, 4 # id della syscall print_str syscall # lettura stringa. a quanto pare posso solo fare una read_chr ciclo_read: # syscall read li $v0, 12 syscall # il risultato è in v0 sb $v0, ($t0) add $t0, $t0, 1 # incremento puntatore beq $v0, '\n', fine_lettura # smetto di saltare quando ho raggiunto un newline add $t1, $t1, 1 # incremento contatore (sapendo che non è un \n) beq $t1, 50, fine_lettura # controllo di non uscire dal buffer b ciclo_read fine_lettura: move $t5, $t1 # salvo in $t5 la lunghezza della stringa # resetto contatore e puntatore la $t0, wVet # punta a inizio vettore li $t1, 0 # inizializzo contatore lb $t2, ($t0) # memorizzo il valore minimo dentro t2, e inizializzo con primo carattere cerca_min: lb $t3, ($t0) ble $t3, 0x20, prox_chr # salto se è un carattere speciale bgt $t3, $t2, prox_chr # salto se non è un minimo move $t2, $t3 # memorizzo il nuovo minimo prox_chr: add $t0, $t0, 1 # incremento puntatore add $t1, $t1, 1 # incremento contatore bne $t1, $t5, cerca_min # smetto di saltare quando ho iterato su tutti i caratteri # stampo messaggio la $a0, mex_result li $v0, 4 # id della syscall mex_result syscall # stampo carattere minimo move $a0, $t2 li $v0, 11 syscall # termino programma li $v0, 10 syscall .end main