ARM Optimization/Asm File Syntax/fr
From Wiki.ooo4kids.org
|
Syntaxe d'un fichier source (assembleur) |
Retourner à Amélioration des performances sur machine de type ARM
Structure d'une ligne de code
La structure générale d'une ligne de code est :
<étiquette>: <code instruction> <opérande,opérande,...>
L'étiquette est un nom qui permet de représenter l'adresse de l'instruction en mémoire.
Elle peut être omise, mais le code de l'instruction doit être précédé d'au moins un espace. Il est préférable d'utiliser des tabulations pour une meilleure lisibilité du programme.
Le code de l'instruction est un mnémonique. S'il y a plusieurs opérandes, ils sont séparés par des virgules.
Opérandes immédiats(directs)
Pour certaines opérations, un des deux opérandes peut être une valeur constante au lieu d'un registre. Cette constante est indiquée par un "#" qui précède la valeur.
Ces valeurs peuvent être en base 16: il faut ajouter "0x" apres "#" et avant la valeur pour une constante en hexadécimal et "0b" pour une constante binaire.
Dans le jeu d’instruction ARM, une valeur immédiate doit être codée sur 12 bits.
Les valeurs qui peuvent être données sont n'importe quelle valeur sur 32 bits dont tous les 1 sont dans 8 positions adjacentes alignées sur une frontière de deux bits, c'est-à-dire des valeurs de la forme :
- (0 à 255) x 22n, avec 0 ≤ n < 16 ([0-255] codé sur 8 bits, n codé sur 4 bits).
Une ligne de code utilisant une opérande direct ressemblera à ça:
exemple: <mnémonique> <registre de destinations>,<premier opérande: registre>,<second opérande: #6>
Pointeurs
En cours.
Commentaires
Tout ce qui suit le caractère @ (jusqu'à la fin de la ligne) est considéré comme un commentaire.
Directives pour l'assembleur
Les directives ne sont pas des instructions. Elles ont essentiellement pour rôle de donner des indications sur le fichier exécutable attendu.
Par exemple, la directive .fill permet de réserver de la place en mémoire pour des données.
Sa syntaxe est :
<étiquette>: .fill <nb>,<taille>[,<valeur>]
Par exemple :
tab: .fill 4,1 @réserve de la place pour 4 octets tab: .fill 8,4, @0xFF réserve de la place pour 8 entiers initialisés à 0x000000FF
Cette directive demande d'initialiser <nb> emplacements de <taille> octets avec la valeur <valeur>.
Si les arguments <taille> et/ou <valeur> sont omis, ils sont fixés par défaut à <taille> = 1 et <valeur> = 0.
Les directives .int et .byte permettent de réserver de la place et d’initialiser des entiers ou des octets :
<étiquette>: .int <val1>[,<val2>[,<val3>...]]
Par exemple :
liste: .byte 0, 1, 2 @réserve de la place pour 3 octets initialisés à 0, 1 et 2.
La directive .asciz permet de réserver de la place et d’initialiser les octets qui codent une chaîne de caractères (y compris le 0 final). Par exemple :
chaine: .asciz "aha" @réserve 4 octets initialisés à 0x61, 0x68, 0x61, 0.
La directive .equ permet de définir une constante symbolique. Le symbole sera remplacé par sa valeur dans le code source avant assemblage. La syntaxe est :
.equ <nom>, <valeur>
Exemple :
.equ N,10
Les sources dont proviennent les informations disponibles sur cette page sont mentionnées: ici.
pedro_m 13:50, 30 July 2011 (CEST)