このCコードをMIPSアセンブリに変換する必要があります。 Cコードは次のとおりです。
int tmp = 0;
for (int j = 0; j < 15; ++j)
tmp = tmp * 2 + 3
これは私のMIPSアセンブリコードです。正しい翻訳ですか?間違いを見つけたら、私は本当に知りたいです。
# tmp = $v0
# j = $t0
.globl main
main:
li $v0,0
loop:
bgt $t0,15,exit
addi $t0,$t0,1
mul $t1,$v0,2
add $v0,$t1, 3
j loop
exit:
ループは0から14になるため、bgt命令は次のようになります。bgt $t0,14,exit
おもう。
。
ループの前にj($ t0)をゼロに設定しないでください。
また、実行しているMIPSシミュレーターもわかりませんが、定数ではないものがあり、それらをレジスターに割り当てるように要求されます。したがって、bgt Rsrc1、Src2、labelのように、通常src2に整数を入力すると、コンピューターはそれを変換しますが、add $ v0、$ t1、3を実行するとエラーが発生することがあります。これは、addを変換しないためです。アディ。 mulと同じです。私のSPIMシミュレーターでは許可されていません。
.data
mensage: asciiz "Text Test"
newline: asciiz "\n"
.text
# tmp = $v0
# j = $t0
main:
li $t0,0
li $t1,0
li $t3,0
loop:
bgt $t0,15,exit
addi $t0,$t0,1
j loop
mul $t1,$t1,2
add $t3,$t1,3
exit:
li $v0,0
syscall