Assembleur et modes d'adressage
Lire un programme assembleur ARM, ses étiquettes, mnémoniques et directives, reconnaître les cinq modes d'adressage et traduire une condition ou une boucle en comparaisons et sauts.
- 25 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
Quelques cartes du deck
Mnémonique : de quoi s'agit-il ?
Voir la réponse
Nom court et lisible d'une instruction machine, comme ADD ou LDR, que l'assembleur remplace par son code binaire.
Chaque mnémonique correspond à un code opération du processeur : l'assembleur traduit ligne à ligne, sans rien optimiser.
R1 vaut 0x2000. À quelle adresse cette instruction lit-elle ?
```arm
LDR R0, [R1, #4]`- 0x2004
- 0x2000
- 0x2010
- 0x0004
Voir la réponse
0x2004
L'adresse est R1 + 4 = 0x2004. La valeur de R1 n'est pas modifiée. 0x2000 oublie le déplacement, 0x0004 oublie le registre, 0x2010 multiplie le déplacement par la taille d'un mot alors qu'il compte déjà des octets.
Dans LDR R0, [R1], le registre R1 contient une … : c'est l'adressage … par registre.
Voir la réponse
Dans LDR R0, [R1], le registre R1 contient une adresse : c'est l'adressage indirect par registre.
Les crochets signifient « la case mémoire dont l'adresse est dans ». C'est le mécanisme des pointeurs : R1 joue le rôle de p, R0 reçoit *p.
Étiquette : de quoi s'agit-il ?
Voir la réponse
Nom suivi de deux-points, placé devant une ligne, qui désigne l'adresse de cette ligne et sert de cible aux sauts ou d'accès aux données.
On écrit BNE boucle au lieu d'une adresse numérique : l'assembleur calcule la distance une fois le programme placé en mémoire.
Cette boucle doit tourner dix fois, mais elle ne s'arrête jamais. Quelle correction la répare ?
```arm
MOV R1, #0
boucle:
CMP R1, #10
BLT boucle`- Remplacer BLT par BGE pour que le test porte sur l'autre sens
- Ajouter ADD R1, R1, #1 avant le CMP pour que R1 progresse
- Remonter l'étiquette boucle au-dessus de MOV R1, #0 pour tout reprendre
- Remplacer BLT par BLE pour que la boucle s'arrête à 10 inclus
Voir la réponse
Ajouter ADD R1, R1, #1 avant le CMP pour que R1 progresse
R1 reste à 0 : CMP R1, #10 donne toujours « plus petit » et BLT renvoie toujours au début. Une boucle doit modifier la variable que sa condition teste. BGE sortirait aussitôt, sans faire un seul tour ; BLE tournerait toujours sans fin, puisque R1 ne bouge pas ; remonter l'étiquette remettrait R1 à 0 à chaque tour.