web-dev-qa-db-fra.com

MIPS Assembly pour une boucle simple

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

Votre boucle va de 0 à 14, votre instruction bgt devrait donc être: bgt $t0,14,exit Je pense.

.

8
MrD

Vous ne définissez pas j ($ t0) à zéro avant la boucle.

2
Richard Pennington

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.

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