.data wVet: .space 50 wRes: .space 1 charact: .byte 'a' mex_prompt: .asciiz "Inserire caratteri\n" mex_occ: .asciiz "Occorrenze: " .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 puntatore la $t0, wVet # punta a inizio vettore add $t1, $t0, $t5 # indirizzo finale lb $t2, charact move $t4, $0 conta_occorrenze: lb $t3, ($t0) bne $t3, $t2, prox_chr # salto se non è un minimo addi $t4, $t4, 1 # memorizzo il nuovo minimo prox_chr: add $t0, $t0, 1 # incremento puntatore bne $t0, $t1, conta_occorrenze # smetto di saltare quando ho iterato su tutti i caratteri # stampo ultimo messaggio la $a0, mex_occ li $v0, 4 # id della syscall print_str syscall move $a0, $t4 li $v0, 1 syscall fine: li $v0, 10 syscall .end main