2013-04-14 17 views
6

Próbuję zapisać dane wprowadzane przez użytkownika do tablicy, ale gdy używam polecenia sw, pojawia się błąd "adres sklepu nie jest wyrównany dla słowa związanego". Moim celem jest odczytanie z 10 liczb całkowitych z tablicy, ale po wprowadzeniu pierwszej cyfry pojawia się błąd przy poleceniu sw. Nie wiem, co robię źle, spędziłem kilka godzin próbując to rozgryźć. Każda pomoc zostanie bardzo doceniona i oznaczona jako przydatna.MIPS - Przechowywanie danych w tablicy w danych wprowadzanych przez użytkownika

 .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: 

To zadziałało dla mnie. Nie wiem, dlaczego to nie działa powyżej

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

main: 

    li $v0, 5 
    syscall 
    sw $v0, list 

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

Odpowiedz

5

Spróbuj przydzielenie miejsca na tablicy przed przydzielić miejsca na ciąg w segmencie danych:

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

jeśli przeznaczyć ciąg pierwsza tablica może rozpocząć się w adresie, który nie jest podzielna przez 4 i ołowiu do słowa błędów wyrównania

1

Spróbuj tego:

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

To nic nie zmieni . Dziękuje za odpowiedź. –

+1

Czy pojawił się błąd kompilacji? '.p2align 2' ma wyrównać następujący kod/dane na adres o potędze 2 (2^2 = 4 tutaj). Co się stanie, jeśli dodasz jedną do trzech dodatkowych znaków do ciągu 'mess'? To może również poprawić wyrównanie 'tablicy'. –

1
  • magazyn powinien być

    sw $ v0, array ($ t0)

  • Wymień la $t0, 0 przez li $t0, 0

  • Ustaw tablicę powyżej mess

Ponadto, po osiągnięciu 10 pozycji, ponownie uruchomić odczyt i zastąpienie wcześniejszych wartości.

0

Właściwa Array wprowadzania kodu

.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

Użyj formatowania Markdown, aby było bardziej czytelne. I proszę dodaj wyjaśnienia, aby pomóc w walce z błędnym przekonaniem, że StackOverflow jest usługą darmowego pisania kodu. – Yunnosch