for (i = 0; i < 64; i++) {
A[i] = B[i] + C[i];
}
上記のCコードのMIPS命令は次のとおりです。
add $t4, $zero, $zero # I1 i is initialized to 0, $t4 = 0
Loop:
add $t5, $t4, $t1 # I2 temp reg $t5 = address of b[i]
lw $t6, 0($t5) # I3 temp reg $t6 = b[i]
add $t5, $t4, $t2 # I4 temp reg $t5 = address of c[i]
lw $t7, 0($t5) # I5 temp reg $t7 = c[i]
add $t6, $t6, $t7 # I6 temp reg $t6 = b[i] + c[i]
add $t5, $t4, $t0 # I7 temp reg $t5 = address of a[i]
sw $t6, 0($t5) # I8 a[i] = b[i] + c[i]
addi $t4, $t4, 4 # I9 i = i + 1
slti $t5, $t4, 256 # I10 $t5 = 1 if $t4 < 256, i.e. i < 64
bne $t5, $zero, Loop # I11 go to Loop if $t4 < 256
I8の場合、 sw
命令を命令に置き換えることはできませんaddi
か?すなわちaddi $t5, $t6, 0
$t6
のアドレスをにコピーするのと同じタスクを実行しません$t5
か?違いと、どちらをいつ使うのか知りたいです。指導についても同じことが言えlw
ます。
また、関連する質問かもしれませんが、MIPSはポインタをどのように処理しますか?
編集:addi $ t6、$ t5、0を変更しました。