Syntaxe
ADRL {cond} register,expression
|
Paramètres
Nom |
Description |
cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
register |
Ce paramètre permet d'indiquer l'opérande recevant le résultat |
expression |
Ce paramètre permet d'indiquer une expression de programme relatif ou d'un registre relatif évalué avec une fausse adresse de mot aligné sur 255 octets ou une adresse de mot aligné sur 1020 octets. |
Description
Cette instruction permet d'effectuer le chargement d'adresse large de programme relatif ou de registre relatif dans un registre.
Algorithme
Remarques
- Fonctionnement général de ADRL : L'instruction ADRL est une pseudo-instruction générant une adresse sur 32 ou 64 bits en utilisant deux instructions
ADR successives. Elle permet d'accéder à des adresses plus éloignées que ce qu'une simple ADR pourrait atteindre.
- Encodage et exécution sous forme de deux ADR : Étant donné que ADRL n'est pas une instruction machine native, elle est décomposée en deux instructions
ADR lors de l'assemblage. L'une charge une partie basse de l'adresse, et l'autre ajoute une partie haute pour obtenir l'adresse complète.
- Usage principal pour accéder à des adresses éloignées : Comme l'instruction ADR est limitée à une portée de ± Mo (avec un
déplacement de 21 bits en mode ARM64), ADRL permet d'atteindre des adresses dépassant cette intervalle en concatenant deux ADR.
- Différence avec LDR pour charger des adresses : Contrairement à LDR, chargeant directement une valeur mémoire, ADRL ne fait qu'ajouter un offset au PC pour
calculer une adresse. Cela peut être plus rapide dans certains cas, mais nécessite que l'adresse cible soit dans un intervalle atteignable.
- Utilisation en mode 32 bits et 64 bits : En ARM32, ADRL utilise les registres R0-R15 et peut générer des adresses sur 32 bits. En AArch64 (ARM64),
ADRL fonctionne avec les registres X0-X30, permettant d'accéder à des adresses 64 bits avec une plus grande portée.
- Contraintes et alignement : L'adresse cible doit respecter certaines contraintes d'alignement. En ARM64, les déplacements utilisés par ADR doivent être
multiples de 4 (pour 32 bits) ou de 8 (pour 64 bits), ce qui peut nécessiter des ajustements avec NOP dans certains cas.
- Impact sur les performances : L'utilisation de ADRL est plus optimisée que LDR avec une valeur immédiate lorsque l'adresse est accessible par un simple
calcul PC-relative. Cependant, si l'adresse est trop éloignée, un accès mémoire via LDR peut parfois être plus rapide.
Dernière mise à jour : Mardi, le 6 décembre 2016