Assembleur
Assembleur
Assembleur
ASSEMBLEUR
Microprocesseur 8086
Invention de l'assembleur
2
Langages Haut niveau
Les langages de programmation indépendants du matériel sont
7
Assembleur et processeur
Chaque famille de processeurs possède son propre ensemble
8
Évolution des processeurs Intel
10
Processeur 8085 (1976) vs 8086 (1978)
fonctionnement P 8086 .
11
Architecture interne du p 8086
Le 8086 comporte deux unités fonctionnelles qui peuvent
travailler en parallèle : unité d’ exécution (UE) et Unité
d'Interfaçage Bus (UIB)
12
Architecture interne du p 8086
Bus d’adresse Interne 20 bits
20 bits
Bus d’adresse
16 bits
Bus de contrôle
16 bits
Bus de donnée
Décodage
Contrôle
Séquenceur
Registre Instruction
15
Les registres
16
Les registres généraux AX, BX, CX, DX
Les registres généraux participent aux opérations arithmétiques et logiques
ainsi qu'à l'adressage.
Chaque demi-registre est accessible comme registre de 8 bits, le 8086 peut
donc effectuer des opérations 8 bits.
Bits 15 8 7 0
H L
AX AH AL
BX BH BL
CX CH CL
DX DH DL
17
Les registres généraux
AX: Accumulateur
Usage général
Obligatoire pour la multiplication et la division
Ne peut pas servir pour l'adressage
BX : Base
Usage général
Adressage, (Par défaut, son offset est relatif au segment DS)
CX : Comptage et calcul
Usage général
Utilisé par certaines instruction comme compteur de répétition.
Ne peut pas servir pour l'adressage
DX : Data
Usage général
Multiplication et la division 16 bits
Ne peut pas servir pour l'adressage
18
Les registres d'adressage SP, BP, SI, DI
Ces registres (d'offset) de 16 bits permettent l'adressage d'un opérande à
l'intérieur d'un segment de 64 ko (216 positions mémoires)
SP : Pointeur de Pile
Utilisé pour l'accès à la pile. Pointe sur la tête de la pile.
Par défaut, son offset est relatif à SS
BP : Pointeur de Base
Adressage comme registre de base, (Par défaut, son offset est relatif à SS)
Usage général
19
Les registres d'adressage SP, BP, SI, DI
SI : Registre d'index (source)
Adressage comme registre d’index, (Par défaut, son offset est relatif à DS)
Certaines instruction de déplacement de donnés l'utilise comme index de
l'opérande source. L'opérande destination étant indexé par DI
Usage général
20
Les registres de segment CS, DS, SS, ES
Ces registres sont combiné avec les registres d’offset pour former les
adresses. Une case mémoire est repérée par une adresse de la forme RS:RO.
On place le registre segment au début d’une zone mémoire de 64Ko,
ensuite on fait varier le registre d’offset qui précise l’adresse relative par
rapport à cette position.
21
Les registres de segment CS, DS, ES, SS
CS : Code Segment
Définit le début de la mémoire programme.
Les adresses des différentes instructions du programme sont relatives à
CS.
DS : Data Segment
Début de la mémoire de données dans laquelle sont stockées toutes les
données traitées par le programme
ES : Extra Segment
22
Les registres de segment CS, DS, SS, ES
SS : Stack Segment
Début de la pile.
La pile est une zone mémoire gérée d’une façon particulière. Elle est organisée
comme une pile d’assiettes. On pose et on retire les assiettes toujours sur le haut
de la pile. Un seul registre d’adresse suffit donc pour la gérer, c’est le stack pointer
SP. On dit que c’est une pile LIFO (Last IN, First Out).
Empiler une donnée : sauvegarder une donnée sur (le sommet) de la pile
Dépiler une donnée : retirer une donnée (du sommet) de la pile
23
Le pointeur d'instruction IP
IP : Instruction Pointer
appelé aussi Compteur Ordinal (C.O.) permet de pointer TOUJOURS
le premier octet de l’instruction suivante.
24
Le registre d'état (Flags)
Z (Zéro) :
Indique que le résultat d'une opération arithmétique ou logique est nul.
Il est utilisé dans plusieurs instructions de sauts conditionnels.
S (Signe) :
Reproduit le bit de poids fort d'une quantité signée sur 8 bits ou sur 16
bits. S=0 : positif, S=1 :négatif.
L'arithmétique signée fonctionne en complément à 2.
Ce flag sert lors de sauts conditionnels.
T (Trap) :
Met le CPU en mode pas à pas pour faciliter la recherche des défauts
d'exécution.
26
Le registre d'état (Flags)
I (Interruption) :
Autorise ou non la reconnaissance des interruptions
I = 0 Interruptions autorisées
I = 1 Interruptions non autorisées
D (Direction) :
Fixe la direction de l'auto-inc/décrémentation de SI et DI lors des
instruction de manipulation de chaînes.
D = 0 Incrémentation des index
D = 1 décrémentation des index
O(Overflow) :
Indique un dépassement de capacité quand on travaille avec des
nombres signés. Comme par exemple si la somme de 2 nombres positifs
donne un nombre négatif ou inversement. 27
La segmentation de la mémoire
Le mot mémoire RAM est définis sur un octet (8 bits)
Le bus d'adresse du 8086 est de taille 20 bits. On possède alors 220 entrée
28
La segmentation de la mémoire
La solution adoptée par Intel a été la suivante :
Puisque avec 16 bits on peut adresser 216 octets = 65535 octets = 64 ko,
La mémoire totale adressable de 1 Mo est fractionnée en pages de 64 ko
appelés segments.
La graduation des segments se fait tous les 220 / 216 =24 Oc.
Pour adresser une case mémoire donnée, on utilise alors deux registres :
Un registre pour adresser le segment, appelé registre segment: CS,
DS, SS, ES
Un registre pour adresser à l'intérieur du segment, appelé registre
offset: IP, SP, BP, SI, DI.
29
La segmentation de la mémoire
Une adresse se présente alors sous la forme segment : offset.
Pour calculer l'adresse absolue ou physique qui sera envoyée sur le bus
30
La segmentation de la mémoire