Rappel

Selon leur profil, les processeurs ARM supportent des jeux d’instructions différents. Les µP du profil A et R sont capables d’exécuter des instructions des trois jeux d’instructions ARM, Thumb et Thumb-2, tandis que les µC du profil M ne supportent que les jeux d’instructions Thumb et Thumb-2.

Avec les jeux d’instructions ARM (codé sur 32 bits) et Thumb-2 (utilisant un codage mixte 16 bits et 32 bits), toutes les instructions de traitement de données peuvent utiliser, sans distinction, l’ensemble des 16 registres (R0 à R15) du CPU à usage général et dédié. Par contre le jeu d’instructions Thumb (codé sur 16 bits) ne peut utiliser que les 8 premiers registres à usage général (R0 à R7).

Visibilité des registres

Tous les registres ont une taille fixe de 32 bits. Toutes les opérations arithmétiques et logiques ne s’exercent que sur ces 32 bits. Ce n’est qu’au chargement des données dans les registres du CPU que leur taille est adaptée, si nécessaire.

Lors de la réalisation d’un programme en langage assembleur, 4 registres requièrent une attention toute particulière et l’emploi d’instructions spécifiques:

  • R13/SP (Stack Pointer) pointant sur le sommet de la pile (Full Descending Stack)
  • R14/LR (Link Register) contenant l’adresse de retour lors d’appel de fonction
  • R15/PC (Program Compteur) pointant sur la prochaine instruction à exécuter,
  • APSR (Application Program Status Register) contenant les quatre fanions de conditions (flags) résultant d’opérations arithmétiques et logiques

Attention

Lors de branchements indirects, le bit 0 de l’adresse indique au processeur le jeu d’instructions à utiliser, 0 pour ARM et 1 pour Thumb/Thumb-2. Avec les µP ARM Cortex-M, il est dès lors impératif que ce bit soit toujours à 1.