Je suis un débutant en programmation depuis quelques mois et je me suis contenté de bidouiller un code d'assemblage. J'ai rencontré un problème avec mon code MIPS et j'ai réduit le problème à ma boucle après l'impression de la valeur de chaque variable. Il imprime uniquement 1 à la suite d'une entrée entière. Essentiellement, je suis en train de convertir ceci:Convertir du code C en MIPS - Fonction factorielle itérative
int fac(int k) {
int i, f = 1;
for (i = 1; i <= k; i++) {
f = f * i;
}
return f;
}
à ceci:
fac:
move $t4, $t0 #$t0 is the input from the user and $t4 is k in the C code
li $t1, 1 #$t1 is f in the C code, initialising it to 1
li $t2, 1 #$t2 is i in the C code, declaring it as 1
loop:
ble $t2, $t4, end_loop #i<=k, end the loop
mul $t1, $t1, $t2 #f=f*i
addi $t2, $t2, 1
j loop
end_loop:
Je l'ai testé le code en mettant dans un tas de déclarations d'impression et a été en mesure d'obtenir t4 $ et t0 $, comme input mais à la fois $ t1 et $ t2 restent à 1 après la boucle. Dois-je sauter dans la boucle?
Tout cela pourrait être facilement résolu avec un débogueur, donc je vais juste laisser avec un indice: vous avez trompé le but de la condition de la boucle for dans votre code d'assemblage. Et un conseil général: jetez un oeil aux conventions sur le codage d'assemblage et en particulier sur l'assemblage MIPS. – Paul