la
pseudolyszt.net couvre la et d'autres instructions RISC-V plus en détail.
Description
la charge l'adresse de quelque chose dans un registre. Cette adresse est un emplacement mémoire, et la valeur stockée à cet emplacement est une chose distincte. Le nom signifie load address (charger l'adresse).
Lorsque vous réservez des données en mémoire, vous leur donnez un nom comme arr ou msg, ce qui vous évite de suivre des numéros d'adresses bruts. Ce nom est une étiquette, un substitut lisible pour une adresse mémoire. La ligne suivante charge l'adresse marquée par l'étiquette arr dans t0. Elle fournit l'emplacement où le tableau commence et ne lit pas le contenu du tableau.
la t0, arr
Les instructions de chargement et de stockage (lw, sw et les autres) prennent une adresse contenue dans un registre. Avant de pouvoir lire ou écrire des données nommées, leur adresse doit être dans un registre, et la l'y place. La lecture de la valeur nécessite deux instructions. la trouve où se trouvent les données, et lw lit ce qui s'y trouve.
Le manuel RISC-V décrit auipc comme l'instruction permettant de construire des adresses relatives au pc. Il indique qu'un auipc suivi d'un chargement ou d'un stockage avec un décalage de 12 bits peut atteindre n'importe quelle adresse de données relative au pc sur 32 bits.
Une adresse et son contenu diffèrent de la même manière qu'un pointeur et une valeur diffèrent. Une fois l'adresse dans un registre, vous accédez aux éléments individuels en y ajoutant des décalages. L'exemple charge l'adresse d'un morceau de texte dans a0, ce qui est ce que le service d'impression de chaîne requiert. Il faut lui indiquer où se trouve le texte, et il lit le texte à partir de là. la est une pseudo-instruction que l'assembleur construit à partir de quelques instructions réelles.
Se développe en
auipc rd, hi(label) addi rd, rd, lo(label)
L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.
Exemple
.data msg: .string "hi" .text la a0, msg # a0 = address of msg
