Je dois traduire ce code C en assemblage MIPS. Voici le code C:
int tmp = 0;
for (int j = 0; j < 15; ++j)
tmp = tmp * 2 + 3
Ceci est mon code d'assemblage MIPS. Est-ce une traduction correcte? Si vous voyez des erreurs, j'aimerais vraiment savoir.
# 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:
Votre boucle va de 0 à 14, votre instruction bgt devrait donc être: bgt $t0,14,exit
Je pense.
.
Vous ne définissez pas j ($ t0) à zéro avant la boucle.
Je ne sais pas non plus quel simulateur MIPS vous utilisez, mais je sais que certaines d’entre elles ne sont pas des constantes et elles exigent que vous les affectiez à des registres. Donc, comme bgt Rsrc1, Src2, label, normalement si vous mettez un entier dans src2, l’ordinateur le traduira mais je sais que pour certains, vous obtiendrez une erreur en ajoutant $ v0, $ t1, 3 car il ne traduira pas addi. Même avec mul. Je sais que mon simulateur SPIM ne le permet pas.
.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