36
Le language Assembleur 8086 Le language Assembleur 8086

Chap7Assembleur8086

Embed Size (px)

Citation preview

Page 1: Chap7Assembleur8086

Le language Assembleur 8086Le language Assembleur 8086

Page 2: Chap7Assembleur8086

Plan1. Introduction

2. Les registres

3. Gestion de la mémoire

4. Les modes d’adressage

5. Programmation en Assembleur 8086

6. Réalisation pratique d’un programme

Page 3: Chap7Assembleur8086

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)

Page 4: Chap7Assembleur8086

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).

Page 5: Chap7Assembleur8086

Les Bus

• Pour la machine 8086 :

– Bus de données : 16 bits

– Bus d'adresses : 20 bits

• Pour des machine plus récentes :

Page 6: Chap7Assembleur8086

2. Les registres du 8086

Page 7: Chap7Assembleur8086

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,

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

Page 8: Chap7Assembleur8086

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 sous-programmes. .

– 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

Page 9: Chap7Assembleur8086

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

Page 10: Chap7Assembleur8086

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

Page 11: Chap7Assembleur8086

Les registres du 8086

Page 12: Chap7Assembleur8086

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 :

Page 13: Chap7Assembleur8086

Le registre d'état

Page 14: Chap7Assembleur8086

2. Gestion de la mémoire du microprocesseur 8086

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

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

Page 15: Chap7Assembleur8086

Ségmentation de la mémoire

Questions : Quel est le nombre de segments possibles :

Pourquoi l'adresse est un multiple de 16 ?

Page 16: Chap7Assembleur8086

Ségmentation de la mémoire

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

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

2. - 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.

Page 17: Chap7Assembleur8086

Calcul de l’adresse physique :

Adresse physique = 16 × segment + offset

Exemple :

l'adresse logique 3100h : 27EEh

l'adresse physique

31000h + 27EEh = 337EEh

Page 18: Chap7Assembleur8086

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

Remarque : les segments peuvent se

chevaucher ou se recouvrir complètement.

Page 19: Chap7Assembleur8086

3. Les modes d’adressage du microprocesseur 8086Un 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 ; retour d'un sous-programme

MOVSB ; 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 ; copie dans DX la valeur 4 (codé sur 16 bit)

MOV AL, 12 ; copie dans AL la valeur 12 (8 bits)

MOV AH, 3Ah ; copie dans AL la valeur 3A hexa

Page 20: Chap7Assembleur8086

3. Adressage de registre (inhérent) :

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

Exemple :

MOV DX, DI ; copie dans DX la valeur contenue dans DI

MOV AL, BH ; 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, BP }

Index= { DI, SI }

déplacement = { Aucun, valeur 8 bit, valeur 16 bits)

���� Possibilité d’adressage très variés

Page 21: Chap7Assembleur8086

[BX + SI] + [d8] [BX + SI] + [d16][BX + DI] + [d8] [BX + DI] + [d16][BP + SI] + [d8] [BP + SI] + [d16][BP + DI] + [d8] [BP + DI] + [d16]

Base+déplacement +Index

[BX + SI] [BX + DI] [BP + SI] [BP + DI]

Adressage basé indexé

Base+Index

[DI]+[d8][SI]+[d16] [DI]+[d8][SI]+[d16]

Index+ déplacement

[DI] [SI]

Adressage indexé

Index

[BX]+[d8] [BX]+[d16][BP]+[d8][BP]+[d16]

Base +déplacement

[BX][BP]

Adressage basé

Base

[d8][d16]Adressage direct

Déplacement

Combinaisons possibles Mode d'adressage Formule de L’offset

Page 22: Chap7Assembleur8086

Adressage baséMOV DX, [BX] ; copie dans DX le mot d'adresse DS:BX

MOV DX, TABLE[BX] ; copie dans DX le mot d'adresse S:(BX+TABLE)

MOV 5[BP], AL ; AL est copié dans l'octet d'adresse SS:(BP+5)

MOV DH, [BX + VEC]

Adressage indexéMOV BX, [DI] ; copie le mot d'adresse DS:DI dans le registre BX

MOV AL, 13[SI] ; copie dans AL l'octet d'adresse DS:(SI+13)

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

Exemples d'adressage indirect

Page 23: Chap7Assembleur8086

4.1 . Syntaxe d’une instruction en assembleur

Commentaire(facultatif)

opérande (selon opération)

Opération(obligatoire)

Label(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. Programmation en Assembleur 8086

Page 24: Chap7Assembleur8086

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 ).

Page 25: Chap7Assembleur8086

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

Déclaration des segments

seg_pile SEGMENT stack ; mot clef stack (pile)DW 100 dup (?) ; reserve espace

seg_pile ENDS

Définitions de constantes :

nom constante EQU valeur

Exemple : escape equ 1BH

Page 26: Chap7Assembleur8086

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

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

DB : Define Byte, (1 octets)

DW : Define Word, (2 octets)

DD : Define Double, (4 octets)

DQ : Define Quadruple, (8 octets)

Exemple

data SEGMENT

truc DW 0F0AH ; en hexa

masque DB 01110000b ; en binaire

data ENDS

Page 27: Chap7Assembleur8086

data SEGMENT

machine db 10, 0FH ; 2 fois 1 octet

chose db -2, ’ALORS’

data ENDS

• Déclaration des tableaux

• Déclaration d’une procédure

Calcul PROC near ; procedure nommee Calcul

... ; instructions

Calcul ENDP ; fin de la procedure

CALL Calcul ;Appel de la procédure

Page 28: Chap7Assembleur8086

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)

Page 29: Chap7Assembleur8086

Type d'opérandes

b. Jeu d'instructions du microprocesseur 8086

Page 30: Chap7Assembleur8086
Page 31: Chap7Assembleur8086

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

;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 SEGMENT

Addition PROC

ASSUME DS:data ; Attribution du registre de segment de donnée

ASSUME CS:code ; Attribution du registre de segment de code

4.3. Exemple de programmes :

Page 32: Chap7Assembleur8086

debut :

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

MOV AX, data ; première instruction

MOV DS, AX ; 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 ;48 le code ASCII de 0

MOV AH, 2 ; fonction du DOS qui afficheINT 21H ; à l'écran le caractère se trouvant dans DL

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

MOV AH, 4CH ; fin de traitement et retour au DOS

INT 21H

Addition ENDP ; fin de procédure

code ENDS ; fin de segment

END debut ; fin des instructions.

Page 33: Chap7Assembleur8086

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

data SEGMENT ; ; Segment de donnéeschaine DB 'Hello world\0'data ENDS

code SEGMENT ; Segment de codeASSUME DS:data, CS:code

main:MOV AX,data ; Initialisation du registre de MOV DS,AX ; segment de données

MOV BX,offset chaine ; Chargement de l'adresse de la ; chaîne dans BX Il s'agit de ; l'adresse relative au début du ; segment

Page 34: Chap7Assembleur8086

MOV CX,0 ; Initialisation compteur

loop: MOV AL,[BX] ; transfert des caractères dans AL ; Adressage indirect

CMP AL,0 ; Test de fin de chaîneJZ finiINC BX ; Incrémentation pointeurINC CX ; Incrémentation compteurJMP loop

fini:MOV AH,4CH ; retour au DosINT 21H

code ENDS

END main

Page 35: Chap7Assembleur8086

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

fichier.COM

Page 36: Chap7Assembleur8086

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

� Il est normalement distribué avec toutes les versions du système MS/DOS.

� 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 ;

Le programme DebugLe programme Debug