mardi 16 avril 2019

Introduction et généralités


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



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