refactor for common usage
This commit is contained in:
1 parent
d4dbc07c20
commit
49c891377b
36 files changed
+163
-40
No files matched your search
@@ -0,0 +1,166 @@
|
||||
# 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}
|
||||
|
||||
<u>Exemple:</u>
|
||||
ex: 154
|
||||
|
||||
## Hexadecimal
|
||||
0x_{hex_digits}
|
||||
&{hex_digits}
|
||||
|
||||
<u>Exemple:</u>
|
||||
0x9A
|
||||
&9A
|
||||
|
||||
## Octal
|
||||
0{octal_digits}
|
||||
8_{octal_digits}
|
||||
|
||||
<u>Exemple:</u>
|
||||
0232
|
||||
8_232
|
||||
|
||||
## Binary
|
||||
2_{binary_digits}
|
||||
0b{binary_digits}
|
||||
|
||||
<u>Exemple:</u>
|
||||
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)
|
||||
|
||||
```armasm
|
||||
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
|
||||
``` armasm
|
||||
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
|
||||
``` armasm
|
||||
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](#Tailles) 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
|
||||
``` armasm
|
||||
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](#ALIGN-amp-ORG)*** est indispensable
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## DCW
|
||||
- La directive *DCW*
|
||||
- Réserve un ou plusieurs [halfword (16bits)](#Tailles) en mémoire à une adresse paire
|
||||
- Définit la valeur initiale de ces positions mémoires
|
||||
``` armasm
|
||||
number EQU 10
|
||||
data DCW -255, 2*number
|
||||
```
|
||||
>[!warning]
|
||||
>Si la directive ***DCW*** est suivie par une instruction, l'usage de la directive ***[ALIGN](#ALIGN-amp-ORG)*** est indispensable
|
||||
|
||||

|
||||
|
||||
## DCD
|
||||
- La directive *DCD*
|
||||
- Réserve un ou plusieurs [word (32 bits)](#Tailles) en mémoire à une adresse multiple de 4
|
||||
- Définit la valeur initiale de ces positions mémoires
|
||||
```armasm
|
||||
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
|
||||
```armasm
|
||||
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](#ALIGN-amp-ORG)*** est indispensable
|
||||
|
||||

|
||||
|
||||
## ALIGN & ORG
|
||||
- La directive *ALIGN* aligne la position courante à un multiple de *expr*, en ajoutant si nécessaire des bytes de bourrage
|
||||
```armasm
|
||||
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
|
||||
|
||||
```armasm
|
||||
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
|
||||
```
|
||||
|
||||
Reference in new issue
Block a user