4.9 KiB
4.9 KiB
Tailles
Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent changer pour d'autres architecture
| Nom | Taille |
|---|---|
| Nibble | 4 bits |
| Byte | 8 bits |
| Halfword | 16 bits |
| Word | 32 bits |
| Double word | 64 bits |
Bases
Decimal
{digits}
Exemple: ex: 154
Hexadecimal
0x_{hex_digits} &{hex_digits}
Exemple: 0x9A &9A
Octal
0{octal_digits} 8_{octal_digits}
Exemple: 0232 8_232
Binary
2_{binary_digits} 0b{binary_digits}
Exemple: 2_10011010 0b10011010
Directives
EQU
- La directive EQU assigne une constante numérique au nom symbolique name
- La directive EQU définit une constante, appelée constante d'assemblage (assembly-time constant)
MAX_TEMP EQU 99
BUFFER_SIZE EQU 20*16
MOV r0, #MAX_TEMP ; remplace MOV r0, #99
MOV r1, #BUFFER_SIZE ; remplace MOV r1, #320
GBLx
- La directive GBLA déclare une variable globale arithmétique initialisée à 0
- La directive GBLL déclare une variable globale logique initialisée à
{FALSE} - La directive GBLS déclare une variable globale de type chaîne de caractères initialisés comme une chaîne vide ""
EXPORT & GLOBAL
- La directive EXPORT déclare à l'éditeur des liens que le nom symbolique peut-être référencé
- Dans un autre objet
- Dans un autre fichier
- La directive GLOBAL est un synonyme
AREA Example, CODE, READONLY
EXPORT DoAdd ; Export the function name
; DoAdd to be used by
; external modules.
DoAdd ADD r0, r0, r1
EXTERN & IMPORT
- La directive EXTERN informe l'assembleur que le nom symbolique n'est pas défini dans le fichier courant
- Le nom symbolique symbole est traité comme une adresse
- Sa valeur est définie lors de l'opération d'édition des liens
- Avant l'opération d'édition des liens, sa valeur est zéro
AREA Example, CODE, READONLY
EXTERN __C_INITIALIZE ; If C++library linked, gets
; the adress of __C_INITIALIZE
LDR r0, __C_INITIALIZE ; In not linked, adress is zeroed
CMP r0, #0 ; Test if zero
BEQ noCLinked ; Branch on the result
DCB
- La directive DCB
- Réserve un ou plusieurs bytes en mémoire
- définit la valeur initiale de ces positions mémoires
- Lors de l'exécution du programme (runtime), les valeurs de ces positions mémoires peuvent être changées
nbChar DCB 24, 32
cString DCB "C_string", 0
Warning
Si la directive DCB est suivie par une instruction, l'usage de la directive ALIGN est indispensable
DCW
- La directive DCW
- Réserve un ou plusieurs halfword (16bits) en mémoire à une adresse paire
- Définit la valeur initiale de ces positions mémoires
number EQU 10
data DCW -255, 2*number
Warning
Si la directive DCW est suivie par une instruction, l'usage de la directive ALIGN est indispensable
DCD
- La directive DCD
- Réserve un ou plusieurs word (32 bits) en mémoire à une adresse multiple de 4
- Définit la valeur initiale de ces positions mémoires
data1 DCD 1, 5, 20 ; Defines 3 words containing
; decimal values 1,5,and 20
data2 DCD data1 + 4 ; Defines 1 word containing 4 +
; the address of the label data1
SPACE
- La directive SPACE réserve un bloc mémoire initialisé à zéro
- La taille du bloc mémoire est exprimée en byte
AREA MyData, DATA, READWRITE
buffer SPACE 255 ; Define 255 bytes of zeroed store
Warning
Si la directive SPACE est suivie par une instruction, l'usage de la directive ALIGN est indispensable
ALIGN & ORG
- La directive ALIGN aligne la position courante à un multiple de expr, en ajoutant si nécessaire des bytes de bourrage
label1 DCB 1 ; PC now misaligned
ALIGN ; Ensure that Func1 addresses
Func1 ; now aligned on 4-byte boundary
MOV r5, #0x5
... ... ; Code
MOV pc, lr ; Code
ALIGN 8 ; Now aligned on 8-byte boundary
rout2 ... ... ; Code
- La directive ORG fixe la valeur absolue de la position courante
ORG 0x4000 ; instructions start at addr 0x4000
MOV r5, #0x5
... ... ; Code
MOV pc, lr ; Code
ORG 0x8000 ; data start at addr 0x8000
Data1 DCD 12
Data2 DCD 0



