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