0% ont trouvé ce document utile (0 vote)
39 vues17 pages

Introduction à l'assembleur ARM

Le document présente l'utilisation de l'assembleur ARM pour gérer des variables, y compris leur déclaration, assignation et allocation. Il explique comment accéder aux valeurs et adresses des variables, ainsi que la gestion des tableaux. Des exemples de code illustrent l'addition de valeurs et la copie de tableaux en mémoire.

Transféré par

azziz.terfaoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
39 vues17 pages

Introduction à l'assembleur ARM

Le document présente l'utilisation de l'assembleur ARM pour gérer des variables, y compris leur déclaration, assignation et allocation. Il explique comment accéder aux valeurs et adresses des variables, ainsi que la gestion des tableaux. Des exemples de code illustrent l'addition de valeurs et la copie de tableaux en mémoire.

Transféré par

azziz.terfaoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction à l’assembleur ARM:

utilisation de variables

bool arm = true;

GIF-1001 Ordinateurs: Structure et Applications


Jean-François Lalonde
Revenons à notre exemple d’addition
MOV R0, #0x1000 ; Adresse de la première valeur
LDR R1, [R0] ; Lecture de la première valeur dans R0
ADD R0, R0, #4 ; Adresse de la deuxième valeur
LDR R2, [R0] ; Lecture de la deuxième valeur dans R1
ADD R1, R1, R2 ; R1 = R1 + R2
ADD R0, R0, #4 ; Adresse du résultat
STR R1, [R0] ; Écriture du résultat en mémoire

• Pas pratique:
• d’avoir à connaître l’adresse des valeurs et du résultat

• d’avoir à utiliser deux instructions (MOV puis LDR) pour les


charger

• Solution?
• L’assembleur nous permet de donner un nom à des adresses
mémoires: ce sont les variables!
2 Façons
2
Variables assignées
• Déclarer une variable assignée (initialisée)

nom ASSIGNxx valeur

• nom: le nom de la variable

• ASSIGNxx: xx indique la taille en bits. Par exemple:


• ASSIGN8: variable de 8 bits

• ASSIGN32: variable de 32 bits

• valeur: la valeur de la variable


0X00000001
• exemple:

premiereValeur ASSIGN32 0x1


deuxiemeValeur ASSIGN32 0x2
3
Variables assignées
premiereValeur ASSIGN32 0x1
deuxiemeValeur ASSIGN32 0x2
troisiemeValeur ASSIGN32 0xABCDEF12

Little
endian
0x1000 01 00 00 00 02 00 00 00 12 EF CD AB
0x1010

premiereValeur troisiemeValeur

deuxiemeValeur

4
Accéder aux variables
sans
• Charger la valeur d’une variable MOV

• « Variante » de LDR: LDR Rd, nomDeLaVariable

; Charger la valeur de premiereValeur dans R1


LDR R1, premiereValeur

sans avoir besoin de savoir l'


addresse de la premièrevaleur

5
Accéder aux variables
• Charger la valeur d’une variable
• « Variante » de LDR: LDR Rd, nomDeLaVariable

; Charger la valeur de premiereValeur dans R1


LDR R1, premiereValeur
Après l’exécution de cette
instruction, R1 contiendra la
premiereValeur ASSIGN32 0x1 valeur 0x1.
deuxiemeValeur ASSIGN32 0x2
troisiemeValeur ASSIGN32 0xABCDEF12

0x1000 01 00 00 00 02 00 00 00 12 EF CD AB
0x1010

premiereValeur troisiemeValeur

deuxiemeValeur
6
Accéder aux variables
savoir l'@
• Charger l’adresse d’une variable
• « Variante » de LDR: LDR Rd, =nomDeLaVariable

; Charger l’adresse de premiereValeur dans R1


LDR R1, =premiereValeur

@ plutot
q le
contenu

7
Accéder aux variables
• Charger l’adresse d’une variable
• « Variante » de LDR: LDR Rd, =nomDeLaVariable

; Charger l’adresse de premiereValeur dans R1


LDR R1, =premiereValeur
Après l’exécution de cette
instruction, R1 contiendra la
premiereValeur ASSIGN32 0x1 valeur 0x1000.
deuxiemeValeur ASSIGN32 0x2
troisiemeValeur ASSIGN32 0xABCDEF12

0x1000 01 00 00 00 02 00 00 00 12 EF CD AB
0x1010

premiereValeur troisiemeValeur

deuxiemeValeur
8
Variables allouées
• Allouer une variable (réserve de l’espace mais ne lui assigne
pas de valeur): stocker resultat d'une opération mais je connais pas la valeur

nom ALLOCxx nombre

• nom: nom de la variable

• ALLOCxx: xx indique la taille en bits. Par exemple:


• ALLOC8: variable de 8 bits

• ALLOC32: variable de 32 bits

• nombre: le nombre d’éléments à réserver

• exemple:

; Résultat (on ignore sa valeur a priori)


resultat ALLOC32 1
9
Variables allouées
premiereValeur ALLOC32 1
deuxiemeValeur ALLOC32 1
troisiemeValeur ALLOC32 1

0x1000 FF FF FF FF FF FF FF FF FF FF FF FF
0x1010

premiereValeur troisiemeValeur

deuxiemeValeur

10
Assignation vs allocation
• nom ASSIGNxx valeur
• assigne une valeur à un espace mémoire

• parallèle avec le standard du C:


• c’est une définition (on définit une valeur précise).

• nom ALLOCxx nombre


• alloue un nombre d’espaces mémoire sans attribuer de
valeur.

• parallèle avec le standard du C:


• c’est une déclaration (on déclare une variable sans définir de
valeur).

11
Tableaux 6 oct
• Une variable peut indiquer plusieurs éléments
chaine ASSIGN8 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00
tableau ASSIGN32 0x12, 0x23
8 oct
tableauAlloue ALLOC32 3
12 oct
• Ici:
• chaine désigne un tableau assigné de 6 octets

• tableau désigne un tableau assigné de (2 x 4 = 8) octets

• tableauAlloue désigne un tableau alloué de (3 x 4 = 12)


octets

• Le nom du tableau « pointe » vers le premier octet de ce


tableau.

12
Tableaux Attention! Chaque élément du
tableau chaine possède 8 bits
car on a utilisé ASSIGN8.

chaine ASSIGN8 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00


tableau ASSIGN32 0x12, 0x23
tableauAlloue ALLOC32 3

0x1000 48 65 6C 6C 6F 00 12 00 00 00 23 00 00 00 FF FF
0x1010 FF FF FF FF FF FF FF FF FF FF

13
Tableaux
chaine ASSIGN8 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00
tableau ASSIGN32 0x12, 0x23
tableauAlloue ALLOC32 3

0x1000 48 65 6C 6C 6F 00 12 00 00 00 23 00 00 00 FF FF
0x1010 FF FF FF FF FF FF FF FF FF FF

chaine

tableau tableauAlloue

14
Exemple d’addition (avec variables)
• Comment représenter notre programme d’addition
en utilisant des variables?

; Valeurs stockées en mémoire section


premiereValeur ASSIGN32 0x1 Data
deuxiemeValeur ASSIGN32 0x2

; Résultat (on ne connait pas sa valeur a priori) Section


resultat ALLOC32 1 Data

LDR R1, premiereValeur ; charger la valeur de premiereValeur


LDR R2, deuxiemeValeur ; charger la valeur de deuxiemeValeur
ADD R1, R1, R2 ; R1 = R1 + R2
STR R1, resultat ; stocker R1 dans resultat
Section
code
sans MOV 15
;Reprenons l'exemple de l'addition de la démonstration précédente. Cette fois, plus besoin de connaître les adresses des
variables!

SECTION INTVEC
B main
SECTION CODE
main
LDR R1, premiereValeur ; charger la valeur de premiereValeur
LDR R2, deuxiemeValeur ; charger la valeur de deuxiemeValeur
; Question:
; - Que contiennent R1 et R2?
ADD R1, R1, R2 ; R1 = R1 + R2
; Question:
; - Quel est le contenu de R1?
STR R1, resultat ; stocker R1 dans resultat
; Questions:
Démonstration
; - Quelle est l'adresse de resultat?
; - Visualisez son emplacement en mémoire
; - Est-ce que le système est en « Big Endian » ou « Little Endian »?
fin
B fin
SECTION DATA (addition, avec variables)
; Valeurs stockées en mémoire
premiereValeur ASSIGN32 0x1
deuxiemeValeur ASSIGN32 0x2
; Résultat (on ne connait pas sa valeur a priori)
resultat ALLOC32 1

pour savoir l'@ de la variable résultat: ajouter ds le simulateur l'instruction


LDR R3,=resultat ; section code

16
;Écrivons un programme qui copie le contenu d'un tableau source vers un tableau destination.

SECTION INTVEC
B main
SECTION CODE
main
; Chargeons l'adresse de source
; Question: quelle est l'adresse de source?
LDR R0, =source
; Chargeons l'adresse de destination
; Question: quelle est l'adresse de destination?
LDR R1, =destination
; Copions les éléments uns à uns
; Question: pouvons-nous faire des copies mémoire-mémoire?
LDR R2, [R0]
STR R2, [R1]
; Passons à l'élément suivant.
Démonstration
; Combien d'octets faut-il rajouter à l'adresse pour
; passer au prochain élément dans le tableau?
ADD R0, R0, #4
ADD R1, R1, #4
LDR R2, [R0]
STR R2, [R1]
; Passons au dernier élément
(tableaux)
ADD R0, R0, #4
ADD R1, R1, #4
LDR R2, [R0]
STR R2, [R1]
; Nous avons terminé!
fin
B fin
SECTION DATA
; Tableau source de 3 éléments. Les éléments sont connus a priori.
source ASSIGN32 0x48, 0x65, 0x6C
; Tableau de destination de 3 éléments, inconnus a priori.
destination ALLOC32 3

17

Vous aimerez peut-être aussi