17. appel de fonction Flashcards

1
Q

En ARM, une fonction est

A

un ensemble d’instructions à une
adresse donnée.
*

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

On identifie la fonction par

A

une étiquette

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

On appelle la fonction avec

A

un branchement à cette étiquette

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Pour pouvoir revenir à plus d’un endroit, il faut sauvegarder

A

l’adresse de retour (avant de faire le branchement)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Instruction de sauvegarde

A

BL (Branch and Link)

Tout d’abord, place l’adresse de retour dans LR
* Ensuite, branche à l’étiquette

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

À la fin de la fonction, on veut retourner à l’adresse de
retour
* Cette adresse a été stockée dans—– par —–

A

LR par le BL

Il suffit donc d’y brancher avec l’instruction BX, qui
place le contenu de LR dans PC

BX LR ; PC = LR

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Structure de données des piles

A

LIFO = Last In, First Out

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Deux opérations principales des piles

A

PUSH: rajoute un élément sur
« le dessus » la pile
* POP: enlève un élément du
« dessus » de la pile

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

numéro de registre du pointeur de pile

A

r13, sp

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

sp indique

A

la donnée retournée si on POP

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

est-ce que on peut modifier r13 directement

A

non. utiliser push et pop

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

comment fonctionne push

A

PUSH {Rs} ; (pile)
1) SP = SP - 4
; 2) place le contenu de Rs à l’adresse
indiquée par SP

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

comment fonctionne pop

A

POP {Rd} ; (dépile)
1) Place le contenu à l’adresse indiquée
par SP
; 2) SP = SP + 4

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Lors d’un PUSH, les registres sont empilés du
plus —- au plus —- numéro de registre

A

Lors d’un PUSH, les registres sont empilés du
plus grand au plus petit numéro de registre

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Lors d’un POP, les registres sont dépilés du
plus —- au plus — numéro de registre

A

Lors d’un POP, les registres sont dépilés du
plus petit au plus grand numéro de registre

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

est-ce que l’ordre des registres dans l’instruction est importante

A

non

17
Q

Pour préparer la pile x3

A

on alloue un espace mémoire (ALLOC)
* on charge l’adresse de la pile dans SP
* on incrémente SP pour aller « à la fin » de la pile (car la pile
est descendante)

18
Q

Les paramètres sont les « —– » de la fonction

A

Les paramètres sont les « entrées » de la fonction

Exemple, pour une fonction qui calcule la puissance
on doit lui donner la base et
l’exposant

19
Q

registres des paramètres

A

si 4 paramètres ou moins, r0 à r3

S’il y en a plus (pas dans le cadre du cours), on peut
utiliser la pile

20
Q

La valeur de retour est la « —–» de la fonction

A

La valeur de retour est la « sortie » de la fonction

21
Q

registre de la valeur de retour

A

On se sert de R0 lorsqu’il y en a 1.
* S’il y en a plus (pas dans le cadre du cours), on peut
utiliser la pile.

22
Q

comment se servir de 1 paramètre et 1 valeur de retour

A

On place la valeur du paramètre dans R0 juste avant l’appel
* L’instruction BL commande un branchement
* R0 contient la valeur de retour une fois la fonction exécutée

23
Q

problème des appel de fonction

A

Le nombre de registres étant limité, on ne veut pas qu’une fonction
remplace le contenu des registres

La fonction ne connait pas le nom des registres qui sont utilisés par le code
qui fait l’appel de la fonction

  • Le code qui fait appel à la fonction ne connait pas le nom des registres qui
    sont utilisés par la fonction
24
Q

quelle est la solution?

A

La fonction « protège » le contenu des registres qu’elle utilise

25
Q

comment on fait cette solution?

A

On protège le contenu d’un registre en le sauvegardant sur la pile avec PUSH

  • On récupère ce contenu avec POP