feat: Initial commit
This commit is contained in:
64
Laboratorio3/Esercizio5.asm
Normal file
64
Laboratorio3/Esercizio5.asm
Normal file
@@ -0,0 +1,64 @@
|
||||
.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
|
||||
Reference in New Issue
Block a user