Vous êtes sur la page 1sur 7

Plan du cours

Niveaux de programmation

Codage des instructions


Chap 4 : Programmation assembleur
Mode d’adressage
des architectures 80x86
Structure du programme assembleur
Partie 1 : Introduction au langage
assembleur 80x86

Manel Abdelhedi

2 Chapitre 4 : L’assembleur 80x86 MC1

Niveaux de programmation Niveaux de programmation


Langage machine Langage assembleur
Le programmeur a le choix entre différents langages Le langage assembleur est le premier langage non binaire
(Assembleur, C, Java…) mais la machine ne comprends que le accessible au programmeur.
langage machine (instructions binaires). Code mnémonique : un mot rappelle le rôle de l’instruction.
Chaque type de processeur a son propre langage machine.
Par exemple :
La programmation directe du processeur avec les instructions
machines
AX= AX+BX ≡ ADD AX, BX.
Difficile Signification plus claire qu’en code machine.
Compréhension quasi impossible Une instruction assembleur = une instruction machine.
Par exemple, AX= AX +BX est codée par : 03 C3 Forme générale d’une instruction assembleur :
Solution : utilisation d’un langage de plus haut niveau associant Mnémoniques opérande(s)
un mnémonique à chaque instruction machine : assembleur.
3 Chapitre 4 : L’assembleur 80x86 MC1 4 Chapitre 4 : L’assembleur 80x86 MC1
Niveaux de programmation Niveaux de programmation
Assembleur Assembleur, Compilateur, éditeur de lien
Un assembleur = programme convertissant un fichier texte Editeur de lien : combine
contenant des instructions assembleur en code machine. plusieurs programmes en langage
machine en un seul programme
Un compilateur = programme opérant des conversions complet et exécutable.
similaires pour les langages de haut niveau.
Chaque type de processeur ayant son propre langage machine
et son propre langage d’assemblage.
Chargeur : charge le programme
complet obtenu par l’éditeur de
lien en mémoire centrale.

5 Chapitre 4 : L’assembleur 80x86 MC1 6 Chapitre 4 : L’assembleur 80x86 MC1

Niveaux de programmation
Assembleur, Compilateur, éditeur de lien Plan du cours
Niveaux de programmation

Codage des instructions

Mode d’adressage

Structure du programme assembleur

7 Chapitre 4 : L’assembleur 80x86 MC1 8 Chapitre 4 : L’assembleur 80x86 MC1


Codage des instructions Plan du cours
Les instructions et leurs opérandes sont stockées en mémoire Niveaux de programmation
principale.
La taille totale d’une instruction dépend de son type et du type Codage des instructions
de l’opérande. Mode d’adressage
Composée de deux champs
Structure du programme assembleur
Code opération : identifiant de l’instruction à réaliser.
Code opérande : contenant la donnée, ou sa référence
( adresse) en mémoire.

Code opération Code opérande

9 Chapitre 4 : L’assembleur 80x86 MC1 10 Chapitre 4 : L’assembleur 80x86 MC1

Modes d’adressage Modes d’adressage


Les instructions ont un nombre et un type variables Adressage immédiat
d’opérandes. Le champ opérande contient la donnée (une valeur constante)
Mais, en général en nombre fixé (0 à 3).
Exemples : mov ax, 16 (décimal)
Une instruction sera codée par 1, 2, 3 ou 4 octets, selon la
mov ax, 11b (binaire)
manière dont la donnée est spécifiée, c.à.d. selon le mode
mov ax, ffc2h (hexadécimal)
d’adressage de la donnée.
Adressage implicite
L’instruction contient seulement le code opération qui indique
où se trouve l’opérande.
L’opérande n’est pas spécifié explicitement, par exemple
incrémenter AX

11 Chapitre 4 : L’assembleur 80x86 MC1 12 Chapitre 4 : L’assembleur 80x86 MC1


Modes d’adressage Modes d’adressage
Adressage direct Adressage indirect par registre
Le champ opérande contient l’adresse de la donnée en L’opérande est une adresse mémoire contenue dans un
mémoire. registre.
Exemple : mov ax, [3ah] Exemple : mov ax, [sp] (ax sommet de la pile)

Notation : A : adresse A ≠ [A] : donnée à l’adresse A. Adressage indexé


Adressage par registre L’opérande est une adresse mémoire contenue dans un
L’opérande est un registre. Mode le plus courant. registre associé à un décalage.

Exemple : mov ax, bx Exemple : mov ax, [sp + 4]

13 Chapitre 4 : L’assembleur 80x86 MC1 14 Chapitre 4 : L’assembleur 80x86 MC1

Modes d’adressage Plan du cours


Exercice 1 : Niveaux de programmation
Préciser pour chacune des instructions suivantes le mode
d’adressage ? Codage des instructions

mov al, [47CFh] Mode d’adressage


ADD AL, 0Ch Structure du programme assembleur
INC AX
MOV AX, [SI+2]
add ax, bx

15 Chapitre 4 : L’assembleur 80x86 MC1 16 Chapitre 4 : Langage Assembleur MC1


Structure du programme assembleur Structure du programme assembleur
TITLE nom ; donner un nom au programme Un programme écrit en assembleur contient des définitions de
PILE SEGMENT STACK ; déclaration d’un segment de pile dont le nom est pile données et des instructions.
..........
.......... Les données sont déclarées par des directives (mots clefs
PILE ENDS ; fin de la déclaration de la pile
spéciaux que comprend l’assembleur )
DONNEE SEGMENT ; déclaration d’un segment de données qui va contenir les variables
........... Les directives qui déclarent des données sont regroupées dans
DONNEE ENDS ; fin de la déclaration de données
le segment de données qui est délimité par les directives
CODE SEGMENT ; déclaration du segment de code qui va contenir le code
SEGMENT et ENDS.
ASSUME DS : DONNEE, CS : CODE ; génération de l’adresse du segment de code
; et de données Les instructions sont placées dans un autre segment, le
Debut: ; étiquette d’indication du point d’entrée du code segment de code.
.................................
CODE ENDS ; fin de la déclaration du code
END Debut ; fin du point d’entrée du code

17 Chapitre 4 : L’assembleur 80x86 MC1 18 Chapitre 4 : L’assembleur 80x86 MC1

Structure du programme assembleur Structure du programme assembleur


La directive ASSUME permet d’indiquer à l’assembleur quel Une ligne de code = 4 champs (certains optionnels)
est le segment de données et celui de code, afin qu’il génère
des adresses correctes.

La première instruction du programme doit toujours être


repérée par une étiquette.
Le fichier doit se terminer par la directive END nom de
l’étiquette de la première instruction.

19 Chapitre 4 : L’assembleur 80x86 MC1 20 Chapitre 4 : L’assembleur 80x86 MC1


Structure du programme assembleur Structure du programme assembleur
Directives Directive EQU
Directives destinée à l’assembleur, pas au processeur. Equ peut être utilisée pour définir un symbole.
Pour indiquer à l’assembleur une tâche à faire ou l’informer. Un symbole = constante nommée utilisable dans le programme
assembleur
Pas traduite en code machine.
Format
Utilisations courantes:
Définition de constantes Symbole equ valeur
Définition de mémoire pour stocker des données Valeur d’un symbole n’est pas redéfinissable.
Grouper la mémoire en segment… Exemples :
Nombre equ 25

21 Chapitre 4 : L’assembleur 80x86 MC1 22 Chapitre 4 : L’assembleur 80x86 MC1

Structure du programme assembleur Structure du programme Assembleur


Directives de données Directives de données
Utilisées dans les segments de données pour réserver de la Exemples :
place en mémoire.
Alpha DB 50 ; définit une variable alpha initialisée à 50
Directives DX : Alloue de la place suivant X et donne une
valeur initiale Table DW 2, 3, 4 ; définit un tableau de trois mots initialisés à 2, 3, 4
Mtable dw 10 dup (0) ; définit un tableau de 10 mots initialisés à 0.
Unité Lettre Y db ? ; définit un octet non initialisé
Octet B
Car DB ; définit un octet = code ASCII du A (65).
Mot (2 octets) W
Chaîne DB ‘Bonjour$’ ; définit une chaîne de caractère.
Double mot (4 octets) D
Quadruple mot (8 octets) Q
L’assembleur attribue à chaque variable une adresse
Dix octets T

23 Chapitre 4 : L’assembleur 80x86 MC1 24 Chapitre 4 : L’assembleur 80x86 MC1


Structure du programme assembleur Structure du programme assembleur
Directives de données Spécification de la taille des données
Exercice 2 : Dans certains cas, l’adressage indirect est ambigu. Par exemple
Combien d’octets les séquences suivantes réservent en MOV [BX], 0 ; range 0 à l’adresse spécifiée par bx
mémoire ? l’assembleur ne sait pas si l’instruction concerne 1ou 2 octets
Tab1 DB ‘A’, ‘9’, 9, ?, 3DUP(0) consécutifs.
Tab2 DW 10 DUP(?), 12, 11 Afin de lever l’ambiguïté, on doit utiliser une directive
spécifiant la taille de la donnée à transférer :
Tab3 DD 12 DUP(?)
MOV byte ptr [BX], val ; concerne 1 octet
MOV word ptr [BX], val ; concerne 1 mot de 2 octets

25 Chapitre 4 : L’assembleur 80x86 MC1 26 Chapitre 4 : L’assembleur 80x86 MC1

Vous aimerez peut-être aussi