2

この C コードを MIPS に変換したかったのです。

C コード:

f = A[B[h-g]]

と と仮定しh > gますB[h-g] > 0hgfは整数です。

また、fが register $s0gto $s1htoに割り当てられているとし$s2ます。

A->$s6B->のベースアドレス$s7

これが私の試みです:

sub $t0, $s2, $s1                   
mult $t0, $t0, 4                     
lw $t0, $t0($s7)           
mult $t0, $t0, 4           
sw $s0, $t0($s6)
4

1 に答える 1

1

最後の行を除けば、見栄えはよく、おそらく次のようになります。

lw $s0, $t0($s6)

特に asm の場合は、常にコードにコメントを付ける必要があることに注意してください。

sub $t0, $s2, $s1         ; t0 = h - g          
mult $t0, $t0, 4          ; t0 = (h - g) * sizeof(int) = byte index into B
lw $t0, $t0($s7)          ; t0 = B[h - g]
mult $t0, $t0, 4          ; t0 = B[h - g] * sizeof(int) = byte index into A
lw $s0, $t0($s6)          ; s0 = A[B[h - g]]

また、常にコードをテストする必要があることに注意してください。これには、 SPIMなどのシミュレーターを使用することをお勧めします。

于 2012-02-06T10:15:52.610 に答える