2013-04-14 8 views
6

Sto provando a memorizzare l'input dell'utente in un array, ma quando uso sw ottengo un errore "indirizzo del negozio non allineato al limite della parola". Il mio obiettivo è quello di leggere in 10 numeri interi dalla matrice, ma dopo aver inserito la prima cifra ottengo un errore nel comando sw. Non so cosa sto facendo male ho passato un paio d'ore cercando di capirlo. Qualsiasi aiuto sarà molto apprezzato e contrassegnato come utile.MIPS - Memorizzare gli input nell'array dall'input dell'utente

 .data 

mess: .asciiz " Enter 10 numbers to be stored in the array. " 
array: .space 40 #10 element integer array 
    .globl main 
    .text 
main: 
    jal read 
    b done 
read: 
    la $t0, 0 #count variable 
    b readLoop 
    jr $ra 

readLoop: 
    beq $t0, 40, read #branch if equal to 40, 10 items 
    li $v0, 4  #Print string 
    la $a0, mess  #load prompt 
    syscall 
    li $v0, 5  #read int 
    syscall 
    sw $v0, array  #store input in array ERROR HERE 
    addi $t0, $t0, 4 #add by 4 to count 
    b readLoop 
print: 

done: 

Questo ha funzionato per me. Non so il motivo per cui non funziona sopra

.data 
list: .space 16 
.globl main 
.text 

main: 

    li $v0, 5 
    syscall 
    sw $v0, list 

    move $a0, $v0 
    li $v0, 1 
    syscall 

risposta

5

Prova allocazione dello spazio per l'array prima di allocare lo spazio per la stringa nel segmento dati:

array: .space 40 #10 element integer array 
    mess: .asciiz " Enter 10 numbers to be stored in the array. " 

se si alloca la stringa prima la matrice potrebbe iniziare a un indirizzo che non è divisibile per 4 e piombo a una parola errore di allineamento

1

Prova questo:

... 
.p2align 2 
array: .space 40 #10 element integer array 
... 
+0

Questo non ha cambiato nulla .Grazie per rispondere però. –

+1

Hai ricevuto qualche errore di compilazione? '.p2align 2' dovrebbe allineare il seguente codice/dati su un indirizzo che è una potenza di 2 (2^2 = 4 qui). Cosa succede se aggiungi uno o tre caratteri extra alla stringa 'mess'? Questo potrebbe correggere anche l'allineamento di 'array'. –

1
  • Il negozio dovrebbe essere

    sw $ v0, array ($ t0)

  • Sostituisci la $t0, 0 di li $t0, 0

  • Impostare la matrice sopra mess

Inoltre, quando si raggiunge 10 articoli, si riavvia la lettura e sovrascrivere i valori precedenti.

0

corretta Array Input Codice

.data 
    myarray:.space 40  
    st:.asciiz "Enter the 10 Elements" 

.text  
    li $v0,4 
    la $a0,st 
    syscall 
    jal fun 
    li $v0,10 
    syscall 

fun:   
    li $v0,5 
    syscall 
    beq $t0,40,exit 
    sw $v0,myarray($t0) 
    add $t0,$t0,4 
    j fun 

exit: 
    jr $ra 
+1

Utilizzare la formattazione del contrassegno per renderlo più leggibile. E per favore aggiungi qualche spiegazione, per aiutare a combattere l'idea sbagliata che StackOverflow è un servizio di scrittura di codice libero. – Yunnosch