27a. Langage assembleur

Retour au sommaire de C O D E

Ce chapitre se concentre sur la création de programmes informatiques. On parle alternativement d'ingénierie logicielle, de programmation ou de codage.

Les exemples pratiques s'intéressent à deux langages. L'assembleur, dans sa variante pour microprocesseur Intel 8080, est présenté sur cette page. Une autre page se focalise sur le langage JavaScript.

Programmation en assembleur 8080

Il s'agit ici d'un émulateur logiciel de microprocesseur Intel 8080 écrit en langage JavaScript. Il est construit à partir de quatre éléments principaux :

Ces composants sont présentés plus en détail ci-dessous.

Éditeur - SansNom

Voulez-vous sauver les retouches dans

Ouvrir / Sauver sous

"" existe déjà.
Acceptez-vous d'écraser son contenu actuel?

 

Mémoire

Processeur (CPU)

PC = 0000h
SP = 0000h
A00h00hFlags
B00h00hC
D00h00hE
H00h00hL
Flags

Console

Légendes pour le bloc Processeur :
PC = Pointeur d'instruction (Program Counter)
SP = Pointeur de pile (Stack Pointer)
Flags = Registre des drapeaux
Z = Zéro, S = Signe, C = Carry (Retenue), AC = Aux Carry (Retenue auxiliaire), P= Parité.

Voici quelques conseils pour bien utiliser les composants de l'émulateur.

L'éditeur

Cet éditeur est une version allégée d'un éditeur de texte typique tel que le Bloc-notes sous Windows ou TextEdit sous macOS. Il permet de rédiger et peaufiner les lignes d'un texte source en langage assembleur conforme à la grammaire Intel 8080 Assembly Language. Ce langage est insensible à la casse (il ne distingue pas les majuscules des minuscules) Vous pouvez donc combiner les deux casses selon vos habitudes. (N.d.T. : rappelons cependant que des conventions sont apparues. Elles sont appliquées dans les exemples de programmes que vous pouvez charger par le menu Fichier de l'éditeur.

Le menu Fichier propose des commandes pour vider le contenu de l'éditeur et commencer avec un nouveau fichier, recharger un fichier existant et enregistrer (nous dirons "sauver" dans la suite) le travail en cours. Ces options utilisent des boîtes de dialogue classiques.

REMARQUE : Pour ouvrir le menu Fichier, il est possible qu'il faille cliquer deux fois lors du premier essai. Trois étapes suffisent pour essayer un exemple : choix du fichier dans le menu Fichier/Ouvrir, traduction et injection en mémoire avec le bouton Assembler et lancement avec le bouton Run (ou Step).

Nous y utilisons un système de fichiers simulé en profitant d'une fonction intéressante de JavaScript pour le stockage local. Elle porte le nom localStorage. Les fichiers que vous créez puis sauvez restent confinés dans la page web en cours de l'instance de navigateur concernée. Un fichier sauvé par vous-même (donc pas ceux prédéfinis) avec un navigateur ne sera pas visible depuis un autre. Pour transférer du code source d'un navigateur à un autre, vous utilisez le Presse-papier depuis l'éditeur.

Vous pouvez ne sauver qu'une portion d'un listing source en sélectionnant les lignes avant de lancer la commande Sauver la sélection du menu. De même, vous insérez une portion sauvée avec Insérer un fichier. Ce binôme de fonctions est très appréciable quand il s'agit de réutiliser des routines.

ATTENTION: Cet éditeur détecte le risque d'écrasement des données existantes lors d'une sauvegarde et celui de perte de données modifiées. Il ne vous protège PAS contre la perte de vos données si vous fermez la fenêtre ou quittez le navigateur sans sauver.

Une vingtaine de fichiers exemple sont proposés. Ils correspondent à ceux étudiés dans le livre et à trois projets spécifiques plus ambitieux. Une description est fournie dans la boîte d'ouverture de fichier. Ces fichiers sont en lecture seule. Vous pouvez les modifier, mais il faut proposer un autre nom de fichier pour les sauver, en utilisant la commande Sauver sous.

La syntaxe acceptable est pour l'essentiel celle définie dans le manuel de référence Intel 8080 Assembly Language Programming Manual publié en 1975 et toujours disponible sur Internet Archive. Quelques exceptions et remarques sont à considérer :

Tenez compte du fait qu'une valeur hexadécimale commençant par une lettre doit être préfixée par un chiffre 0. (Sans cette précaution, le programme d'assemblage pourrait prendre la valeur pour un label.)

Un des programmes d'exemple fournis est une Suite de tests. Elle est protégée par un Copyright 1980 et sert à tester les émulateurs de processeur 8080. Ce programme est assemblé et exécuté sur cet émulateur et s'est montré très utile pour le vérifier.

Si votre programme comporte une instruction de positionnement ORG qui force le programme à débuter son exécution à l'adresse 100h, cinq appels CP/M prédéfinis deviennent exploitables via l'interface CALL 5 :

Le programme d'exemple fourni Test des appels Console CP/M assure la démonstration de tous ces appels de fonctions CP/M.

Un programme pour CP/M peut se terminer de plusieurs façons :
- par un appel CALL 5 après avoir stocké la valeur 0 dans le registre C,
- par un saut JMP ou un appel CALL vers l'adresse 0000h ou encore
- par un RST 0.
En début d'exécution du programme CP/M, cette adresse 0000h a été empilée sur la pile, ce qui permet donc aussi de provoquer l'arrêt avec une instruction RET.

L'espace mémoire

Une fois que vous avez chargé ou rédigé et vérifié un programme, vous le faites traduire en binaire et l'implantez en mémoire avec le bouton Assembler. En cas d'erreur, un message apparaît en rouge sous ce bouton.

En cas de réussite de l'assemblage, le code machine et les adresses sont visibles dans le panneau du bloc mémoire Pour plus de confort, les instructions sont rappelées dans la colonne de droite.

Ce mode d'affichage est fort pratique pendant l'exécution pas à pas avec Step, car la ligne à exécuter est affichée en surbrillance.

Le processeur CPU

Le tableau montre l'état des registres du processeur : le pointeur d'instruction (PC), le pointeur de pile SP, les sept registres de travail A, B, C, D, E, H, L et celui des drapeaux de condition (flags).

Quatre boutons de contrôle sont proposés :

* Le micro-processeur original Intel 8080 fonctionnait à la vitesse d'horloge de 2 MHz. Les instructions (comprenant les opérations de chargement fetching par lecture mémoire) réclamaient entre 4 et 11 cycles d'horloge. Les instructions étaient enchaînées au rythme d'environ 200 000 à 500 000 par seconde.

La console

Le panneau Console sert d'écran de dialogue avec l'utilisateur. Y apparaissent les affichages du programme et les lettres et chiffres saisis par vous lors d'un appel système CP/M de lecture clavier. Dans le doute, cliquez dans le panneau pour commencer la saisie. Un bouton d'effacement Vider est prévu.


Retour au sommaire