Quelle est l'instruction pseudo pour la division en MIPS? Comme il y a une instruction pseudo de multiplication en MIPS "mul" qui rend la vie un peu plus facile. Je suis en train d'utiliser QT Spim.
Cordialement
Quelle est l'instruction pseudo pour la division en MIPS? Comme il y a une instruction pseudo de multiplication en MIPS "mul" qui rend la vie un peu plus facile. Je suis en train d'utiliser QT Spim.
Cordialement
Pour effectuer une division entière, vous pouvez utiliser div $t1, $t2, $t3
qui définira $t1
comme la division entière de $t2/$t3
, ou div $t1, $t2, imm
où imm est un immédiat.
De même, pour calculer le reste de la division entière, vous pouvez utiliser rem $t1, $t2, $t3
ou rem $t1, $t2, imm
Ces pseudo-instructions font essentiellement un div $t1, $t2
qui stocke les résultats dans les registres spéciaux LO
et HI
(pour le quotient et le reste) puis déplacent ces valeurs vers le registre cible au moyen de mfhi
et mflo
.
Pour effectuer une division en virgule flottante, vous devez utiliser les registres en virgule flottante de $f0 à $f31. Une fois que vous avez vos nombres en virgule flottante stockés dans certains de ces registres (correctement encodés en tant que nombres en virgule flottante, par exemple dans $f1
et $f2
), vous émettez une instruction div.s $f0, $f1, $f2
pour obtenir dans $f0
le résultat de $f1/$f2
. Maintenant, pour obtenir le reste, vous pouvez soustraire le résultat de la division avec la troncature du résultat. Par exemple:
li $a1, 20
mtc1 $a1, $f1
cvt.s.w $f1, $f1 # $f1 = 20
li $a1, 7
mtc1 $a1, $f2
cvt.s.w $f2, $f2 # $f2 = 7
div.s $f0, $f1, $f2 # $f0 = 20/7
trunc.w.s $f3, $f0
cvt.s.w $f3, $f3 # $f3 = trunc(20/7)
sub.s $f4, $f0, $f3 # $f4 = reste de 20/7
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.