2012-03-22 11 views
1

私はMARS MIPSシミュレータを使用しており、Digital Lab Simを使用しています。エラー:「ストアアドレスがワード境界に整列していません」

私のコードの目的は、Digital Lab Simに16進数で0〜15の数字を表示することです。

 .data 
digitos: .word 0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x67,0x77,0x7F,0x39,0x3F,0x79,0x71 
contador: .word 16 
     .text 

main: 

    la $t0,0xFFFF0011 

    la $a0,contador  
    lw $t1,0($a0) 

    li $t9,0  


    la $t2, digitos  



loop: 
    lw $t3,0($t2) 
    sw $t3, 0($t0)   
    addi $t9,$t9,1 
    addi $t2,$t2,4 

    blt  $t9,$t1,loop 

命令la $t0,0xFFFF0011がエラーによって責任を負うものです:

私はこのエラー

Runtime exception at 0x00400024: store address not aligned on word boundary 0xffff0011 

を取得していますこれは私が使用しているコードです。 0xFFFF0011は左のLEDを制御し、0xFFFF0010は右のLEDを制御します。

ここは面白い部分です。 0xFFFF0010を使用すると、コードは期待通りに機能しますが、0xFFFF0011を使用すると機能しません。

私は間違っていますか?

答えて

5

その行でエラーが発生していますか?私は、エラーが実際にここで起こっていると思う:

sw $t3, 0($t0) 

問題は、あなたが(あなたがswを使用しているため)ワードアラインではないアドレスに単語を保存しようとしているということです。 0xFFFF0011はワードで整列されていません。 0xFFFF0010が機能する理由は、であるためです。

ワードの長さは4バイトであるため、有効なワード整列アドレスは0xFFFF0010,0xFFFF0014,0xFFFF0018などです。間にあるものはすべてワードで整列されません。

あなたはsbswからそれを変更することで、この問題を解決することができるはずです。

sb $t3, 0($t0) 

バイトを格納するワード境界整列アドレスを必要としないので、これは動作します。

編集:明確にするために、4で割り切れるものがワード単位でアラインされています。

+0

ありがとうございます。それが私の問題を解決しました。ただ1つの簡単な置換:) – Favolas

+0

ありがとう!あなたがそれを知っている時は明白です〜私はちょうどmipsを始めます –

関連する問題