Je pratiquais la conversion de code C en langage d'assemblage MIPS et j'ai du mal à comprendre l'utilisation de move
et li
dans l'affectation des variables.
Par exemple, pour implémenter la ligne C suivante dans MIPS:
int x = 0;
Si je le comprends bien (j'en doute fortement, cependant), cela ressemble à ces deux travaux dans l'assembleur MIPS:
move $s0, $zero
li $s0, $zero
Ai-je tort? Quelle est la différence entre ces deux lignes?
L'instruction move
copie une valeur d'un registre à un autre. L'instruction li
charge une valeur numérique spécifique dans ce registre.
Pour le cas spécifique de zéro, vous pouvez utiliser le zéro constant ou le registre zéro pour obtenir cela:
move $s0, $zero
li $s0, 0
Il n'y a pas de registre qui génère une valeur autre que zéro, donc vous devez utiliser li
si vous voulez un autre nombre, comme:
li $s0, 12345678