Quelle est la différence entre la et li dans opcodes en MIPS?
Par exemple, dans ce 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
Je suis très confus au sujet de ce li (charge immédiate) et la(adresse de chargement) signifie vraiment?
Vous devez vous connecter pour publier un commentaire.
Ils sont assez similaires, car les deux sont (pour la plupart) utilisé pour le chargement immédiat des valeurs. Deux d'entre eux sont également pseudo-instructions, de sorte qu'il est vraiment à chaque assembleur qui les aide à déterminer exactement comment ils doivent fonctionner.
li
représente Charge Immédiate et est un moyen pratique de chargement immédiat jusqu'à 32 bits. Instructions commeaddi
etori
ne peut encoder 16 bits immédiates, de sorte que l'assembleur peut traduireli
en plusieurs instructions.Par exemple,
li $t0,0x12345678
pourrait devenir:Donc c'est juste une façon de vous sauver de l'écriture de ces deux instructions, et au lieu de laisser l'assembleur de travail que pour vous.
Il n'y a vraiment aucune raison pourquoi par exemple
li $t0, Message
ne serait pas pris en charge, puisque les étiquettes sont aussi immédiates, mais certains assembleurs peuvent ne pas accepter les étiquettes pourli
.la
représente l'Adresse de Chargement. Il peut être utilisé pour charger les constantes entières commeli
, par exemplela $t0,0x1234678
. Mais il travaille également avec des étiquettes:la $t0, Message # t0 = address of Message
.Certains assembleurs peuvent également vous permettre de faire des choses comme
la $t0, 8($t1) # t0 = t1 + 8
.Lorsque vous souhaitez utiliser
li
et lorsque vous souhaitez utiliserla
dépend du contexte. Si la valeur que vous êtes en train de charger va être utilisé comme une adresse que vous utilisez généralementla
de le charger, et sinon, vous devez généralement utiliserli
. Depuis qu'ils sont partiellement interchangeables c'est vraiment à vous, mais d'autres personnes pourraient trouver votre code étrange allure si vous utilisezla
tout le temps de chargement des constantes entières.