simone.o
03-04-2004, 14:37
Ciao,
ho un problema con un semplice programmino in assembler (processore mips simulato con lo spim).
L'esercizio richiede all'utente di inserire 15 numeri che andranno memorizzati in un vettore di 15 posizioni. Il mio codice è il seguente....non so perchè ma dopo il secondo numero che immetto il programma si blocca...cosa sbaglio?
.data
stringa_input: .asciiz "Inserisci un intero\n"
vettore: .word 0:15 # Riservo 15 word di spazio in memoria per il vettore
.text
.globl main
main:
li $t0, 0 # Imposto a 0 il registro $t0 che contiene l'INDICE DI POSIZIONE DELL'ARRAY
li $t1, 0 # Imposto a 0 il registro $t1 che contiene il NUMERO APPENA INSERITO DALL'UTENTE
chiedi_input: # Dichiaro la funzione che chiede un intero in input fino a che non sono 15
la $a0, stringa_input # Carico in $a0 l'indirizzo di memoria della sringa stringa_input
li $v0, 4 # Carico nel registro $v0 il paramentro 4 per stampare la stringa
syscall
li $v0, 5 # Carico nel registro $v0 il parametro 5 per prendere in input un intero
syscall
move $t1, $v0 # Sposto da $v0 a $t1 il valore appena immesso dall'utente
sw $t1, vettore($t0) # Metto il valore contenuto in $t1 nel vettore alla posizione puntata dall'indice $t0
addi $t0, $t0, 1 # Sommo 1 all'indice del vettore contenuto in $t0
mul $t0, $t0, 4 # Moltiplico per 4 l'indice del vettore per andare alla posizione successiva nell'array
ble $t0, 14, chiedi_input # Salta alla funzione chiedi_input e continua a chiedere un intero finchè $t0 è <= 15
li $v0, 10 # Carico in $v0 il parametro 10 per terminare
syscall
ho un problema con un semplice programmino in assembler (processore mips simulato con lo spim).
L'esercizio richiede all'utente di inserire 15 numeri che andranno memorizzati in un vettore di 15 posizioni. Il mio codice è il seguente....non so perchè ma dopo il secondo numero che immetto il programma si blocca...cosa sbaglio?
.data
stringa_input: .asciiz "Inserisci un intero\n"
vettore: .word 0:15 # Riservo 15 word di spazio in memoria per il vettore
.text
.globl main
main:
li $t0, 0 # Imposto a 0 il registro $t0 che contiene l'INDICE DI POSIZIONE DELL'ARRAY
li $t1, 0 # Imposto a 0 il registro $t1 che contiene il NUMERO APPENA INSERITO DALL'UTENTE
chiedi_input: # Dichiaro la funzione che chiede un intero in input fino a che non sono 15
la $a0, stringa_input # Carico in $a0 l'indirizzo di memoria della sringa stringa_input
li $v0, 4 # Carico nel registro $v0 il paramentro 4 per stampare la stringa
syscall
li $v0, 5 # Carico nel registro $v0 il parametro 5 per prendere in input un intero
syscall
move $t1, $v0 # Sposto da $v0 a $t1 il valore appena immesso dall'utente
sw $t1, vettore($t0) # Metto il valore contenuto in $t1 nel vettore alla posizione puntata dall'indice $t0
addi $t0, $t0, 1 # Sommo 1 all'indice del vettore contenuto in $t0
mul $t0, $t0, 4 # Moltiplico per 4 l'indice del vettore per andare alla posizione successiva nell'array
ble $t0, 14, chiedi_input # Salta alla funzione chiedi_input e continua a chiedere un intero finchè $t0 è <= 15
li $v0, 10 # Carico in $v0 il parametro 10 per terminare
syscall