Wat is het verschil tussen la en li in opcodes in MIPS?

Bijvoorbeeld in deze code:

#display message
li $v0, 4
la $a0, Message
#promt user to enter name
li $v0, 8 
la $10, username
li $a1, 20
syscall
#display the name
li $v0, 4
la $a0, userName
syscall

Ik ben erg in de war over wat li(onmiddellijk laden) en la(adres laden) werkelijk betekenen.


Antwoord 1, autoriteit 100%

Ze lijken redelijk op elkaar, aangezien beide (meestal) worden gebruikt voor het laden van directe waarden. Beide zijn ook pseudo-instructies, dus het is aan elke assembler die ze ondersteunt om te bepalen hoe ze precies moeten werken.


listaat voor Load Immediate en is een handige manier om een ​​direct bestand van maximaal 32 bits te laden. Instructies zoals addien orikunnen alleen 16-bits instants coderen, dus de assembler kan liin meerdere instructies vertalen.

Bijvoorbeeld li $t0,0x12345678kan worden:

lui $at, 0x1234 
ori $t0, $at, 0x5678        

Het is dus gewoon een manier om u te behoeden voor het schrijven van die twee instructies, en in plaats daarvan door de assembler dat voor u uit te laten werken.

Er is echt geen reden waarom b.v. li $t0, Messagewordt niet ondersteund, omdat labels ook onmiddellijk zijn, maar sommige assemblers accepteren mogelijk geen labels voor li.


lastaat voor Load Address. Het kan worden gebruikt om integer-constanten te laden, net als li, b.v. la $t0,0x1234678. Maar het werkt ook met labels: la $t0, Message # t0 = address of Message.
Sommige assemblers kunnen je ook dingen laten doen als la $t0, 8($t1) # t0 = t1 + 8.


Wanneer je lizou gebruiken en wanneer je lazou gebruiken, hangt af van de context. Als de waarde die u laadt als adres wordt gebruikt, gebruikt u doorgaans laom deze te laden, en anders gebruikt u doorgaans li. Omdat ze gedeeltelijk uitwisselbaar zijn, is het aan jou, maar andere mensen zullen je code misschien vreemd vinden als je de hele tijd lagebruikt om integer-constanten te laden.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

three + 4 =

Other episodes