0% ont trouvé ce document utile (0 vote)
107 vues6 pages

Introduction à l'assembleur 8086

Ce document décrit l'architecture du processeur Intel 8086 et les principes de base d'un assembleur. Il contient de nombreuses informations techniques sur le format des instructions et des adresses du processeur, ainsi que la syntaxe et le fonctionnement d'un assembleur. Le document est long et détaillé.

Transféré par

Mohamed amine lachi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
107 vues6 pages

Introduction à l'assembleur 8086

Ce document décrit l'architecture du processeur Intel 8086 et les principes de base d'un assembleur. Il contient de nombreuses informations techniques sur le format des instructions et des adresses du processeur, ainsi que la syntaxe et le fonctionnement d'un assembleur. Le document est long et détaillé.

Transféré par

Mohamed amine lachi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Systèmes Informatiques I ☛ Table des matières

Partie I: Assembleur 1. Introduction


Jürgen Harms 2. L’architecture du CPU Intel 8086
[email protected] 3. Principes d’un assembleur
http://cui.unige.ch
4. Le répertoire d’instructions
5. Variables et expressions
6. Aspects méta-assembleur
7. Extensions de l’architecture de la famille 8086
Page de couverture 8. Principes de l’entrée / sortie
Liste des instructions du CPU Intel 8086
Littérature et références
Mots-clé
‘Boutons’ dans … début du chapitre … fin du chapitre
les documents:
… page précédente … page en arrière
… page suivante … page d’acceuil

Systèmes Informatiques I, autres douments :


Partie I: Assembleur (fragmentée pour web) *)
Partie II: UNIX
Travaux pratiques
*) 1 document PDF d’environ 200 kbytes pour chaque chapitre
pas de chaînage ‘hypertexte’ (PDF) entre documents

UNIVERSITÉ DE GENÈVE Version 2.31 - 2000 / 01 (document PDF intégré)


Table des matières
Pour accéder à une page, sélectionner la page avec un “click” de la sourris
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 - Le rôle du bit “carry” (report arithmétique, décalage) . . . . . . . 2.19
Table des matières
Buts (cours, document) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Quelques opérations typiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.20
Evolution des familles de microprocesseurs . . . . . . . . . . . . . . . . . . . . 1.5 Adressage Intel 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.21
Exemple simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.21
Modes d’adressage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.22
Code-source et code-objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6
Combinaison des modes (phase 1 et 2) . . . . . . . . . . . . . . . . . . . . . . 2.24
Segments et adresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7
- Modes d’adressage (exemples Intel 8086) . . . . . . . . . . . . . . . . . 2.25
Parties principales d’un programme en machine . . . . . . . . . . . . . . 1.8
Description de la “zone-instructions” d’un programme . . . . . . . . . 1.9 PRINCIPES D’UN ASSEMBLEUR . . . . . . . . . . . . . . . . . . . . . . . . 3.1
L’ARCHITECTURE DU CPU INTEL 8086 . . . . . . . . . . . . . . . . . 2.1 Assembleur : introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2
Configuration d’un système Intel 8086 . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Caractéristiques d’un assembleur . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3
Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4
Mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3
Forme générale d’une instruction MASM . . . . . . . . . . . . . . . . . . . 3.4
Mot-mémoire à l’adresse ‘n’, “sexe des bytes” . . . . . . . . . . . . . . . 2.3
Signification des champs de l’instruction . . . . . . . . . . . . . . . . . . . . 3.5
Implantation physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4
- Champ d’étiquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5
- Plan de la mémoire (Intel 8086) . . . . . . . . . . . . . . . . . . . . . . . . . 2.4
- Champ d’opération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5
Mémoire physique et mémoire logique . . . . . . . . . . . . . . . . . . . . . 2.5
- Champ d’opérande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6
Représentation externe des adresses . . . . . . . . . . . . . . . . . . . . . . . . 2.5
- Champ de commentaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6
Génération une adresse-bus dans le CPU . . . . . . . . . . . . . . . . . . . . 2.6
Syntaxe : constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7
La pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7
- Format des constantes numériques . . . . . . . . . . . . . . . . . . . . . . 3.7
Séquence physique - séquence logique . . . . . . . . . . . . . . . . . . . . . . 2.9
- Format des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . 3.7
Instructions et données d’un programme . . . . . . . . . . . . . . . . . . . . 2.10
Spécification d’adresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8
Format d’une opération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11

Systèmes Informatiques I - Assembleur


- Sélection du mode d’adressage . . . . . . . . . . . . . . . . . . . . . . . . . 3.8
Champs du code d’une opération . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11 Mode d’adressage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9
- Opérandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11 - Calcul de l’adresse effective . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9
Propriétés des opérations du CPU Intel 8086 . . . . . . . . . . . . . . . . . 2.12 - Recherche de l’opérande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10
Différences entre instructions-assembleur et instructions-machine 2.13 Génération de code-objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11
Registres du CPU Intel 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.15 Tables de code-objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11
Registres-opérandes et d’indexage . . . . . . . . . . . . . . . . . . . . . . . . . 2.15 Segment logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11
Recouvrement des registres à 8 et à 16 bits . . . . . . . . . . . . . . . . . . 2.16 Compteur de position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12
Registres de base (“segment registers”) . . . . . . . . . . . . . . . . . . . . . 2.17 - Rôle du compteur de position . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12
Compteur ordinal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17 - Contrôle du compteur de position . . . . . . . . . . . . . . . . . . . . . . . 3.12
Registre d’état (“flag register”) . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.18 - Valeur du compteur de position . . . . . . . . . . . . . . . . . . . . . . . . . 3.12
2. 1. 2001 - Matières 1 - Version 2.31 - 2000 / 01
- Compteur de position et compteur-ordinal . . . . . . . . . . . . . . . . . 3.13 Extension du bit de signe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9
- Valeur initiale du compteur-ordinal lors de l’exécution . . . . . . 3.13 Opérations itératives, actions sur chaînes de caractères . . . . . . . . . . . 4.10
Contrôle des segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14 Résumé des instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10
L‘instruction SEGMENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14 Contrôle des itérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11
Association du code-objet à un segment logique . . . . . . . . . . . . . . 3.15 Contrôle des bits du registre ‘flags’ . . . . . . . . . . . . . . . . . . . . . . . . . . 4.12
- Décomposition du code en segments logiques . . . . . . . . . . . . . . 3.15
Diverses opérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.12
- Gestion à l’aide d’un compteur de position . . . . . . . . . . . . . . . . 3.15
- Alternance entre segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.15 VARIABLES ET EXPRESSIONS . . . . . . . . . . . . . . . . . . . . . . . . . 5.1
- Exemple: résultat du travail de l’éditeur de liens . . . . . . . . . . . 3.16
Placement de segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.17 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2
Alignement de l’adresse de base d’un segment . . . . . . . . . . . . . . . 3.18 Composantes d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2
Définition d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3
Gestion des registres de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19
- Visibilité d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3
Initialisation des registres de base . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19
- Réalisation (assembleur et éditeur de liens) . . . . . . . . . . . . . . . . 3.20 Types de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4
Association segments logiques - registres de base . . . . . . . . . . . . . 3.21 Etiquettes (“labels”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4
Gestion des registres de base, exemple . . . . . . . . . . . . . . . . . . . . . . 3.22 Variables relogeables (“variables”) . . . . . . . . . . . . . . . . . . . . . . . . 5.5
Contrôle des segments, résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.24 Constantes (“numbers”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5
Exemple d’un programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.25 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6
Définition de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.26 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7
Pseudo-instructions pour la réservation et définition de données . . 3.26 Fonction pour l’accès au compteur de position . . . . . . . . . . . . . . . 5.7
- La fonction DUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.27 Fonctions pour obtenir les attributs d’un “RECORD” . . . . . . . . . . 5.7
- Constantes-caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.27 Fonctions pour obtenir les attributs d’une variable . . . . . . . . . . . . 5.8
- Formats possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.27 Fonctions pour manipuler les attributs d’une variable . . . . . . . . . . 5.9
Réservation de données, exemples . . . . . . . . . . . . . . . . . . . . . . . . . 3.28 Fonctions comme opérateurs dans une expression . . . . . . . . . . . . . 5.10

LE RÉPERTOIRE D’INSTRUCTIONS . . . . . . . . . . . . . . . . . . . . . . . 4.1 ASPECTS MÉTA-ASSEMBLEUR . . . . . . . . . . . . . . . . . . . . . . . . . 6.1

Systèmes Informatiques I - Assembleur


Opérations utilisant la pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Assemblage conditionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2
Utilisation d’une pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 - Conditions reconnues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2
Opérations utilisant la pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 - Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3
Opérations de branchement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Assemblage répétitif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4
Forme des instructions de branchement . . . . . . . . . . . . . . . . . . . . . 4.4 Substitutions de chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6
Branchements sans condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Macro-assemblage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7
Branchements pour itérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Définition d’une macro-instruction . . . . . . . . . . . . . . . . . . . . . . . . 6.7
Branchements conditionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Appel d’une macro-instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7
Opérations arithmétiques & logiques . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 - Principes de la substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7
2. 1. 2001 - Matières 2 - Version 2.31 - 2000 / 01
Déclaration de variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.8 - Fin de l’opération d’entrée / sortie physique . . . . . . . . . . . . . . . 8.8
Séparateur de chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . 6.8 - Interruption d’entrée / sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.9
Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.9 Initialisation d’un équipement d’entrée / sortie . . . . . . . . . . . . . . . 8.10
- Macro instruction pour imprimer une chaîne de caractères . . . . 6.9 - Opération “reset” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.10
- Macro instructions pour la gestion de files d’attente . . . . . . . . . 6.10 - Séquence d’initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.10
Importation de code-source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.13 Adressage des registres internes . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.11
Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.12
Décomposition en modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.14 Entrée / sortie “memory-mapped” ou “non-memory-mapped” . . . 8.13
Procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.14
ACIA (Motorola 6850) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.14
Utilisation de variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.14
Utilisation de procédures, exemple . . . . . . . . . . . . . . . . . . . . . . . . . 6.15 Tâches de l’interface ACIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.15
Standard V.24 de l’UIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.15
Contrôle de l’impression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16 - Signaux échangés entre l’interface et le modem . . . . . . . . . . . . 8.16
Suppression de l’impression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16 Signification des contenus des registres (ACIA) . . . . . . . . . . . . . . 8.17
Lignes d’en-tête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16 - Le registre “status” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.17
Mise-en-page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16 - Le registre “contrôle” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.18
Impression de code conditionnel . . . . . . . . . . . . . . . . . . . . . . . . . . 6.17 ACIA: Schéma (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.20
Impression des macro-instructions . . . . . . . . . . . . . . . . . . . . . . . . . 6.17 Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.24
EXTENSIONS DE L’ARCHITECTURE DE LA FAMILLE 8086 . . . . . 7.1 LISTE DES INSTRUCTIONS DU CPU INTEL 8086
Evolution de l’architecture du CPU 8086 . . . . . . . . . . . . . . . . . . . . 7.2 LITTÉRATURE ET RÉFÉRENCES
Agrandissement de la taille d’un mot-CPU a 32 bits . . . . . . . . . . . 7.3
Espace-mémoire, mode d’adressage . . . . . . . . . . . . . . . . . . . . . . . . 7.4
- Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4
- Descripteurs de segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5
- Désignation d’un descripteur par un registre de base . . . . . . . . 7.6
Pagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6

Systèmes Informatiques I - Assembleur


Extension du répertoire d’instructions . . . . . . . . . . . . . . . . . . . . . . . . . 7.7

ENTRÉE / SORTIE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1


Entrée / sortie dans un système micro-informatique . . . . . . . . . . . . . . 8.2
Concept architectural . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2
Fonctionnement des opérations d’entrée / sortie . . . . . . . . . . . . . . . 8.3
Registres internes des équipements d’entrée / sortie . . . . . . . . . . . 8.4
Déroulement d’une opération d’entrée / sortie . . . . . . . . . . . . . . . . 8.5
- Ecriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5
- Lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6
- Esquisse d’un contrôleur DMA . . . . . . . . . . . . . . . . . . . . . . . . . 8.7
2. 1. 2001 - Matières 3 - Version 2.31 - 2000 / 01
J. Harms, Université de Genève, 2. 1. 2001

1. Introduction
Chapitre 1 :

Introduction

Résumé :

☛ Buts du cours sur l’assembleur

☛ Familles de microprocesseurs
Version 2.31 - 2000 / 01

☛ Illustration simple d’un programme assembleur


/user/u2/harms/cours/asm/1.fm

Systèmes informatiques I - Assembleur - 1.1 - Introduction


Buts (cours, document)
J. Harms, Université de Genève, 2. 1. 2001

☛ Buts du cours
➔ Maîtrise de la programmation d’une machine en langage de base
• base pour des activités professionnelles toujours d’actualité (bien que taux d’utilisation
relativement faible):
- programmation en langage de base,
- compréhension des principes de bas niveau,

• compréhension du fonctionnement du matériel:
- contrôle directe du CPU,
- mécanisme de base des opérations d’entrée/sortie,
• aspects “culturels” (développement historique).
Version 2.31 - 2000 / 01

➔ Familiarisation avec un système simple du genre MS-DOS:


• système = support de programmes écrit en assembleur,
• système = support pour les actions fondamentales de l’utilisateur.
/user/u2/harms/cours/asm/1.fm

Systèmes informatiques I - Assembleur - 1.2 - Introduction

Vous aimerez peut-être aussi