Introduction

La conception et réalisation de systèmes embarqués et de systèmes sur puce (SoC) a énormément évolué depuis ces débuts dans les années 1970. L’arrivée sur le marché de µP et µC extrêmement performant (capacité mémoire, puissance de calcul, variété des périphériques d’entrées/sorties, etc.) a généralisé le développement d’applications mettant en œuvre des systèmes d’exploitation riches, tel GNU/Linux, ou temps réels, tels FreeRTOS ou MbedOS. Pour des raisons de performances, ces applications sont principalement développées avec des langages de programmation compilés. C/C++ est actuellement le langage de prédilection, bien qu’une tendance se dessine vers des langages plus sûrs et plus robustes, tels que Rust ou Carbon.

Le code machine généré par les compilateurs de dernière génération est d’une qualité telle, qu’il devient difficile, voire impossible, de les égaler avec une programmation en assembleur. En effet, ces compilateurs ont une connaissance très pointue des processeurs et de leur architecture interne, qu’ils mettent à profit pour produire un code excessivement performant. Cependant, la réalisation de certaines opérations très proche du processeur et de ses unités de traitement internes doivent encore se programmer avec des instructions assembleur non disponibles dans les langages de programmation évolués.

L’assembleur est un langage de programmation très proche du code machine binaire directement exécutable par le processeur. Il existe généralement une relation univoque entre le code machine et les mnémoniques des instructions assembleur. Le langage est naturellement enrichi d’éléments facilitant l’écriture, la structuration et la modularisation des programmes, tels que la déclaration de sections de texte pour le code et les instructions, de sections de données pour les variables et les constantes, de symboles, macros ou d’informations facilitant le débogage.

Note

Sans autres indications, les exemples en langage assembleur de ce chapitre sont réalisés pour des µP/µC ARMv7 à 32 bits avec le jeu d’instructions Thumb-2.