17/11/2020
Le µp 8086 Caractéristiques principales d’un µp
Le choix du socket *détermine le modèle de processeur ; *le type de carte mère
*l'évolutivité de la machine
Le nombre de cœurs *compression vidéo ; *le calcul d'effets
La fréquence *plus cette dernière est élevée, meilleures seront les
de fonctionnement performances
*Elle s'exprime généralement en gigahertz, notés GHz.
La quantité de *Plus la quantité de mémoire cache est élevée, meilleures
mémoire cache seront les performances
*processeur d'entrée de gamme comporte 1 Mo
de mémoire cache de second niveau
*processeur haut de gamme comportera 6 Mo de
mémoire cache de second niveau
TDP (en Watts) *Plus il est élevé, plus le processeur chauffe, plus il
enveloppe consomme de l'énergie.
thermique *Processeur haut gamme 130w, milieu de gamme
du processeur 90 w.
Le µp 8086 Evolution technologique des µp INTEL
1
17/11/2020
Le µp 8086 Aspect externe du µp 8086
circuit intégré de forme DIL
(Dual In-Line ; boitier de circuit integres)
de 40 pattes
équipé d'un bus de données de 16 bits
équipé d'un bus d’adresse de 20 bits
fonctionne à des fréquences diverses selon
plusieurs variantes:
5, 8 ou 10 MHz.
Le processeur 8086 d'Intel est à la base des
processeurs Pentium actuels
Un ancien programme écrit pour un 8086
fonctionne toujours sur un nouvel
ordinateur équipé d'un Pentium IV.
Le µp 8086 Aspect interne du µp 8086
deux unités internes distinctes
2
17/11/2020
Le µp 8086 Aspect interne du µp 8086
UE : Unité d'Exécution UIB : Unité d'Interfaçage
exécute les instructions avec le Bus
qui lui sont transmises récupère et stocke les informations à traiter.
par l'UIB établit les transmissions avec les bus du
système.
Le µp 8086 Aspect interne du µp 8086
UE : Unité d'Exécution UIB : Unité d'Interfaçage
comporte essentiellement l'UAL de avec le Bus
16 bits qui manipule les registre Interface physique entre le microprocesseur
généraux de 16 bits et le monde extérieur
3
17/11/2020
Le µp 8086 Aspect interne du µp 8086
1- Extraction de l’instructions par l'UIB
2- Exécution de l’instruction par l’UE
3- Extraction de la nouvelle instruction
l'UE reste inactif un court instant,
(TEMPS D’ATTENTE)
pendant que l'UIB extrait l'instruction
Le µp 8086 Aspect interne du µp 8086
Technique pour éliminer le temps d’attente
Prétraitement ou Traitement pipeline
4
17/11/2020
Le µp 8086 Aspect interne du µp 8086
Technique pour éliminer le temps d’attente
Prétraitement ou Traitement pipeline
Pendant que l'UE exécute les informations qui lui sont
transmises, l'instruction suivante est chargée dans l'UIB.
Les instructions qui suivront sont placées dans une
file d'attente
Lorsque l'UE a fini de traiter une instruction l'UIB lui
transmet instantanément l'instruction suivante, et charge
la troisième instruction en vue de la transmettre à l'UE.
Le µp 8086 Aspect interne du µp 8086
Prétraitement ou Traitement pipeline
5
17/11/2020
Le µp 8086 Registres Internes du µp 8086
Un registre est une petite partie
de mémoire intégrée au
microprocesseur, dans le but de
recevoir des informations
spécifiques, notamment des
adresses et des données stockées
❖Certains sont affectés à des
durant l'exécution d'un
opérations d'ordre général et
programme
sont accessibles au programmeur
à tout moment
❖D'autres registres ont des rôles
bien plus spécifiques et ne
servent que pour un usage
spécialisé.
Le µp 8086 Registres Internes du µp 8086
✓Registres de 16 bits
✓chaque registre peut être
divisé en deux registres de
8 bits
01111101 01110001
High Low
Byte Byte
6
17/11/2020
Le µp 8086 Registres Internes du µp 8086
Registre AX : (Accumulateur)
✓Toutes les opérations de
transferts de données avec les
entrées-sorties ainsi que le
traitement des chaînes de
caractères se font dans ce
registre, de même que les
opérations arithmétiques et
logiques.
✓Les conversions en BCD du
résultat d'une opération
arithmétique (addition,
soustraction, multiplication et
division) se font dans ce registre.
Le µp 8086 Registres Internes du µp 8086
Registre BX : Registre de base
✓Utilisé pour l'adressage de
données dans une zone mémoire
différente de la zone code
✓En général il contient une
adresse de décalage par rapport à
une adresse de référence.
✓Peut servir pour la conversion
d'un code à un autre
7
17/11/2020
Le µp 8086 Registres Internes du µp 8086
Registre CX : Le compteur
✓Utilise comme compteur lors
des instructions de boucle.
Registre DX :
✓Utilise pour les opérations de
multiplication et de division
✓Utilise pour contenir le numéro
d'un port d'entrée/sortie pour
adresser les interfaces d'E/S.
La programmation en assembleur du
microprocesseur 8086
• Généralités
• Les instructions de transfert
• Les instructions arithmétiques
• Les instructions logiques
• Les instructions de branchement
• Méthodes de programmation
8
17/11/2020
Généralités
• Chaque microprocesseur reconnaît un ensemble
d’instructions appelé jeu d’instructions
(Instruction Set) fixé par le constructeur.
• Pour les microprocesseurs classiques, le nombre
d’instructions reconnues varie entre 75 et 150
(microprocesseurs CISC : Complex Instruction Set
Computer).
• Il existe aussi des microprocesseurs dont le nombre
d’instructions est très réduit (microprocesseurs RISC :
Reduced Instruction Set Computer) : entre 10 et 30
instructions, permettant d’améliorer le temps d’exécution
des programmes.
Généralités (suite)
• Une instruction est définie par son code
opératoire, valeur numérique binaire difficile
à manipuler par l’ être humain.
• On utilise donc une notation symbolique
pour représenter les instructions : les
mnémoniques.
• Un programme constitue de mnémoniques
est appelé programme en assembleur.
9
17/11/2020
Les groupes d’instructions
Les instructions peuvent être classées en
groupes :
• instructions de transfert de données ;
• instructions arithmétiques ;
• instructions logiques ;
• instructions de branchement ...
Les instructions de transfert
Elles permettent de déplacer des données
d’une source vers une destination :
• registre vers mémoire ;
• registre vers registre ;
• mémoire vers registre.
Remarque : le microprocesseur 8086
n’autorise pas les transferts de mémoire
vers mémoire
(pour ce faire, il faut passer par un registre
intermédiaire).
10
17/11/2020
Syntaxe : MOV destination,source
• Remarque : MOV est l’abréviation du
verbe « to move » : déplacer.
Il existe différentes façons de spécifier
l’adresse d’une case mémoire dans une
instruction :
ce sont les modes d’adressage.
Exemples de modes d’adressage simples :
MOV destination,source
• mov ax,bx : charge le contenu du
registre BX dans le registre AX.
Dans ce cas, le transfert se fait de
registre à registre : adressage par
registre ;
• mov al,12H : charge le registre AL avec la
valeur 12H. La donnée est fournie
immédiatement avec l’instruction :
adressage immédiat.
11
17/11/2020
Exemples de modes d’adressage simples :
MOV destination,source
• mov bl,[1200H] : transfère le contenu de la
case mémoire d’adresse effective (offset)
1200H vers le registre BL.
L’instruction comporte l’adresse de la case
mémoire ou se trouve la donnée : adressage
direct.
L’adresse effective représente l’offset de la
case mémoire dans le segment de données
(segment dont l’adresse est contenue dans
le registre DS) : segment par défaut.
Adressage direct.
12
17/11/2020
On peut changer le segment lors d’un adressage direct en
ajoutant un préfixe de segment,
exemple : mov bl,es :[1200H].
On parle alors de forçage de segment.
Les instructions de transfert
Remarque :
Dans le cas de l’adressage immédiat de la
mémoire, il faut indiquer le format de la donnée :
octet ou mot (2 octets) car le microprocesseur
8086 peut manipuler des données sur 8 bits ou 16
bits.
Pour cela, on doit utiliser un spécificateur de
format :
13
17/11/2020
Les instructions de transfert (suite)
Remarque : les microprocesseurs Intel rangent l’octet de poids faible d’une
donnée sur plusieurs octets à l’adresse la plus basse (format Little Endian).
Modes d’adressage évolués :
adressage basé : l’offset est contenu dans un registre de
base BX ou BP.
Exemples :
• mov al,[bx] : transfère la donnée dont l’offset est contenu
dans le registre de base BX vers le registre AL. Le segment
associe par défaut au registre BX est le segment de données :
on dit que l’adressage est basé sur DS;
• mov al,[bp] : le segment par défaut associé au registre de
base BP est le segment de pile.
Dans ce cas, l’adressage est base sur SS.
14
17/11/2020
Adressage basé
Adressage indexé
• adressage indexé : semblable à l’adressage
base, sauf que l’offset est contenu dans un
registre d’index SI ou DI, associes par défaut
au segment de données.
Exemples :
mov al,[si] : charge le registre AL avec le
contenu de la case mémoire dont l’offset est
contenu dans SI ;
mov [di],bx : charge les cases mémoire
d’offset DI et DI + 1 avec le contenu du
registre BX.
15
17/11/2020
Remarque : Adressage indexé
une valeur constante peut éventuellement
être ajoutée aux registres de base ou
d’index pour obtenir l’offset.
Exemple :
• mov [si+100H],ax
qui peut aussi s’écrire
• mov [si][100H],ax
ou encore
• mov 100H[si],ax
Les modes d’adressage bases ou indexes permettent
la manipulation de tableaux ranges en mémoire.
Exemple :
1. mov si,0
2. mov word ptr table[si],1234H
3. mov si,2
4. mov word ptr table[si],5678H
16
17/11/2020
Dans cet exemple, table représente l’offset
du premier élément du tableau et le registre
SI joue le rôle d’indice de tableau :
adressage basé et indexé
l’offset est obtenu en faisant la somme d’un registre
de base, d’un registre d’index et d’une valeur constante.
Exemple :
– mov ah,[bx+si+100H]
Ce mode d’adressage permet l’adressage de structures de
données complexes : matrices,
enregistrements, ...
Exemple :
• mov bx,10
• mov si,15
• mov byte ptr matrice[bx][si],12H
Dans cet exemple, BX et SI jouent respectivement le rôle
d’indices de ligne et de colonne dans la matrice
17
17/11/2020
Les instructions arithmétiques
Les instructions arithmétiques de base sont
l’addition, la soustraction, la multiplication
et la division qui incluent diverses variantes.
Plusieurs modes d’adressage sont possibles.
Addition : ADD opérande1,opérande2
L’opération effectuée est : opérande1 ←
opérande1 + opérande2.
Exemples :
• add ah,[1100H] : ajoute le contenu de la case
mémoire d’offset 1100H à l’accumulateur
AH (adressage direct) ;
• add ah,[bx] : ajoute le contenu de la case
mémoire pointée par BX à l’accumulateur
AH (adressage basé) ;
• add byte ptr [1200H],05H : ajoute la valeur
05H au contenu de la case mémoire d’offset
1200H (adressage immédiat).
18
17/11/2020
Les instructions arithmétiques (suite)
Soustraction
SUB opérande1,opérande2
L’opération effectuée est : opérande1 ← opérande1 −
opérande2.
Multiplication
MUL opérande, où opérande est un registre ou une case
mémoire.
Cette instruction effectue la multiplication du contenu de AL
par un opérande sur 1 octet
ou du contenu de AX par un opérande sur 2 octets.
Le résultat est placé dans AX si les données à multiplier
sont sur 1 octet (résultat sur 16 bits),
dans (DX,AX) si elles sont sur2 octets (résultat sur 32
bits).
Exemples :
mov al,51
mov bl,32
mul bl
→ AX = 51 × 32
mov ax,4253
mov bx,1689
mul bx
→ (DX, AX) = 4253 × 1689
19
17/11/2020
Exemples (suite):
• mov al,43
mov byte ptr [1200H],28
mul byte ptr [1200H]
→ AX = 43 × 28
• mov ax,1234
mov word ptr [1200H],5678
mul word ptr [1200H]
→ (DX, AX) = 1234 × 5678
Les instructions arithmétiques (suite)
Division :
DIV opérande, où opérande est un registre ou
une case mémoire.
Cette instruction effectue la division du
contenu de AX par un opérande sur 1 octet
ou le contenu de (DX,AX) par un opérande
sur 2 octets.
Résultat : si l’opérande est sur 1 octet, alors
AL = quotient et AH = reste ; si l’opérande est
sur 2 octets, alors AX = quotient et DX =
reste.
20
17/11/2020
Exemples :
mov ax,35
mov bl,10
div bl
→ AL = 3 (quotient) et AH = 5 (reste)
mov dx,0
mov ax,1234
mov bx,10
div bx
→ AX = 123 (quotient) et DX = 4 (reste)
Les instructions logiques
Ce sont des instructions qui permettent de manipuler
des données au niveau des bits. Les opérations
logiques de base sont :
• ET;
• OU;
• OU exclusif ;
• complément à 1;
• complément à 2;
• décalages et rotations.
Les différents modes d’adressage sont disponibles.
21
17/11/2020
Les instructions logiques (suite)
ET logique : AND opérande1,opérande2
L’opération effectuée est : operande1 ←
operande1 ET operande2.
Exemple :
mov al,10010110B
mov bl,11001101B
and al, bl
AL= 1 0 0 1 0 1 1 0
BL= 1 1 0 0 1 1 0 1
AL= 1 0 0 0 0 1 0 0
Application
masquage de bits pour mettre à zéro
certains bits dans un mot.
Exemple : masquage des bits 0, 1, 6 et
7 dans un octet :
76543210
01010111
0 0 1 1 1 1 0 0 ← masque
00010100
22
17/11/2020
Les instructions logiques (suite)
OU logique : OR opérande1,opérande2
L’opération effectuée est : operande1 ← operande1 OU
operande2.
Application : mise à 1 d’un ou plusieurs bits dans un mot.
Exemple : dans le mot 10110001B on veut mettre à 1 les bits 1
et 3 sans modifier les autres bits.
76543210
10110001
0 0 0 0 1 0 1 0 ← masque
10111011
Les instructions correspondantes peuvent s’écrire :
mov ah,10110001B
or ah,00001010B
Les instructions logiques (suite)
Complément à 1 : NOT opérande
23
17/11/2020
Les instructions logiques (suite)
Complément à 2 : NEG opérande
Les instructions logiques (suite)
OU exclusif : XOR operande1,operande2
L’opération effectuée est : opérande1 ←
opérande1 ⊕ opérande2.
Exemple : mise à zéro d’un registre :
mov al,25
xor al,al → AL = 0
24
17/11/2020
Instructions de décalages et de rotations
• Ces instructions déplacent d’un certain
nombre de positions les bits d’un mot vers la
gauche ou vers la droite.
• Dans les décalages, les bits qui sont
déplaces sont remplaces par des zéros.
Il y a les décalages logiques (opérations non
signées) et les décalages arithmétiques
(opérations signées).
• Dans les rotations, les bits déplaces dans un
sens sont réinjectes de l’autre côte du mot.
Décalage logique vers la droite (Shift Right)
SHR opérande,n
Cette instruction décale l’opérande de n
positions vers la droite.
Exemple :
mov al,11001011B
shr al,1
Entrée d’un 0 à la place du bit de poids fort ; le bit sortant passe à
travers l’indicateur de retenue CF.
25
17/11/2020
Décalage logique vers la droite (Shift Right)
Remarque : si le nombre de bits a décaler est
supérieur a 1, ce nombre doit être place
dans le registre CL ou CX.
Exemple : décalage de AL de trois positions
vers la droite :
mov cl,3
shr al,cl
Décalage logique vers la gauche (Shift Left
SHL operande,n
Cette instruction décale l’opérande de n positions vers la
droite.
Exemple :
mov al,11001011B
shl al,1
entrée d’un 0 à la place du bit de poids faible ; le bit sortant passe
à travers l’indicateur de retenue CF.
Même remarque que précédemment si le nombre de positions à
décaler est supérieur à 1.
26
17/11/2020
Décalage arithmétique vers la droite
SAR opérande,n
• Ce décalage conserve le bit de signe bien que
celui-ci soit décale.
Exemple :
mov al,11001011B
sar al,1
le bit de signe est réinjecté.
Décalage arithmétique vers la gauche
SAR opérande,n
Identique au décalage logique vers la gauche.
Applications des instructions de décalage :
cadrage à droite d’un groupe de bits.
Exemple : on veut avoir la valeur du quartet de
poids fort du registre AL :
mov al,11001011B
mov cl,4
shr al,cl → AL = 00001100B
27
17/11/2020
Décalage arithmétique vers la gauche
Test de l’état d’un bit dans un mot.
Exemple : on veut déterminer l’état du bit 5 de AL :
mov cl,6
shr al,cl
ou
mov cl,3
shl al,cl
→ avec un décalage de 6 positions vers la droite ou
3 positions vers la gauche, le bit 5 de AL est
transfère dans l’indicateur de retenue CF. Il suffit
donc de tester cet indicateur.
• multiplication ou division par une puissance
de 2 : un décalage à droite revient à faire une
division par 2 et un décalage à gauche, une
multiplication par 2.
Exemple :
mov al,48
mov cl,3
shr al,cl
28
17/11/2020
Rotation à droite (Rotate Right)
ROR opérande,n
Cette instruction décale l’opérande de n positions
vers la droite et réinjecte par la gauche les bits
sortant.
Exemple :
mov al,11001011B
ror al,1
Réinjection du bit sortant qui est copie dans l’indicateur de retenue CF.
Rotation à gauche (Rotate Left)
ROL operande,n
Cette instruction décale l’opérande de n positions
vers la gauche et réinjecte par la droite les bits
sortant.
• Exemple :
mov al,11001011B
rol al,1
Réinjection du bit sortant qui est copié dans l’indicateur de retenue CF.
29
17/11/2020
Rotation à droite avec passage par l’indicateur de
retenue (Rotate Right through Carry)
RCR opérande,n
Cette instruction décale l’opérande de n positions vers
la droite en passant par l’indicateur de retenu CF.
Exemple :
mov al,11001011B
rcr al,1
le bit sortant par la droite est copie dans l’indicateur de retenue CF et la
valeur précédente de CF est réinjecté par la gauche.
Rotation à gauche avec passage par l’indicateur de
retenue (Rotate Left through Carry)
RCL opérande,n
Cette instruction décale l’opérande de n positions
vers la gauche en passant par l’indicateur de
retenue CF.
Exemple :
mov al,11001011B
rcl al,1
le bit sortant par la gauche est copie dans l’indicateur de
retenue CF et la valeur précédente de CF est réinjectée par la
droite.
30
17/11/2020
Les instructions de branchement
Les instructions de branchement (ou saut)
permettent de modifier l’ordre d’exécution
des instructions du programme en
fonction de certaines conditions.
Il existe 3 types de saut :
• saut inconditionnel ;
• sauts conditionnels ;
• appel de sous-programmes.
Instruction de saut inconditionnel
JMP label
Cette instruction effectue un saut (jump)
vers le label spécifié. Un label (ou
étiquette) est une représentation
symbolique d’une instruction en mémoire :
31
17/11/2020
Exemple : saut inconditionnel
boucle : inc ax
dec bx
jmp boucle → boucle infinie
Remarque : l’instruction JMP ajoute au registre IP (pointeur
d’instruction) le nombre d’octets (distance) qui sépare
l’instruction de saut de sa destination.
Pour un saut en arrière, la distance est négative (codée en
complément à 2).
Instructions de sauts conditionnels
Jcondition label
• Un saut conditionnel n’est exécuté que
si une certaine condition est satisfaite,
sinon
l’exécution se poursuit séquentiellement
à l’instruction suivante.
• La condition du saut porte sur l’ état de
l’un (ou plusieurs) des indicateurs d’
état (flags)
du microprocesseur :
32
17/11/2020
Instructions de sauts conditionnels (suite)
Exemple :
Instructions de sauts conditionnels
33
17/11/2020
Remarque
il existe un autre type de saut conditionnel, les
sauts arithmétiques. Ils suivent en général
l’instruction de comparaison :
CMP opérande1,opérande2
Exemple :
34
17/11/2020
Application des instructions de sauts conditionnels
Problème:
On veut additionner deux nombres signes N1 et
N2 se trouvant respectivement aux offsets 1100H
et 1101H.
Le résultat est rangé à l’offset 1102H s’il est
positif, à l’offset 1103H s’il est négatif et à
l’offset 1104H s’il est nul :
Organigramme :
35
17/11/2020
Programme :
Appel de sous-programmes
• Pour éviter la répétition d’une même séquence
d’instructions plusieurs fois dans un programme,
on rédige la séquence une seule fois en lui
attribuant un nom (au choix) et on l’appelle
lorsqu’on en a besoin.
Le programme appelant est le programme
principal.
La séquence appelée est un sous-
programme ou
procédure.
36
17/11/2020
Ecriture d’un sous-programme
Remarque : une procédure peut être de type NEAR si elle
se trouve dans le même segment ou de type FAR si elle se
trouve dans un autre segment.
Appel d’un sous-programme par le programme
principal: CALL procédure
Lors de l’exécution de l’instruction CALL, le pointeur
d’instruction IP est chargé avec l’adresse de la première
instruction du sous-programme.
Lors du retour au programme appelant, l’instruction
suivant le CALL doit être exécutée, c’est-à-dire que IP
doit être recharge avec l’adresse de cette instruction.
37
17/11/2020
Exécution de l’instruction CALL
38