1

MARS MIPS シミュレーターと Digital Lab Sim を使用しています。

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

このエラーが発生しています

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

これは私が使用しているコードです:

        .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エラーの原因は命令にあります。0xFFFF0011 は左の LED を制御し、0xFFFF0010 は右の LED を制御します。

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

私は何を間違っていますか?

4

1 に答える 1

9

その行でエラーが発生していると確信していますか? エラーは実際にここで発生していると思います:

sw  $t3, 0($t0)

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

1 ワードの長さは 4 バイトであるため、有効なワード アライメント アドレスは 0xFFFF0010、0xFFFF0014、0xFFFF0018 などです。その間にあるものはワード アライメントではありません。

swからに変更することで、これを修正できるはずですsb

sb  $t3, 0($t0)

これが機能するのは、バイトを格納するのにワード アラインされたアドレスが必要ないためです。

編集:明確にするために、ワードアラインされたアドレスは4で割り切れるものです。

于 2012-03-22T21:47:51.630 に答える