2013-04-14 110 views
6

我想用戶輸入存儲到一個數組,但是當我使用SW我得到一個錯誤「存儲地址的綁定字未對齊」。我的目標是從陣列10個整數讀,但之後,我輸入的第一個數字,我得到的SW命令錯誤。我不知道我在做什麼錯我花了幾個小時試圖弄清楚。任何幫助將不勝感激,並顯着有用。MIPS - 存儲整數數組根據用戶輸入

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

這對我有效。我不知道爲什麼它沒有上述

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

main: 

    li $v0, 5 
    syscall 
    sw $v0, list 

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

回答

5

爭取你的數組分配空間,你爲你的數據片段串分配空間之前:

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

如果分配字符串第一陣列可以在由4和鉛是不是整除的地址開始一個字對準誤差

1

工作試試這個:

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

這並沒有改變什麼儘管如此,感謝你的迴應。 –

+1

您是否收到編譯錯誤? '.p2align 2'應該對齊上這的2(2^2 = 4在這裏)的功率的地址下面的代碼/數據。如果你給「mess」字符串添加一到三個額外字符會怎麼樣?這也可以修正'array'的對齊方式。 –

1
  • 這家店應該是

    SW $ V0,數組($ T0)

  • 替換la $t0, 0作者:li $t0, 0

  • 設置上面mess

而且數組,當你達到10項,重新啓動閱讀並覆蓋之前的值。

0

正確的陣列輸入代碼

.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

請使用markdown格式來提高可讀性。並請添加一些解釋,以幫助打擊StackOverflow是免費代碼編寫服務的誤解。 – Yunnosch

相關問題