次のアセンブリ コードは、私の教科書に記載されています。
Loop:
sll $t1, $t0, 2
add $t2, $a0, $t1
sw $zero, 0($t2)
addi $t0, $t0, 1
slt $t3, $t0, $a1
bne $t3, $zero, Loop
# return where we were
jr $ra
このコードから、2 つの質問があります。
最初の質問は、上から 2 行目についてです。命令sll
は左シフト論理であり、ビットを左にシフトします。シフト量が2なので、10進数で0000→0100=4となります。しかし、私は最初のループの後にそれを取得しません。これを左に 2 ずらすと 4 倍以上になりませんか??
2 番目の質問は、このコードを最適化できるかどうかです?? 私の意見でsll
は、コードの一部を変更および追加できますが、よくわかりません。任意のコメント??