Verschil tussen move en li in MIPS-assembler

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

3 + 14 =

Other episodes