Files
Yggdrasil/docs/arm/PLA.md
T
2023-11-20 21:38:23 +01:00

4.7 KiB

Tailles

  • 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