Ik was aan het oefenen met het converteren van C-code naar MIPS-assembleertaal en ik heb problemen met het begrijpen van het gebruik van move
en li
in variabele toewijzing.
Bijvoorbeeld om de volgende C-regel in MIPS te implementeren:
int x = 0;
Als ik het goed begrijp (maar ik betwijfel dit ten zeerste), het lijkt erop dat beide werken in MIPS assembler:
move $s0, $zero
li $s0, $zero
Heb ik het mis? Wat is het verschil tussen deze twee regels?
Antwoord 1, autoriteit 100%
De move
instructie kopieert een waarde van het ene register naar het andere. De instructie li
laadt een specifieke numerieke waarde in dat register.
Voor het specifieke geval van nul, kun je de constante nul of het nulregister gebruiken om dat te krijgen:
move $s0, $zero
li $s0, 0
Er is echter geen register dat een andere waarde dan nul genereert, dus je zou li
moeten gebruiken als je een ander nummer wilt, zoals:
li $s0, 12345678