2

以下は私のコードです:

.data
inputOne: .word 2 # Value 1
inputTwo: .word 3 # Value 2
counter: .word 0  # Adds the amount of times that we go through the loop
sum: .word 0      # Where the result of the addition goes
random: .word 0


.text
main:

    lw $t2, inputOne  # Load 2 into register t2
    lw $t3, inputTwo  # Load 3 into register t3
    lw $t4, counter   # Load 0 into register t4
    lw $t5, sum       # Load 0 into register t5
    lw $t7, random
    topOfLoop:        # Start of the loop
    beq $t4, $t2, bottomOfLoop  # Until t4 is equal to t2, the loop will continue
    addi $t5, $t5, 3  # Adds 3 to register t5 ( Sum) 
    addi $t4, $t4, 1  # Adds 1 to register t5 (Counter)
    j topOfLoop       # Jumps to the top of the loop
    bottomOfLoop:     # End of the loop 
    sw $t7, 0($t5)

これを MIPS で実行すると、次のエラーが表示されます。

Exception occurred at PC=0x0040005c
Unaligned address in store: 0x00000006

私が間違っていることを教えてくれる人はいますか?

ありがとう

4

2 に答える 2

2

何をしようとしているのかわかりませんが、store the value of at the addresssw $t7, 0($t5)のように読み取ります。前のコードから判断すると、メモリ アドレスではなく、スカラー値 (合計の結果) です。$t7$t5 + 0$t5

合計の結果を「合計」で示されるメモリ位置に保存したい場合は、 を実行する必要がありますsw $t5, sum

于 2013-09-19T03:56:06.947 に答える
1

MIPS は、他のほとんどのアーキテクチャと同様に、アラインされていないアクセスを許可しません。あなたの場合、アドレスを $t5 にロードした後、sumアドレスに 3 を追加すると、アドレスがずれます (以前は 4 の倍数だった場合、または一般的には 4n + 1 とは異なる値でした)。したがって、アドレス $t5 に値を格納すると例外が発生します

lw $t5, sum       # Load 0 into register t5
...
addi $t5, $t5, 3  # Adds 3 to register t5 ( Sum) 
...
sw $t7, 0($t5)

新しい計算値を $t7 が指すアドレスに格納する場合は、次のようにする必要があります。

sw $t5, 0($t7)

タイトル通り$t5~$t7を格納したい場合は$zeroで追加

add $t7, $t5, $zero

またはマクロを使用します

move $t7, $t5

上記のものに正確に展開されます

于 2013-09-19T04:18:45.390 に答える