0% ont trouvé ce document utile (0 vote)
20 vues44 pages

Systèmes à Microprocesseurs ARM

Transféré par

Youssef Mahdi
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)
20 vues44 pages

Systèmes à Microprocesseurs ARM

Transféré par

Youssef Mahdi
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

Systèmes à Microprocesseurs

Cycle Ingénieur Troisième Année

Sébastien Bilavarn

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -1-
Plan
 Ch1 – Représentation de l’information
 Ch2 – ARM Instruction Set Architecture
 Ch3 – Accès aux données
 Ch4 – Programmation structurée
 Ch5 – Cycle d’exécution
 Ch6 – Codage binaire
 Ch7 – Microcontrôleur ARM Cortex-M
Cortex

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -2-
Programmation structurée en
assembleur ARM
 Appels de sous-programmes
 Structure de pile

 Mise en place d’une pile

 Passage de paramètres

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -3-
Notions
 Sous-programme:
programme: terme générique désignant un sous-ensemble
sous d’un
programme
 Procédure: un sous-programme
programme qui ne renvoie pas de résultat.
 Ex: printf ("Hello world\n");
 Fonctions: un sous-programme
programme effectuant un traitement sur des données
et qui renvoie un résultat.
 Ex: c = max (a, b);
 Appel et retour de sous-programmes
programmes
 Un sous-programme
programme doit mémoriser l’adresse du code appelant pour
poursuivre l’exécution à l’adresse de retour correspondante
 Mécanismes d’échanges de données
 Passage de paramètre par valeur: le code appelé dispose d’une copie de
la valeur
 Passage de paramètre par référence: le code appelé dispose de l’adresse
du paramètre. Il peut modifier sa valeur.
 Valeur de retour d’une fonction: donnée fournie par le code appelé au
code appelant

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -4-
Appel de sous-programmes
sous
 Appel et retour de sous-programmes
sous
 Pour appeler un sous programme:
 Branch and Link: BL label
 L’exécution se poursuit à l’instruction correspondant au label
 L’adresse de retour est conservée dans le registre LR (Link Register,
r14)

 Pour revenir d’un sous--programme:


 MOV PC, LR (équivalent à MOV r15, r14)
 L’adresse de retour est récupérée dans LR
 L’exécution se poursuit à l’instruction qui suit l’instruction d’appel

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -5-
Enchaînement d’appels
 Principe
void main () {

displayMenu();
… void displayMenu () {
} displayStr("[Link]");
displayStr("[Link]");
displayStr("[Link]");
displayStr("[Link]"); void displayStr (char *str) {
} while (*str){
displayChar(*str);
++str;
}
} void displayChar (char ch) {

}

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -6-
Enchaînement d’appels
 Problème de la traduction en assembleur (1)
main: LR @ retour dans main

PC @ displayMenu
BL displayMenu
… Traduction en assembleur:
displayMenu:
Branchement temporaire (BL displayMenu)

Dans la fonction main, à l’exécution de l’instruction BL
BL displayStr displayMenu :
… -l’adresse de retour (adresse de l’instruction BL
BL displayStr displayMenu + 4) est sauvegardée dans le registre LR
(r14)

-puis on saute à l’adresse de la première instruction
BL displayStr de displayMenu (PC ← @displayMenu)

BL displayStr
MOV PC, LR

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -7-
Enchaînement d’appels
 Problème de la traduction en assembleur (2)
main: LR @ retour dans displayMenu

PC @ displayStr
BL displayMenu
… Dans la fonction displayMenu, à l’exécution de
displayMenu: l’instruction BL displayStr :
… -l’adresse de retour (adresse de l’instruction BL
BL displayStr displayMenu + 4) est sauvegardée dans le registre LR
(r14)

-puis on saute à l’adresse de la première instruction
BL displayStr de displayStr (PC ← @displayStr)

displayStr: On écrase la valeur
BL displayStr précédente de LR (adresse
… … de retour dans main)!!
BL displayStr BL displayChar
MOV PC, LR

MOV PC, LR

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -8-
Enchaînement d’appels
 Problème de la traduction en assembleur (3)
main: LR @ retour dans displayStr

PC @ displayChar
BL displayMenu
… Dans la fonction displayStr, à l’exécution de
displayMenu: l’instruction BL displayChar :
… -l’adresse de retour (adresse de l’instruction BL
BL displayStr displayStr + 4) est sauvegardée dans le registre LR
(r14)

-puis on saute à l’adresse de la première instruction
BL displayStr de displayChar (PC ← @displayChar)

displayStr: On écrase la valeur
BL displayStr précédente de LR (adresse
… … de retour dans
BL displayStr BL displayChar displayMenu)!!
MOV PC, LR
… displayChar:
MOV PC, LR …
MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S.
Bilavarn
Bilavarn -9-
Enchaînement d’appels
 Problème de la traduction en assembleur (4)
main: LR @ retour dans displayStr

PC @ retour dans displayStr
BL displayMenu
… A la fin de l’exécution de displayChar :
displayMenu:
-on récupère l’adresse de retour dans displayStr, que
… l’on place dans le registre PC (par l’instruction MOV
BL displayStr PC, LR)

… -L’exécution reprend à l’adresse de retour dans


displayStr
BL displayStr

BL displayStr displayStr:

… …
BL displayStr BL displayChar
MOV PC, LR
… displayChar:
MOV PC, LR …
MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 10 -
Bilavarn
Enchaînement d’appels
 Problème de la traduction en assembleur (5)
main: LR @ retour dans displayStr

PC ???
BL displayMenu
… A la fin de l’exécution de displayStr :
displayMenu:
-on ne peut pas revenir à l’exécution de displayMenu
… car on a perdu l’adresse de retour (ecrasée
BL displayStr précédemment)

… - on ne peut pas non plus revenir à l’exécution de la


fonction main
BL displayStr
???

BL displayStr displayStr:

… …
BL displayStr BL displayChar
MOV PC, LR
… displayChar:
??? MOV PC, LR …
MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 11 -
Bilavarn
Enchaînement d’appels
 Si un sous-programme
programme est "terminal" (s’il n’appelle
pas d’autre sous-programme),
programme), le registre LR suffit
pour sauvegarder et restaurer l’adresse de retour
 Ex: fonction displayChar

 Si un sous-programme
programme en appelle un autre, la valeur
de LR doit être sauvegardée avant d’effectuer le saut
à l’instruction BL

 Solution: utilisation d’une structure de pile


La procédure de sauvegarde de l’adresse de retour ne peut fonctionner telle quelle en cas
d’enchaînement d’appels à plusieurs sous programmes (cas le plus fréquent)

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 12 -
Bilavarn
Utilisation d’une pile
 Principe (1)
main: LR @ retour dans main

PC @ displayMenu
BL displayMenu
… displayMenu:
"empiler LR"
À l’exécution de BL Pile
displayMenu, …
l’adresse de retour
BL displayStr
dans main est
sauvegardée dans le …
registre LR.
BL displayStr
Au début de la

fonction
displayMenu, on BL displayStr @ retour dans main
empile LR (@retour

dans main est
BL displayStr
sauvegardée dans la
"dépiler PC"
pile)

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 13 -
Bilavarn
Utilisation d’une pile
 Principe (2)
main: LR @ retour dans displayMenu

PC @ displayStr
BL displayMenu
… displayMenu:
"empiler LR"
À l’exécution de BL Pile
displayStr, l’adresse …
de retour dans
BL displayStr
displayMenu est
sauvegardée dans le …
registre LR.
BL displayStr displayStr:
Au début de la @ retour dans displayMenu
… "empiler LR"
fonction displayStr,
on empile LR BL displayStr … @ retour dans main
(@retour dans
… BL displayChar
displayMenu est
BL displayStr
sauvegardée en …
"dépiler PC"
mémoire)
"dépiler PC"

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 14 -
Bilavarn
Utilisation d’une pile
 Principe (3)
main: LR @ retour dans displayStr

PC @ displayChar
BL displayMenu
… displayMenu:
"empiler LR"
BL displayChar: on Pile
saute à l’exécution …
de displayChar
BL displayStr
Programme terminal

(pas de sous
programme) donc il BL displayStr displayStr:
n’est pas obligatoire @ retour dans displayMenu
… "empiler LR"
d’empiler l’adresse
de retour (LR suffit BL displayStr … @ retour dans main
dans ce cas)
… BL displayChar
BL displayStr
"dépiler PC" …
displayChar:
"dépiler PC"

MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 15 -
Bilavarn
Utilisation d’une pile
 Principe (4)
main: LR @ retour dans displayStr

PC @ retour dans displayStr
BL displayMenu
… displayMenu:
"empiler LR"
À la fin de Pile
l’exécution de …
displayChar, on
BL displayStr
récupère l’adresse
de retour dans …
displayStr (contenue
BL displayStr displayStr:
dans LR)
… "empiler LR" @ retour dans displayMenu

BL displayStr … @ retour dans main


… BL displayChar
BL displayStr
"dépiler PC" …
displayChar:
"dépiler PC"

MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 16 -
Bilavarn
Utilisation d’une pile
 Principe (5)
main: LR @ retour dans displayStr

PC
BL displayMenu @ retour dans displayMenu
… displayMenu:
"empiler LR"
À la fin de Pile
l’exécution de …
displayStr, on
BL displayStr
récupère l’adresse
de retour dans …
displayMenu
BL displayStr displayStr:
(contenue dans la
pile): on dépile PC … "empiler LR"
cad on place la
BL displayStr … @ retour dans main
dernière donnée
empilée (@retour … BL displayChar
dans displayMenu) BL displayStr
dans le registre PC "dépiler PC" …
displayChar:
"dépiler PC"

MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 17 -
Bilavarn
Utilisation d’une pile
 Principe (6)
main: LR @ retour dans displayStr

PC
BL displayMenu @ retour dans main
… displayMenu:
"empiler LR"
À la fin de Pile
l’exécution de …
displayMenu, on BL displayStr
récupère l’adresse
de retour dans main …
(contenue dans la BL displayStr displayStr:
pile): on dépile PC
PC <- @retour dans … "empiler LR"
main BL displayStr …
… BL displayChar
BL displayStr
"dépiler PC" …
displayChar:
"dépiler PC"

MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 18 -
Bilavarn
Mise en place d’une pile
 La pile réside dans un espace mémoire qui sera
réservé spécifiquement à cet usage

 Les données sont rangées dans des cellules


adjacentes au fur et à mesure qu’elles sont empilées

 Pour repérer le niveau de remplissage de la pile, on


utilise un registre pointeur de pile (Stack Pointer SP)
 C’est le registre r13 du processeur ARM qui remplit cette
fonction

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 19 -
Bilavarn
Mise en place d’une pile
 Modèles d’évolution de la pile: Full Descending

Mémoire

Sens des
adresses
croissantes
Zone
mémoire
SP Sommet de la pile réservée à la
pile

Base de la pile

La pile se remplit dans le sens des adresses décroissantes


Le pointeur de pile SP repère la dernière donnée empilée

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 20 -
Bilavarn
Mise en place d’une pile
 Modèles d’évolution de la pile: Full Descending
 Pour empiler
Empiler:
-On ECRIT après la dernière la donnée
pointée dans la pile (à l’adresse SP-4)

Mémoire
r1
Sens des
adresses
croissantes
2 mem[SP]word ← r1
SP
- La pile évolue dans le sens des adresses
1 SP ← SP - 4 décroissantes: on décrémente les adresses
SP ← SP- 4 AVANT écriture (adressage pré-
indexé automatique)
- Ecrire la donnée

 STR Rd, [SP, #-4]!


Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 21 -
Bilavarn
Mise en place d’une pile
 Modèles d’évolution de la pile: Full Descending
 Pour dépiler
Dépiler:
-On LIT la dernière donnée dans la pile
- accès à l’adresse SP

Mémoire
r1
Sens des
adresses
croissantes
1 r1 ← mem[SP]word
SP
-On incrémente SP ← SP+4 APRES lecture
(adressage post-indexé automatique)
2 SP ← SP + 4

-LDR Rd, [SP], #4

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 22 -
Bilavarn
Mise en place d’une pile
 Exemple d’utilisation en mode Full Descending
main:
A chaque appel d’une sous-fonction non terminale:
… on empile LR au début, on dépile PC à la fin.
BL DisplayMenu A l’appel d’une sous fonction terminale, LR suffit
pour sauvegarder / récupérer l’adresse de retour.
… displayMenu:
Full descending: remplissage dans le sens des
STR LR, [SP, #-4]! adresses décroissantes:
… Empiler: STR LR, [SP, #-4]!
BL displayStr Dépiler: LDR LR, [SP], #4

Sens des
BL displayStr (lr)
displayStr: adresses SP
croissantes
… STR LR, [SP, #-4]!
#
BL displayStr … Sens des (lr)
… adresses
BL DisplayChar SP
croissantes
BL displayStr
LDR PC, [SP], #4 …
displayChar:
LDR PC, [SP], #4

MOV PC, LR
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 23 -
Bilavarn
Appel de sous-programmes
sous
 Précautions nécessaires lors d’appels à sous-
sous
programmes
 Un sous-programme
programme est vu comme une boite noire, la partie
visible concerne ses paramètres et sa valeur de retour

Mais
 Le programme principal et ses sous-programmes
sous
manipulent tous les mêmes registres
 → un sous-programme
programme peut modifier des valeurs de
registres à l’insu du programme appelant

 Lors de l’appel à un sous-programme,


sous l’appelant
souhaite trouver les registres dans le même état
qu’avant l’appel
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 24 -
Bilavarn
Appel de sous-programmes
sous
 Exemple
void main () { void func1 (int x) {
Dans chacun des deux
int i; sous-programmes,
programmes, le int i;
for (i=0; i<10; i++) symbole i désigne une for (i=0; i<2*x; i++)
variable distincte
func1(i); …;
} Ces deux sous-
sous }
programmesutilisent le
main: mov r1, #0 même registre r1 comme func1: mov r1, #0
compteur de boucle
loop1: cmp r1, #10 loop2: cmp r1, r2, lsl#1
bge eloop1 bge eloop2
mov r2, r1 …
bl func1 Au moment d’exécuter …
cette instruction, r1 a été
add r1, r1, #1 add r1, r1, #1
modifié par le sous-
sous
b loop1 programme func1 et a donc b loop2
peu de chances d’être a la
eloop1: b eloop1 eloop2: mov pc, lr
valeur souhaitée
En plus de l’adresse de retour, il faut également sauvegarder certaines données contenues dans des
registres !!
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 25 -
Bilavarn
Appel de sous-programmes
sous
→ Précautions nécessaires:

 A l’entrée d’un sous programme, on sauvegarde les


registres utilisés comme variables locales

 Avant de sortir, on restaure la valeur de ces registres

 La pile offre un moyen d’allouer dynamiquement de la


mémoire pour effectuer cette sauvegarde

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 26 -
Bilavarn
Appel de sous-programmes
sous
 Exemple en utilisant la pile
Sens des (r1)
adresses SP
croissantes

Sauvegarde de r1

main: mov r1, #0 func1: STR r1, [SP, #-4]!


loop1: cmp r1, #10 mov r1, #0
bge eloop1 loop2: cmp r1, r2 , lsl#1
mov r2, r1 bge eloop2
bl func1 Au moment d’exécuter …
cette instruction, r1 a été
add r1, r1, #1 …
utilisé par le sous-
sous
b loop1 programme func1, mais sa add r1, r1, #1
valeur a été sauvegardée
eloop1: b eloop1 b loop2
et rétablie
eloop2: LDR r1, [SP], #4

Restauration de r1 mov pc, lr

Sens des (r1)


adresses
SP
croissantes
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 27 -
Bilavarn
Appel de sous-programmes
sous
 Empiler/dépiler une liste de registres (1)
→ Il faut sauvegarder lr,, ainsi que les registres modifiés par le sous
programme
Empiler LR en premier
Sens des
adresses foo: str lr,
, [sp, #-4]!
#
croissantes SP
str r7, [sp, #-4]!
#
str r3, [sp, #-4]!
#
str r2, [sp, #-4]!
#
str r1, [sp, #-4]!
#


r1
Sens des r2 SP Fin: ldr r1, [sp], #4
adresses r3
croissantes r7 ldr r2, [sp], #4
lr
ldr r3, [sp], #4
ldr r7, [sp], #4 Dépiler PC en dernier
ldr pc,
, [sp], #4

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 28 -
Bilavarn
Appel de sous-programmes
sous

 Empiler/dépiler plusieurs registres à la fois (2)


 Utilisation des instructions de transfert multiples pour accéder à la pile

foo: str lr, [sp, #-4]! foo: STMDB sp!, {r1-r3, r7, lr}
str r7, [sp, #-4]! …
str r3, [sp, #-4]! …
r1
r2 SP str r2, [sp, #-4]! …
r3
r7 str r1, [sp, #-4]! …
lr
… …
… …
ldr r1, [sp], #4 LDMIA sp!, {r1-r3, r7, pc}
ldr r2, [sp], #4
ldr r3, [sp], #4
ldr r7, [sp], #4
ldr pc, [sp], #4

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 29 -
Bilavarn
Appel de sous-programmes
sous

 Empiler/dépiler plusieurs registres à la fois (3)


 Utilisation des instructions de transfert multiples pour accéder à la pile

Mode Pour empiler Pour dépiler

Full Ascending (FA) STMIB/STMFA LDMDA/LDMFA

Empty Ascending (EA) STMIA/STMEA LDMDB/LDMEA

Full Descending (FD) STMDB/STMFD LDMIA/LDMFD


Empty Descending (ED) STMDA/STMED LDMIB/LDMED

Le mode utilisé par défaut sur ARM est le Full Descending:


Pour empiler un registre: STR Rd, [SP,#-4]!
Pour empiler une liste de registres : STMFD SP!,{reglist}
Pour dépiler un registre : LDR Rd, [SP], #4
Pour dépiler une liste de registres : LDMFD SP!, {reglist}

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 30 -
Bilavarn
Récapitulatif sur l’utilisation de la pile (1)
 Changement de contexte
 Au début d’un sous programme: sauvegarde de l’adresse
de retour et des registres.
 A la fin d’un sous programme: restauration des registres et
de l’adresse de retour.

 Autre utilisation de la pile


 Passage de paramètres

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 31 -
Bilavarn
Passage de paramètres
 L’utilisation de variables globales pour passer des
informations à un sous-programme
sous est fortement
déconseillée
 Les paramètres sont considérés comme des
variables locales de chaque sous-programme
sous

 Ils peuvent être transmis de deux façons:


 Passage par valeur
 Passage par référence (ou par adresse)
 Mise en place
 Passage par registres
 Passage par la pile
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 32 -
Bilavarn
Passage de paramètres
 Mise en place: passage par registres
 Facile à mettre en place
 Rapide à l’exécution (pas d’accès mémoire pour lire ou
écrire les données)

Mais
 les registres sont en nombre limité, souvent utilisés pour

d’autres usages
 mêmes inconvénients que les variables globales (risque de

modifications non contrôlées)

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 33 -
Bilavarn
Passage de paramètres
 Mise en place: passage par registres
 Exemple: calcul de PGCD
 Le sous-programme
programme prend deux paramètres entiers passés
dans r1 et r2 pgcd: mov r0, #0
cmp r1, #0
 Il renvoie le résultat dans r0
beq epgcd
main: mov r1, #24 cmp r2, #0
mov r2, #18 beq epgcd
bl pgcd loop1: cmp r1, r2
moveq r0, r1

Les paramètres 24 et 18 sont passés par le programme beq epgcd


appelant vers le programme appelé via les registres r1 et r2. subgt r1, r1, r2
/!\ Ces paramètres sont utilisés et modifiés par la fonction sublt r2, r2, r1
pgcd!! Les valeurs 24 et 18 sont perdues à la fin de l’appel à
pgcd. b loop1
epgcd: mov pc, lr

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 34 -
Bilavarn
Passage de paramètres
 Mise en place: passage par la pile
 Offre un mécanisme simple d’allocation et de libération
dynamique d’espace mémoire: il suffit de déplacer le
pointeur de pile
 Le programme appelant empile les paramètres
 Le sous-programme
programme appelé les lit dans la pile et libère
l’espace occupé au moment de sortir

Exemple: les paramètres à passer sont: 24, 18

Sens des
18
adresses 24
croissantes SP

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 35 -
Bilavarn
Passage de paramètres
 Mise en place: passage par la pile
pgcd:
ldr r4, [sp, #4]
#18
#24 ldr r5, [sp]
mov r0, #0
main: mov r0, #24
cmp r4, #0
str r0, [sp, #-4]!
beq epgcd
mov r0, #18
cmp r5, #0
str r0, [sp, #-4]!
beq epgcd
bl pgcd
loop1: cmp r4, r5
add sp, sp, #8
moveq r0, r4

Avant l’appel à la fonction (bl pgcd), on empile beq epgcd


les paramètres. subgt r4, r4, r5
Après l’appel à la fonction (bl pgcd), on libère sublt r5, r5, r4
les paramètres.
b loop1
epgcd: mov pc, lr

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 36 -
Bilavarn
Passage de paramètres
 Mise en place: passage par la pile
r4 pgcd: stmfd sp!, {r4, r5, lr}
r5
lr ldr r4, [sp, #16]
#18
#24 ldr r5, [sp, #12]
mov r0, #0
main: mov r0, #24
cmp r4, #0
str r0, [sp, #-4]!
beq epgcd
mov r0, #18
cmp r5, #0
str r0, [sp, #-4]!
beq epgcd
bl pgcd
loop1: cmp r4, r5
add sp, sp, #8
moveq r0, r4

Même exemple avec prise en compte de la beq epgcd


sauvegarde de l’adresse de retour et des subgt r4, r4, r5
registres modifiés.
sublt r5, r5, r4
/!\ Ne pas sauvegarder le registre utilisé pour le
résultat (ici r0) b loop1
epgcd: ldmfd sp!, {r4, r5, pc}

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 37 -
Bilavarn
Passage de paramètres
 Mise en place: passage par pgcd: stmfd sp!, {r4, r5, lr}
la pile ldr r4, [sp, #16]
ldr r5, [sp, #12]
mov r0, #0
cmp r4, #0
main: mov r0, #24
beq epgcd
str r0, [sp, #-4]!
cmp r5, #0
mov r0, #18
beq epgcd
str r0, [sp, #-4]!
loop1: cmp r4, r5
bl pgcd
moveq r0, r4
Même chose en libérant l’espace des paramètres
dans la fonction pgcd, donc juste avant de beq epgcd
retourner à la fonction appelante (mov pc, lr) subgt r4, r4, r5
sublt r5, r5, r4
r4
r5 b loop1
lr
#18 epgcd: ldmfd sp!, {r4, r5, lr}
#24
add sp, sp, #8
SP
mov pc, lr
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 38 -
Bilavarn
Récapitulatif sur l’utilisation de la pile (2)
 Changement de contexte
 Au début d’un sous programme: sauvegarde de l’adresse
de retour et des registres modifiés.
 A la fin d’un sous programme: restauration des registres et
de l’adresse.
 Passage de paramètres par la pile
 Dans le programme appelant
 Empiler les paramètres
 Dans le sous programme appelé
 Sauvegarder les registres (le contexte)
 Lire les paramètres dans la pile
 Traitement de la fonction
 Restaurer les registres (le contexte)
 Libérer l’espace occupé par les paramètres dans la pile

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 39 -
Bilavarn
ARM Procedure Call Standard (APCS)
 Pour faciliter l’interfaçage de routines issues de
sources différentes (compilateurs, programmeur), un
ensemble de règles a été défini pour standardiser les
entrées et sorties de sous-programmes.
sous
 L’APCS permet
 de définir une utilisation spécifique des registres
 de définir quel type de pile à utiliser (full/empty,
ascending/descending supporté par le jeu d’instruction)
 de définir les mécanismes de passage de paramètres et de
résultat utilisés par les fonctions et procédures
 etc

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 40 -
Bilavarn
ARM Procedure Call Standard (APCS)
 Convention d’utilisation des registres
Registre Nom APCS Description

0 a1 Argument 1 Passage des 4 premiers


1 a2 Argument 2 paramètres (au delà les
2 a3 Argument 3 paramètres sont passés
la pile)
3 a4 Argument 4
4 v1 Register variable 1
5 v2 Register variable 2
Variables locales
6 v3 Register variable 3
(registres à
7 v4 Register variable 4 sauvegarder en entrée
8 v5 Register variable 5 d’un sous-programme)
9 v6 Register variable 6
10 sl Stack Limit
11 fp Frame Pointer R11 = fp
12 ip Intra-Procedure
Procedure Scratch register R13 = sp
13 sp Stack Pointer
R14 = lr
14 lr Link Address
15 pc Program Counter R15 = pc

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 41 -
Bilavarn
Cadre de pile (stack frame)
Mémoire
 La pile est utilisée pour conserver
 Les paramètres d’un sous programme
 L’adresse de retour
 Les valeurs des registres sauvegardés
SP
 Les variables locales Variables
locales

Registres
sauvegardés
 On utilise un registre appelé frame pointer (dont LR)

 Le registre R11 FP

 Il pointe sur le dernier paramètre empilé Paramètres

 Le pointeur de pile SP pointe lui sur le sommet de la


zone des variables locales
Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 42 -
Bilavarn
Cadre de pile (stack frame)
 Exemple d’utilisation

foo: stmfd sp!, {r3-r8,


{r3 fp, lr} @ save registers
main: str r4, [sp, #-4]! sub fp, sp, #40 @ set FP
str r5, [sp, #-4]! sub sp, sp, #100 @ allocate 100
str r6, [sp, #-4]! @ octets for
bl foo @ local var

add sp, sp, #100 @ free local
@ var space
ldmfd sp!, {r3-r8,
{r3 fp, lr} @ reload
@ register
@ context
add sp, sp, #12 @ free parameter
@ space
mov pc, lr @ return

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 43 -
Bilavarn
ARM Procedure Call Standard (APCS)
 Modèle de pile: Full Descending
 Cadre de pile
SP
Variables
Sens des locales
adresses
croissantes
Registres
Optionnel sauvegardés
(r0 à r9)
FP
SP
LR
FP PC

Paramètres

Polytech
Polytech’Nice
Nice Sophia
Sophia- Dpt
- Département
Ingénierie des
Electronique
Systèmes -Electroniques
Université de -Nice
Université
SophiaCôte
Antipolis
d’Azur- S.
- S. Bilavarn - 44 -
Bilavarn

Vous aimerez peut-être aussi