web-dev-qa-db-ja.com

単純なforループ用のMIPSアセンブリ

この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:
7
user977154

ループは0から14になるため、bgt命令は次のようになります。bgt $t0,14,exit おもう。

8
MrD

ループの前にj($ t0)をゼロに設定しないでください。

2

また、実行しているMIPSシミュレーターもわかりませんが、定数ではないものがあり、それらをレジスターに割り当てるように要求されます。したがって、bgt Rsrc1、Src2、labelのように、通常src2に整数を入力すると、コンピューターはそれを変換しますが、add $ v0、$ t1、3を実行するとエラーが発生することがあります。これは、addを変換しないためです。アディ。 mulと同じです。私のSPIMシミュレーターでは許可されていません。

0
Meech
.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
0
Raul Batalha