Vous êtes sur la page 1sur 36
Le Le language language Assembleur Assembleur 8086 8086

LeLe languagelanguage AssembleurAssembleur 80868086

1. Introduction 2. Les registres Plan 3. Gestion de la mémoire 4. Les modes d’adressage

1. Introduction

2. Les registres

Plan

3. Gestion de la mémoire

4. Les modes d’adressage

5. Programmation en Assembleur 8086

6. Réalisation pratique d’un programme

1. Introduction • langage assembleur : langage de bas niveau • Intimement lié au fonctionnement

1. Introduction

• langage assembleur : langage de bas niveau

• Intimement lié au fonctionnement de la machine

• Représentations mnémoniques des instructions machine (faciles à mémoriser).

• Avantages :

– programme plus rapide

– moins gourmand en espace mémoire

– permet d'accéder directement aux ressources matérielles de l'ordinateur (ex ports d'entrées sortie)

Processeur 80 × 86 Micro-processeur 80 × 86 équipent les PC (INTEL) et compatibles –

Processeur 80× 86

Micro-processeur 80× 86 équipent les PC (INTEL) et compatibles

– Premier PC (Début 80) = 8086 microprocesseur 16 bits

– Puis 80286,80386,80486, Pentium…

Amélioration

– Augmentation de la fréquence d'horloge, de la largeur des bus d'adresse et de données

– Ajout de nouvelles instructions et de registres.

Compatibilité ascendante : un programme écrit dans un langage machine 80286 peut s'exécuter dans une machine 80386 (l'inverse est faux).

Les Bus • Pour la machine 8086 : – Bus de données : 16 bits

Les Bus

• Pour la machine 8086 :

– Bus de données : 16 bits

– Bus d'adresses

: 20 bits

• Pour des machine plus récentes :

la machine 8086 : – Bus de données : 16 bits – Bus d'adresses : 20
2. Les registres du 8086

2. Les registres du 8086

2. Les registres du 8086
Les registres du 8086 1. Registres de travail à usage +/- spécialisé : – AX

Les registres du 8086

1. Registres de travail à usage +/- spécialisé :

AX- Accumulateur principal

BX- Spécialisé dans l'adressage indexé

CX (Count) utilisé pour le comptage

DX (Data) utilisé par la multiplication et la division,

DX (Data) utilisé par la multiplication et la division , Chaque registre peut être utilisé comme

Chaque registre peut être utilisé comme 2 registres de 8 bits

Les registres du 8086 2. Registres d'offset – SI : Source Index utilisé lors des

Les registres du 8086

2. Registres d'offset

SI : Source Index utilisé lors des opérations sur des chaines de caractères, associé à DS

DI : Destination Index utilisé lors des opérations sur des chaines de caractères, associé à DS

IP : Instruction Pointer , associé à CS, il indique la prochaine instruction à exécuter. Sa valeur est modifiée par les instructions de branchement et les appels aux

BP : Base Pointer, associé à SS pour accéder aux données de la pile lors d'appels de sous programmes.

SP : Stack Pointer, associé à SS, il indique l'adresse du dernier élément de la pile

Les registres du 8086 • A partir du microprocesseur 80386, tous ces registres sont étendus

Les registres du 8086

• A partir du microprocesseur 80386, tous ces registres sont étendus à 32 bits si leur nom est précédé de E (Extended).,

– EAX, EBX, ECX et EDX – ESP, EDI, EBP, EIP et ESP

Exemple

à 32 bits si leur nom est précédé de E (Extended). , – EAX, EBX, ECX
Les registres du 8086 3. Les registres de segment Registres spécialisés dans l'adressage de segments

Les registres du 8086

3. Les registres de segment

Registres spécialisés dans l'adressage de segments (pages) de la mémoire Centrale. Tout accès à la MC ne peut se faire qu'avec le concours de l'un de ces quatre registres :

CS : Code Segment pointe sur un segment qui contient les instructions du programme exécuté. Travaille avec IP

DS : Data Segment pointe le segment qui contient les données

ES : Extra Segment : registre supplémentaire pour adresser les données

SS : Stack Segment pointe sur le segment qui contient la pile

Les registres du 8086

Les registres du 8086

Les registres du 8086
Les registres du 8086 4. Le registre d'état • Determine l’état courant du microprocesseur. •

Les registres du 8086

4. Le registre d'état

• Determine l’état courant du microprocesseur.

• Son contenu est modifié automatiquement suite aux opérations arithmétique ou logiques,

• Il contient les indicateurs suivants :

est modifié automatiquement suite aux opérations arithmétique ou logiques, • Il contient les indicateurs suivants :
Le registre d'état

Le registre d'état

Le registre d'état
Le registre d'état
2. Gestion de la mémoire du microprocesseur 8086 Le 8086 dispose de 20 bits d'adresse

2. Gestion de la mémoire du microprocesseur 8086

Le 8086 dispose de 20 bits d'adresse accepte jusqu'à 1 Mo de mémoire

bits d'adresse accepte jusqu'à 1 Mo de mémoire limitation registre 16 bits la mémoire est découpée

limitation registre 16 bits la mémoire est découpée en segments de 64 bits

Ségmentation de la mémoire Questions : Quel est le nombre de segments possibles : Pourquoi

Ségmentation de la mémoire

Ségmentation de la mémoire Questions : Quel est le nombre de segments possibles : Pourquoi l'adresse

Questions : Quel est le nombre de segments possibles :

Pourquoi l'adresse est un multiple de 16 ?

Ségmentation de la mémoire Une case mémoire est repérée en moyen de deux quantités sur

Ségmentation de la mémoire

Une case mémoire est repérée en moyen de deux quantités sur 16 bits :

1 .

2 .

- L’adresse de base d'un segment (registre de segment)

- Le déplacement ou offset dans ce segment (registre général)

Adresse logique : La donnée d’un couple segment : offset.

Adresse physique : L’adresse (sur 20 bits ) d’une case mémoire envoyée réellement sur le bus d’adresses A0 - A19.

Calcul de l’adresse physique : Adresse physique = 16 × segment + offset Exemple :

Calcul de l’adresse physique :

Adresse physique = 16 × segment + offset

Exemple :

l'adresse logique

3100h : 27EEh

l'adresse physique 31000h + 27EEh = 337EEh

= 16 × segment + offset Exemple : l'adresse logique 3100h : 27EEh l'adresse physique 31000h
La zone mémoire réservée à un programme utilisateur après son chargement en mémoire Remarque :

La zone mémoire réservée à un programme utilisateur après son chargement en mémoire

un programme utilisateur après son chargement en mémoire Remarque : les segments peuvent se chevaucher ou

Remarque : les segments peuvent se chevaucher ou se recouvrir complètement.

3. Les modes d’adressage du microprocesseur 8086 Un mode d'adressage est la méthode de localisation

3. Les modes d’adressage du microprocesseur 8086

Un mode d'adressage est la méthode de localisation des opérandes qui interviennent dans une opération.

1. Adressage implicite : L'instruction n'utilise aucun opérande ou concerne des registres implicites.

Exemple : RET MOVSB

; retour d'un sous-programme ; copie l'octet d'adresse SI dans celui d'adresse DI

2. Adressage immédiat : l'opérande est une constante fournie immédiatement dans l'instruction.

Exemple : MOV DX, 4 MOV AL, 12 MOV AH, 3Ah

; copie dans DX la valeur 4 (codé sur 16 bit) ; copie dans AL la valeur 12 (8 bits) ; copie dans AL la valeur 3A hexa

3. Adressage de registre (inhérent) : l’opérande se trouve dans un registre de 8 ou

3. Adressage de registre (inhérent) :

l’opérande se trouve dans un registre de 8 ou 16 bits. Exemple :

MOV DX, DI MOV AL, BH

; copie dans DX la valeur contenue dans DI ; le contenu de BH est copié dans AL (8 bits)

4. Adressage de la mémoire Une seule des éventuelles opérandes d’une instruction peut être stockée dans la mémoire. Son offset est calculé par la formule générale suivante :

Offset = Base + Index + déplacement

Base = { BX,

Index= { DI, SI } déplacement = { Aucun, valeur 8 bit, valeur 16 bits) Possibilité d’adressage très variés

BP }

Formule de L’offset Mode d'adressage Combinaisons possibles Déplacement [d8] Adressage direct [d16] Base
Formule de L’offset
Mode d'adressage
Combinaisons possibles
Déplacement
[d8]
Adressage direct
[d16]
Base
[BX]
[BP]
Adressage basé
Base +déplacement
[BX]+[d8]
[BX]+[d16]
[BP]+[d8]
[BP]+[d16]
Index
[DI]
[SI]
Index+ déplacement
[DI]+[d8]
Adressage indexé
[SI]+[d16]
[DI]+[d8]
[SI]+[d16]
Base+Index
[BX + SI]
[BX + DI]
[BP + SI]
[BP + DI]
Adressage basé indexé
Base+déplacement
[BX + SI] + [d8]
+Index
[BX + DI] +
[BP + SI] +
[BP + DI] +
[d8]
[d8]
[d8]
[BX + SI] + [d16]
[BX + DI] + [d16]
[BP + SI] + [d16]
[BP + DI] + [d16]
Exemples d'adressage indirect MOV DX, [BX] MOV DX, TABLE[BX] MOV 5[BP], AL MOV DH, [BX

Exemples d'adressage indirect

MOV DX, [BX] MOV DX, TABLE[BX] MOV 5[BP], AL MOV DH, [BX + VEC]

Adressage basé ; copie dans DX le mot d'adresse DS:BX ; copie dans DX le mot d'adresse S:(BX+TABLE) ; AL est copié dans l'octet d'adresse SS:(BP+5)

Adressage indexé ; copie le mot d'adresse DS:DI dans le registre BX ; copie dans AL l'octet d'adresse DS:(SI+13)

MOV BX, [DI] MOV AL, 13[SI] MOV [VCT + SI], AX MOV [SI], AH

Adressage basé indexé MOV AL, [BX + SI + 2] ; copie l'octet d'adresse DS:(BX+SI+2) dans AL MOV TABLE[BP][DI], AX

4. Programmation en Assembleur 8086 4.1 . Syntaxe d’une instruction en assembleur Label Opération opérande

4. Programmation en Assembleur 8086

4.1 . Syntaxe d’une instruction en assembleur

Label

Opération

opérande (selon opération)

Commentaire

(facultatif)

(obligatoire)

(facultatif)

Label : étiquette attribué à une ligne du programme utile pour les branchements . Il comporte au maximum 31 caractères et se termine par (:) (sauf pour les directives)

Opération : un mnémonique qui définit l’opération à exécuter et qui doit être rigoureusement respecté. ex JUMP, ADD

Opérande : champ qui présente les paramètres éventuels de l’opération ( 0 ou plusieurs données ).

Commentaire : champ commençant par( ;) ou (#) sans valeur pour le programme assembleur

4.2. Structure d’un programme en Assembleur : Un programme en langage assembleur contient deux types

4.2. Structure d’un programme en Assembleur :

Un programme en langage assembleur contient deux types de commandes :

Les instructions proprement dites, qui appartiennent du jeu d'instruction du microprocesseur et seront traduites par le programme assembleur en instructions en langage machine. (déstinées au microprocesseurs)

Les pseudo-instructions ou directives, mots clefs spéciaux qui consistent en des ordres déstinés au programme assembleur sur la façon dont il doit traduire le programme. ( ne génèrent généralement pas d'instructions en langage machine ).

a. Principales Directives pour l’assembleur 8086 - pseudo instructions- Déclaration des segments seg_pile SEGMENT

a. Principales Directives pour l’assembleur 8086 -pseudo instructions-

Déclaration des segments

seg_pile

SEGMENT stack DW 100 dup (?)

; mot clef stack (pile) ; reserve espace

seg_pile

ENDS

Définitions de constantes :

nom constante EQU valeur

Exemple : escape equ 1BH

a. Principales Directives pour l’assembleur 8086 (suite) Déclaration des variables ( Réservation de cases mémoires

a. Principales Directives pour l’assembleur 8086 (suite)

Déclaration des variables (Réservation de cases mémoires )

DB : Define Byte, DW : Define Word, DD : Define Double,

DQ : Define Quadruple, (8 octets)

(1 octets) (2 octets) (4 octets)

Exemple

data

SEGMENT

 

truc

DW

0F0AH

; en hexa

data

masque DB ENDS

01110000b

; en binaire

• Déclaration des tableaux data SEGMENT data machine db 10, 0FH ; 2 fois 1

Déclaration des tableaux

data

SEGMENT

data

machine db 10, 0FH ; 2 fois 1 octet chose db -2, ’ALORS’ ENDS

Déclaration d’une procédure

db -2, ’ALORS’ ENDS • Déclaration d’une procédure Calcul PROC near ; procedure nommee Calcul Calcul

Calcul

PROC near

; procedure nommee Calcul

Calcul

ENDP

; instructions ; fin de la procedure

CALL

Calcul

;Appel de la procédure

b. Jeu d'instructions du microprocesseur 8086 • Instructions de transfert de données (affectation) • Instructions

b. Jeu d'instructions du microprocesseur 8086

• Instructions de transfert de données (affectation)

• Instructions Arithmétiques et logiques

• Instructions de branchement (saut de programme)

b. Jeu d'instructions du microprocesseur 8086 Type d'opérandes

b. Jeu d'instructions du microprocesseur 8086

Type d'opérandes

b. Jeu d'instructions du microprocesseur 8086 Type d'opérandes
4.3. Exemple de programmes :

4.3. Exemple de programmes :

;---------------------------------------------------------------------------------------------------------

;Programme calculant la somme de 6 et 3 et l'affiche

;---------------------------------------------------------------------------------------------------------

; Définition du segment de donnée -----------------------------------------------------------

data

SEGMENT

A

DB

6

; A = 6

B

DB

3

; B = 3

Somme

DB

?

; Resultat

data

ENDS

; Définition du segment de code et début du code ----------------------------------------

code

Addition

SEGMENT

PROC ASSUME DS:data ASSUME CS:code

; Attribution du registre de segment de donnée ; Attribution du registre de segment de code

debut : ; Pointage des données------------------------------------------------------------ MOV AX, data MOV DS, AX ;

debut :

; Pointage des données------------------------------------------------------------

MOV AX, data MOV DS, AX

; première instruction ; initialisation de DS

; Le programme d'addition -------------------------------------------------------- MOV AL, A ADD AL, B

MOV result, AL

; rangement résultat

; Conversion ASCII puis Affichage--------------------------------------------- Mov DL, Result

Add DL, 48 MOV AH, 2 INT 21H

;48 le code ASCII de 0 ; fonction du DOS qui affiche ; à l'écran le caractère se trouvant dans DL

; Retour au DOS--------------------------------------------------------------------

Addition

code

MOV AH, 4CH INT 21H

ENDP ENDS END debut

; fin de traitement et retour au DOS

; fin de procédure ; fin de segment ; fin des instructions.

;-------------------------------------------------------------------------------------------------- ; Programme qui

;--------------------------------------------------------------------------------------------------

; Programme qui calcule la longueur d'une chaine de caractère

;--------------------------------------------------------------------------------------------------

data

SEGMENT

;; Segment de données

chaine

DB 'Hello world\0'

data

ENDS

code

SEGMENT ASSUME DS:data, CS:code

; Segment de code

main:

MOV AX,data MOV DS,AX

MOV BX,offset chaine

; Initialisation du registre de ; segment de données

; Chargement de l'adresse de la

; chaîne dans BX Il s'agit de

; l'adresse relative au début du

; segment

MOV CX,0 ; Initialisation compteur loop: MOV AL,[BX] ; transfert des caractères dans AL CMP

MOV CX,0

; Initialisation compteur

loop:

MOV AL,[BX]

; transfert des caractères dans AL

CMP AL,0

; Adressage indirect ; Test de fin de chaîne

JZ

fini

INC BX

; Incrémentation pointeur

INC CX

; Incrémentation compteur

JMP loop

fini:

 

MOV AH,4CH INT 21H

; retour au Dos

code

ENDS

END main

 
5. Réalisation pratique d’un programme en assembleur fichier.COM

5. Réalisation pratique d’un programme en assembleur

fichier.COM
fichier.COM
Le Le programme programme Debug Debug debug est un programme qui s’exécute sur PC (sous

LeLe programmeprogramme DebugDebug

debug est un programme qui s’exécute sur PC (sous DOS) et qui permet de manipuler des programmes en langage symbolique.

est

MS/DOS.

Il

normalement

distribué

avec

toutes

les

versions

du

système

Les fonctionnalités principales de debug sont les suivantes :

L' Entrée d’un programme en langage symbolique ; debug traduit les instructions en langage machine

L’exécution pas a pas;

La visualisation du contenu des registres et de la mémoire ;