Plan du cours
Chapitre 1. Introduction à l’archi. des ordi.
Chapitre 2. Circuits logiques
Chapitre 3. Unités fonctionnelles
Chapitre 4. Présentation du μp 8086 et environnement Emu8086.
Chapitre 5. Jeu d’instruction du μp 8086
Chapitre 6. Modes d’adressage
Chapitre 7. Variables et sauts
Chapitre 8. Interruptions et accès aux entrées sorties
58
Chapitre 4 . Jeu d’instruction
Dans ce chapitre
I. Transfert et permutation
II. Addition et soustraction.
III. Calculs avec retenue.
IV. Multiplication et division.
V. Calculs logiques.
VI. Décalages et rotations.
59
1
I. Transfert et permutation
1. Transfert : MOV
2. Permutation : XCHG
Chapitre 5. Jeu d’instructions
I. Transfert et permutation
1. Transfert : MOV
Charger une valeur dans une destination
Syntaxe:
MOV destination , source ; destination ← source
Exemples :
MOV AL , 0 ; AL ← 00h
MOV n , AL ; n ←(AL)
MOV AL , BX ; erreur
MOV AL , 22b8h ; erreur
MOV CS , AX ; erreur
61
2
Chapitre 5. Jeu d’instructions
I. Transfert et permutation
1. Transfert : MOV
Mouvements autorisés :
MOV Registre général, Registre quelconque | Mémoire | Constante
MOV Mémoire, Registre quelconque | Constante
MOV Registre de segment(DS,SS,ES), Registre général
Taille:
Source et destination doivent avoir la même taille.
Exception: taille constante <= taille registre.
62
Chapitre 5. Jeu d’instructions
I. Transfert et permutation
2. Permutation : XCHG
XCHG vient de «eXCHanGe» = Permuter = échanger les contenus
Syntaxe:
XCHG Destination1, Destination2 ; p e r m u t e r D e s t i n ati o n 1 avec Destination2
Exemples :
XCHG AL, AH ;échanger le contenu de AL avec celui de AH
;si AL=10h et AH=30 , après XCHG AL, AH on
;aura AL=30h et AH=10
XCHG Alpha, BX ;échanger le contenu de BX avec celui de Alpha
XCHG DX, Beta ;échanger le contenu de DX avec celui de Beta
Mouvements autorisés :
XCHG Registre général, Registre général
XCHG Registre général, Mémoire
XCHG Mémoire, Registre général
63
3
II. Addition et soustraction
1. Addition et soustraction sans retenue
2. Incrémentation et décrémentation
3. Inverse et comparaison
Chapitre 5. Jeu d’instructions
II. Addition et soustraction.
1. Calcul sans retenue
Syntaxe:
ADD Destination, Source ; ADDition
SUB Destination, Source ; SUBtraction
Exemples :
ADD AX,BX ; AX ← AX +BX
SUB AX,BX ; AX ← AX – BX
SUB BX,8 ; BX ← BX – 8
Remarques :
➢ Durant l’opération: l’état initial du bit CF (registre d’état) n’intervient pas
dans les calculs;
➢ A l’issue de l’opération : l’état du bit CF peut être modifié.
➢ Les FLAG affectés: CF; OF; AF; SF; ZF; PF
➢ Exemple: Mov al,02h
1) Add al,03h ;al contient 02h+03h=05h avec CF=0; OF=0; AF=0; SF=0; ZF=0; PF=1
2) Add al,FFh ;al contient 02h+0FFh=01h avec CF=1; OF=0; AF=1; SF=0; ZF=0; PF=0
65
4
Chapitre 5. Jeu d’instructions
II. Addition et soustraction.
2. Incrémentation et décrémentation
Syntaxe:
INC Destination ; INCrémenter la valeur dans Destination
DEC Destination ; DECrémenter la valeur dans Destination
Exemples :
INC AX ; AX ← AX +1
DEC BX ; BX ← BX – 1
Remarques :
➢ INC AX produit la même chose que ADD AX,1 mais :
▪ L’opcode de INC AX est de 1 octet ;
▪ L’opcode de ADD AX,1 est de 3 octets.
➢ DEC BX produit la même chose que SUB BX,1 mais :
▪ L’opcode de DEC BX est de 1 octet ;
▪ L’opcode de SUB BX,1 est de 3 octets.
➢ On ne peut pas incrémenter ou décrémenter une valeur immédiate.
66
Chapitre 5. Jeu d’instructions
II. Addition et soustraction.
2. Inverse et comparaison
Syntaxe:
NEG Destination ; NEGatif de la valeur dans Destination
CMP Source1,Source2 ; CoMParer Source1 et Source2 sans mettre
; le résultat dans Source1
Exemples :
NEG AX ; AX ← -AX
CMP AX,BX ; calculer AX-BX sans mettre le résultat dans AX
;=> modification des indicateurs seulement
Remarques :
➢ Le résultat est utilisable avec les instructions de sauts (voir ultérieurement)
➢ Les indicateurs susceptibles d'être touché avec CMP sont : OF, SF, ZF, CF, PF,AF ;
➢ CMP permet de comparer deux nombres selon les règles suivantes:
67
5
III. Calculs avec retenue
1. Addition et soustraction avec retenue(bit CF)
2. Addition et soustraction sur plus que 16bits
3. Modifier les indicateurs CF,DF et IF
Chapitre 5. Jeu d’instructions
III. Calculs avec retenue
1. Calcul avec le bit CF
Syntaxe:
ADC Destination, Source ; ADdition with Carry.
SBB Destination, Source ; SuBtraction with Borrow.
Exemples :
ADC AX,BX ; AX ← AX+BX+CF
SBB AX,BX ; AX ← AX–BX-CF
Remarques :
➢ Durant l’opération: l’état initial du bit CF intervient dans le calcul;
➢ A l’issue de l’opération : l’état du bit CF peut être modifié.
➢ Ces opérations peuvent être utilisées dans les calculs sur 32 bits,48,64,..
69
6
Chapitre 5. Jeu d’instructions
III. Calculs avec retenue
2. Calcul sur plus que 16bits
Calcul sur 32 bits: N1=125CB8Ch + N2=54EF7A88h = 56154614h:
Partie forte Partie faible
N1= 125CB8Ch (32 bits) 0125 (16 bits) CB8C (16 bits)
N2=54EF7A88h (32 bits) 54EF (16 bits) 7A88 (16 bits)
a. Décomposition de calcul sur partie faible 16bits et partie forte 16bits:
Parties faibles: CB8Ch + 7A88h => dans AX avec un bit CF
Parties fortes: 0125h + 54EFh + CF => dans BX
b. Additionner les parties faibles: avec ADD ou (ADC: attention)
MOV AX, CB8Ch
ADD AX,7A88h
c. Additionner les parties fortes: avec ADC
MOV BX, 0125h
ADC BX, 54EFh
d. Finalement, le programme est :
MOV AX, CB8Ch
MOV BX, 0125h
ADD AX,7A88h ; AX contient la partie faible de N1+N2 = 4614h
ADC BX, 54EFh ; BX contient la partie forte de N1+N2 = 5615h
70
Chapitre 5. Jeu d’instructions
III. Calculs avec retenue
3. Modifier les indicateurs CF,IF et DF
Le 8086 offre 3 instructions pour modifier l’état du bit CF :
➢ STC (SeT Carry flag) permet de mettre CF à 1 ;
➢ CLC (CLear Carry flag) permet de mettre CF à 0 ;
➢ CMC (CoMplement Carry flag) permet d’inverser l’état du bit CF.
2 instructions pour modifier l’état du bit IF :
➢ STI (SeT Interrupt flag) permet de mettre IF à 1 ;
➢ CLI (CLear Interrupt flag) permet de mettre IF à 0 ;
2 instructions pour modifier l’état du bit DF :
➢ STD (SeT Direction flag) permet de mettre DF à 1 ;
➢ CLD (CLear Direction flag) permet de mettre DF à 0 ;
71
7
IV. Multiplication et division
1. Multiplication non signée
2. Multiplication signée
3. Division non signée
4. Division signée
5. Conversion de l’accumulateur
Chapitre 5. Jeu d’instructions
IV. Multiplication et division
1. Multiplication non signée : MUL
Principe:
• La multiplication est différente de l'addition et la soustraction.
• On utilise les registres AX (Al et AH) et DX selon les cas.
Syntaxe pour calculer opérande1*opérande2:
MUL Source ;Source contient opérande2
;opérande 1 est dans AL ou AX selon les cas suivants:
opérande 1 opérande 2 Résultat
octet*octet AL Registre ou mémoire (8bits) AX
mot*mot (mot=16bits) AX Registre ou mémoire (16bits) DX AX
mot*octet AL=octet; AH=0 Registre ou mémoire (16bits) DX AX
Exemples:
10h*F8h=0F80h 452Bh*4D89h=14F2F303h 452Bh*D0h= 3832F0h
73
8
Chapitre 5. Jeu d’instructions
IV. Multiplication et division
2. Multiplication signée : IMUL
Lorsque les opérandes et le résultats sont des ombres signés on utilise
la mnémonique IMUL de la même façon que MUL.
Exercice: Calculer en hexadécimale : 300h*(400h-86h)+2456987h
1- calculer 400h-86h dans BX
2- mettre 300h dans AX et calculer AX*BX dans DX AX sans signe
3- décomposer 2456987h en 245h partie forte et 6987h partie faible
4- calculer AX+6987h dans AX sans tenir en compte CF (ADD)
5- calculer DX+245h dans DX en tenant CF en compte (ADC)
le résultat est dans DX AX=024FD787
74
Chapitre 5. Jeu d’instructions
IV. Multiplication et division
3. Division non signée : DIV
Principe:
• La division euclidienne génère un quotient et un reste.
• Exemple: 14÷4 donne un quotient=3 et un reste = 2 (car 14=3*4+2)
• Pour calculer opérande1 ÷ opérande2 on utilise implicitement:
➢ AX ÷ opérande2 ou (DX AX) ÷ opérande2
➢ Selon la taille de opérande2 (et opérande1)
Syntaxe :
DIV Source ;Source contient opérande2
;opérande 1 est dans AX ou DX AX selon les cas :
opérande 1 opérande 2 quotient reste
mot ÷ octet AX Registre ou mémoire (8bits) AL AH
(Double mot) ÷ mot DX AX Registre ou mémoire (16bits) AX DX
75
9
Chapitre 5. Jeu d’instructions
IV. Multiplication et division
3. Division non signée : DIV
Exemples:
452Bh ÷ 4Dh
q=E5h => AL
r=4Ah => AH
4875452Bh ÷ D827h
q=55D0h => AX
r=B27Bh => DX
Attention:
La taille du quotient => ne doit pas dépasser la taille AL ou AX, sinon erreur!
=> majorée par : Taille dividende – Taille diviseur +1
F52Bh ÷ 4Dh 452Bh ÷ 40h
q=32Fh =>AL ??? q=114h =>AL ???
76
Chapitre 5. Jeu d’instructions
IV. Multiplication et division
4. Division signée : IDIV
Principe:
• La division euclidienne signée est possible avec le mnémonique IDIV.
• Le mnémonique IDIV est utilisé similairement à DIV.
• Les opérandes sont des nombres signés (en complément à 2).
• Le quotient et le reste sont aussi des nombres signés.
Exemples:
14÷-4 => (q = -3 , r = 2) ; car 14 = -3*-4+2
-14÷4 => (q = -3 , r = -2) ; car -14 = -3*4-2
77
10
Chapitre 5. Jeu d’instructions
IV. Multiplication et division
4. Division signée : IDIV
Exercice
Ecrire du code assembleur pour calculer les expressions ci-après en
indiquant les emplacements des résultats:
➢ 100÷10 sur 8bits
➢ -100÷10 sur 8bits
➢ -100÷10 sur 16bits
78
Chapitre 5. Jeu d’instructions
IV. Multiplication et division
5. Conversion de l’accumulateur: CBW, CWD
CBW : Convert Byte to Word
Conversion de l’accumulateur AL 8 bits à un mot de 16 bits signé dans AX.
Exemple:
MOV AL, 50h ;( SF=0).
CBW ; AX ← 0050h
MOV AL, 80h ; (SF=1).
CBW ; AX ← FF80h
CWD : Convert Word to Double
Conversion de l’accumulateur AX 16 bits à 32 bits signé dans DX AX.
Exemple:
MOV AX, 4002h ; (SF=0)
CWD ; DX: AX => 00004002h.
MOV AX, 80FFh ; (SF=1)
CWD ; DX: AX => FFFF80FFh.
Remarque:
Les FLAG restent inchangés.
79
11
V. Calculs logiques
1. Principe de calcul
2. Utilisations pratiques
Chapitre 5. Jeu d’instructions
V. Calculs logiques
1. Principe de calcul : and , or , xor, not
▪ En binaire 1=>Vrai et 0=>Faux
A B A AND B A OR B A XOR B Non (A)
Vrai Vrai Vrai Vrai Faux Faux
Vrai Faux Faux Vrai Vrai Faux
Faux Vrai Faux Vrai Vrai Vrai
Faux Faux Faux Faux Faux Vrai
Exemple:
103 AND 23 = 7 car 1100111 AND 10111 = 0000111
103 OR 23 = 119 car 1100111 OR 10111 = 1110111
103 XOR 23 = 112 car 1100111 XOR 10111 = 1110000
NOT(103) = 24 car NOT(1100111)= 0011000
81
12
Chapitre 5. Jeu d’instructions
V. Calculs logiques
2. Utilisations pratiques
▪ AND permet de masquer des bits
MOV AL, 0A9h
AL contient 0A0h, et les bits multipliés par 1b sont retenus
AND AL, 0F0h
▪ OR permet de forcer des bits à 1
MOV AL, 0A9h
AL contient 0F9h, et les bits multipliés par 1b sont retenus
OR AL, 0F0h
▪ XOR permet de réinitialiser un registre à 0 ou d’inverser ses bits
XOR AX,AX Réinitialiser AX à 0
MOV AL, 7Fh AL contient 080h
XOR AL, 0FFh retrouver la négation de la valeur de AL(NOT AL)
82
VI. Décalages et rotations
1. Décalage à gauche
2. Décalage à droite
3. Rotation à gauche
4. Rotation à droite
13
Chapitre 5. Jeu d’instructions
VI. Décalages et rotations
1. Décalage à gauche : SHL et SAL
• Décalage logique gauche SHL (SHift Left);
• Décalage arithmétique gauche SAL(Shift Arithmetic Left)
Syntaxe:
SHL Registre, nombre de bits de décalage
SAL Registre, nombre de bits de décalage
Exemple:
mov ax,2788h
shl ax,3
mov bl,-89
sal bl,1
Remarque:
• Dans le décalage arithmétique, le bit de signe ne change pas.
84
Chapitre 5. Jeu d’instructions
VI. Décalages et rotations
2. Décalage à droite : SHR et SAR
Décalage droite SHR (SHift Right); • Décalage arithmétique droite
SAR(Shift Arithmetic Right)
Syntaxe:
SHR Registre, nombre de bits de décalage
SAR Registre, nombre de bits de décalage
Exemple:
mov ax,2788h
shr ax,3
mov bl,-89
sar bl,1
Remarque:
• Dans le décalage arithmétique, le bit de signe ne change pas.
85
14
Chapitre 5. Jeu d’instructions
VI. Décalages et rotations
3. Rotation à gauche : ROL et RCL
• Rotation gauche ROL • Rotation gauche en incluant la retenue
(ROtate Left); RCL (Rotate Through Carry Left)
Syntaxe:
ROL Registre, nombre de bits de rotation
RCL Registre, nombre de bits de rotation
Exemple:
mov al,88h ; Charge la valeur binaire 10001000 dans AL
rol al,1 ; Effectue une rotation à gauche de 1 bit
; résultats: al=00010001 et CF=1
mov bl,0101111b ; Charge la valeur binaire 00101111 dans BL.
stc ; Active le bit de retenue
rcl bl,1 ; Effectue une rotation à gauche de 1 bit en
; incluant le bit de retenue.
; résultats: bl=01011111 et CF=0
Remarque:
• La rotation à n bits, applique la même rotation n fois sur un seul bit
86
Chapitre 5. Jeu d’instructions
VI. Décalages et rotations
3. Rotation à droite : ROR et RCR
• Rotation droite ROR • Rotation droite en incluant la retenue
(ROtate Right); RCR (Rotate Through Carry Right)
Syntaxe:
ROR Registre, nombre de bits de rotation
RCR Registre, nombre de bits de rotation
Exemple:
mov al,88h ; Charge la valeur binaire 10001000 dans AL
ror al,1 ; Effectue une rotation à droite de 1 bit
; résultats: al=01000100 et CF=0
mov bl,0101111b ; Charge la valeur binaire 00101111 dans BL.
stc ; Active le bit de retenue
rcr bl,1 ; Effectue une rotation à droite de 1 bit en
; incluant le bit de retenue.
; résultats: bl=10010111 et CF=1
Remarque:
• La rotation à n bits, applique la même rotation n fois sur un seul bit
87
15