Je ne reviendrais pas sur les raisons d’apprendre la programmation en
assembleur. Vous trouverez sur internet de nombreuses discussions sur les
partisans et les opposants à l’assembleur.
Mais avec le Raspberry, nous disposons d’un formidable outil pour
programmer car d’une part, il utilise le système d’exploitation Linux avec des
commandes principales simples d’utilisation et d’autre part il fonctionne avec
un processeur de type RISC, c’est-à-dire avec un jeu d’instructions réduit et
donc plus facile à mémoriser que les instructions d’un processeur intel (X86).
Ce tutoriel sera basé sur le processeur 32 bits des raspberry de première
génération ( processeur ARM1176JZF-S ). Pour le raspberry pi 3 (processeur ARM CORTEX M53) j'indiquerai les autres possibilités et pour d’autres types de processeurs, il
sera nécessaire d’adapter certaines instructions.
Ce tutoriel expliquera à ma façon !! le fonctionnement et l'utilité des instructions et s’appuiera beaucoup sur
des petits exemples concrets que je vous conseille de modifier comme vous le
voulez et même de créer des erreurs volontaires pour voir ce qui se passe. Et même d’écrire des programmes qui vont à
l’encontre de ce que j’ai écrit pour vérifier mes assertions (qui peuvent
d’ailleurs être erronées !!).
Cette approche pratique entraine une première difficulté : écrire un
tout petit programme qui fonctionne nécessite déjà de nombreuses connaissances
et qui ne seront acquises que tout au long de ce cours.
Quand nous parlons d’assembleur, nous parlons de deux entités
différentes : la première est le langage d’assemblage écrit et
compréhensible par un humain et la deuxième est la suite des instructions
exécutables par le processeur. Pour passer de l’une à l’autre il nous faut
exécuter une série d’opération que voici :
- Analyser le problème à résoudre et écrire l’algorithme nécessaire.
- Écrire le langage d’assemblage avec un éditeur de texte
- Compiler ce fichier source avec un compilateur pour créer un programme
objet.
- Lier ce programme objet avec d’autres modules objet ou des librairies
pour créer un programme exécutable, c’est-à-dire compréhensible par le chargeur
de programme de Linux puis par le processeur lui-même.
Nous verrons plus précisément cette démarche dans le chapitre Outils.
Dans ce cours forcément incomplet, j’essaierais de donner des références
vers des documentations disponibles sur internet mais malheureusement le plus
souvent écrites en anglais.
Je ferais aussi intervenir l’Ingénieur, personnage qui représente tous
ceux qui ont inventé, crée et fabriqué ce merveilleux instrument : le
microprocesseur.
Comme prérequis, je suppose que vous connaissez les instructions
essentielles de Linux pour créer des catalogues, copier des fichiers, et lancer
des programmes etc. !!!
Ce cours contiendra les chapitres suivants :
- les outils pour créer un exécutable
- les registres
- la mémoire
- les instructions
- les périphériques
- les appels systéme Linux
- les calculs en virgule flottante
Ce cours contiendra les chapitres suivants :
- les outils pour créer un exécutable
- les registres
- la mémoire
- les instructions
- les périphériques
- les appels systéme Linux
- les calculs en virgule flottante
Composition d'un source assembleur ARM avec la syntaxe Gas (Gnu Assembly):
Le source du langage assembleur ARM est composé de 4 entités :
Les commentaires qui commencent par /* et se terminent par */ mais aussi
qui commencent seulement par @ ou //
Les pseudo instructions qui servent de directives pour le compilateur et
qui commencent par un point (.) mais pas toujours !!
Les labels qui se substituent à des adresses de la mémoire et se
terminent par 2 points (:).
Et finalement, les instructions assembleurs proprement dites.
Pour ceux qui maitrisent ce langage et qui veulent aller plus loin, ils peuvent consulter mon autre blog qui contient des articles sur toutes les possibilités offertes sur le raspberry pi :
https://assembleurarmpi.blogspot.com/
Documentation :
un cours d'assembleur sur ce site en anglais :
https://thinkingeek.com/arm-assembler-raspberry-pi/
la documentation complète sur les processeurs ARM :
http://infocenter.arm.com/help/index.jsp
La liste complète des instructions que je vous conseille d'imprimer car tout est là ::
http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf
Et quand vous serez au top de l'assembleur ARM, vous pouvez consulter mon autre blog :
https://assembleurarmpi.blogspot.com/
Aucun commentaire:
Enregistrer un commentaire