Académique Documents
Professionnel Documents
Culture Documents
Systèmes à Microprocesseurs
-- Jeu d’instructions du 8086--
Pr. A. AIT MADI
RST(S6)-ENSA -KENITRA 1
Plan
Généralités
Modes d’adressages
Taille des échanges avec la mémoire
Instructions de transfert
Instructions arithmétiques
Instructions logiques
Instructions de branchement conditionnel
Instructions de branchement
Instructions de contrôle du 8086
RST(S6)-ENSA -KENITRA 2
Généralités
RST(S6)-ENSA -KENITRA 3
Généralités
• Par exemple, l’écriture MOV BP,41h signifie placer le nombre 41h dans le
registre BP
• Cette écriture est codée (en hexadécimal) par les trois octets BD 41 00
RST(S6)-ENSA -KENITRA 4
Généralités
Quand on demande l'exécution d'un programme, celui-ci est chargé par le
système d'exploitation (à partir du disque dur par exemple) dans une zone de la
mémoire RAM
Chaque élément d'instruction (octet) est stocké dans une position mémoire
L'adresse (le numéro) de la case mémoire de début est communiquée au
processeur pour qu'il commence l'exécution au bon endroit
RST(S6)-ENSA -KENITRA 5
Généralités
RST(S6)-ENSA -KENITRA 6
Modes d’adressages
RST(S6)-ENSA -KENITRA 7
Modes d’adressages
Adressage Registre
• L’opération se fait sur un ou deux registres
• L'opérande sera stockée dans un registre interne au microprocesseur.
Exemple:
INC AX ; incrémentation du registre AX
MOV AX, BX ; copie du contenu du registre BX dans AX
RST(S6)-ENSA -KENITRA 8
Modes d’adressages
Adressage Immédiat
• L’opérande est une valeur
Exemple
MOV AX, 500H ; cela signifie que la valeur 500H sera stockée immédiatement dans le registre AX
RST(S6)-ENSA -KENITRA 9
Modes d’adressages
Autres exemples:
MOV AX, 243h ; charger la valeur 243h dans le registre AX
ADD AX, 3h ; additionner le registre AX avec le nombre 3h
MOV AX, 0xA243 ; Quand le chiffre de gauche du nombre hexadécimal est
; une lettre il est préférable d'utiliser le préfix 0x pour
; l'hexadécimal
MOV AL, 'a‘ ;Charger le registre AL par le code ASCII du caractère 'a'
MOV AX, 'a‘ ; Charger le registre AH par 00 et le registre AL par le code
; ASCII du caractère 'a'
MOV AX, 'ab' ;Charger AH par 'a' et AL par 'b'
RST(S6)-ENSA -KENITRA 10
Modes d’adressages
Adressage Direct
• L’opérande se trouve en mémoire. L’adresse de la case mémoire ou plus
précisément son Offset est précisé directement dans l’instruction
• L’adresse Segment:Offset doit être placée entre [ ], si le segment n’est pas
précisé, DS est pris par défaut,
RST(S6)-ENSA -KENITRA 11
Modes d’adressages
Exemples:
MOV AX, [243h] ;Copier le contenu de la mémoire d'adresse DS:243h dans AX
MOV [123h], AX ;Copier le contenu de AX dans la mémoire d'adresse DS:123h
MOV AX, [SS:243h] ;Copier le contenu de la mémoire SS:243h dans AX
RST(S6)-ENSA -KENITRA 12
Modes d’adressages
Adressage Indirect
• L’opérande se trouve en mémoire.
• L’offset de l’adresse n’est pas précisé directement dans l'instruction
• L’Offset se trouve dans l’un des 4 registres d’offset BX, BP, SI ou DI, qui
remplace l’Offset dans l’instruction [Segment : Offset]
Exemple
MOV BX, offset adr ; Le contenu, de la case mémoire d’adresse ( Adr) dont
MOV AX,[BX] l’offset se trouve dans le registre BX, est mis dans le registre AX
RST(S6)-ENSA -KENITRA 13
Modes d’adressages
• Si le registre Segment n'est pas spécifié, le segment par défaut sera utilisé
Exemple:
MOV AX, [BX] ; Charger AX par le contenu de la mémoire d'adresse DS:BX
MOV AX, [BP] ; Charger AX par le contenu de la mémoire d'adresse SS:BP
MOV AX, [SI] ; Charger AX par le contenu de la mémoire d'adresse DS:SI
MOV AX, [DI] ; Charger AX par le contenu de la mémoire d'adresse DS:DI
RST(S6)-ENSA -KENITRA 14
Modes d’adressages
• On distingue ainsi :
Adressage Basé
Adressage indexé
Adressage basé indexé
RST(S6)-ENSA -KENITRA 15
Modes d’adressages
• Adressage Basé
• L’offset se trouve dans l’un des deux registres de base BX ou BP
• On peut préciser un déplacement qui sera ajouté au contenu de l’Offset pour
déterminer l’Offset
Exemple
MOV AX, [BX+2] ; cela signifie charger le registre AX avec le contenu de l’adresse pointée par BX+2
RST(S6)-ENSA -KENITRA 16
Modes d’adressages
RST(S6)-ENSA -KENITRA 17
Modes d’adressages
Exemple:
MOV AX, [BX] ;Charger AX par le contenu de la mémoire d'adresse DS:BX
MOV AX, [BX+5] ;Charger AX par le contenu de la mémoire d'adresse DS:BX+5
MOV AX, [BP-200] ;Charger AX par le contenu de la mémoire d'adresse SS:BP-200
RST(S6)-ENSA -KENITRA 18
Modes d’adressages
• Adressage Indexé
• L’Offset se trouve dans l’un des deux registres d’index SI ou DI
• On peut préciser un déplacement qui sera ajouté au contenu de SI ou DI pour
déterminer l’offset
Exemple:
MOV AX, [SI] ;Charger AX par le contenu de la mémoire d'adresse DS:SI
MOV AX, [SI+500] ; Charger AX par la mémoire d'adresse DS:SI+500
MOV AX, [DI-8] ;Charger AX par la mémoire d'adresse DS:DI-8
MOV AX, [ES:SI+4] ;Charger AX par la mémoire d'adresse ES:SI+4
RST(S6)-ENSA -KENITRA 19
Modes d’adressages
Exemple:
MOV AX,[BX+SI] ; AX est chargé par la mémoire d'adresse DS:BX+SI
MOV AX,[BX+DI+5] ; AX est chargé par la mémoire d'adresse DS:BX+DI+5
MOV AX,[BP+SI-8] ; AX est chargé par la mémoire d'adresse SS:BP+SI-8
MOV AX,[BP+DI] ; AX est chargé par la mémoire d'adresse SS:BP+DI
RST(S6)-ENSA -KENITRA 20
Taille des échanges avec la mémoire
Quand on fait une opération entre un registre et une donnée qui se trouve en
mémoire, c’est le registre qui détermine la taille de l’opération
Si le registre est un registre simple (8 bits), l’opération se fera avec une seule
case mémoire.
• C'est la partie basse du registre qui est traitée en premier, et ceci dans les
deux sens
RST(S6)-ENSA -KENITRA 21
Taille des échanges avec la mémoire
Quand on fait une opération entre une valeur et une case mémoire, il y a
ambiguïté
le processeur ne sait pas s’il faut considérer la valeur sur 8 bits ou sur 16 bits
Il faut utiliser les préfixes BYTE PTR (8 bits) et WORD PTR (16 bits) pour
préciser le nombre d’octets á écrire :
MOV WORD PTR [adresse],4Ah ; On écrit 004A, 4A dans adresse, et 00 dans ; ; adresse+1
RST(S6)-ENSA -KENITRA 22
Taille des échanges avec la mémoire
Exercice
Soit la portion du programme ci-dessous
4000h 33 4000h 51
MOV BX,4000h ; adresse
MOV AX,2233h 4001h 22 4001h 34
MOV [BX],AX 4002h 55 4002h 85
MOV WORD PTR [BX+2],4455h
4003h 44 4003h 68
MOV BYTE PTR [BX+4],66
MOV BYTE PTR [BX+5],77 4004h 42 4004h 66
4005h 4D 4005h 77
hexadécimal Décimal
RST(S6)-ENSA -KENITRA 23
Instructions du 8086
RST(S6)-ENSA -KENITRA 24
Instructions de transfert
RST(S6)-ENSA -KENITRA 25
Instructions de transfert
--Général--
L’instruction MOV
• Il permet le transfert des données entre registres ou entre registres et
cases mémoire
• Sa syntaxe est
MOV destination, source
• Cette instruction présente plusieurs cas suivant la nature des opérandes
Exemples:
RST(S6)-ENSA -KENITRA 26
Instructions de transfert
--Général--
• Il est strictement interdit de transférer le contenu d'une case mémoire vers
une autre case mémoire comme suit:
MOV adresse1, adresse2
• Pour remédier à se problème on va effectuer cette opération sur deux étapes :
MOV AL, adresse2
MOV adresse1, AL
• On n'a pas le droit aussi de transférer un registre segment vers un autre registre
segment sans passer par un autre registre :
MOV DS, ES
• On va passer comme la première instruction :
MOV AX, ES
MOV DS, AX
• Le CS n'est jamais utilisé comme registre destination
RST(S6)-ENSA -KENITRA 27
Instructions de transfert
--Général--
Instructions de pile
• Une pile est une zone mémoire servant à stocker temporairement des
valeurs
• On ne peut stocker qu’une information à la fois
• L’élément dépilé à un moment donné est celui qui a été empilé en dernier
(LIFO: Last In First Out)
• Les opérations ne se font que sur 16 bits
• La pile se rempli à l’envers: le premier élément est placé à une adresse plus
haute que le dernier élément
RST(S6)-ENSA -KENITRA 28
Instructions de transfert
--Général--
Instruction XCHG
• Elle permet de commuter la source et la destination comme suit:
RST(S6)-ENSA -KENITRA 29
Instructions de transfert
--Général--
Instruction XLAT
• Cette instruction permet de remplacer le contenu du registre AL par un octet
contenu dans la case mémoire adressée par le registre de base BX décalé
par AL
• Utilisée pour la translation des tables de correspondances
AL<--------[ BX + AL]
RST(S6)-ENSA -KENITRA 30
Instructions de transfert
--Transfert d’adresses--
Exemple :
LEA BX, TAB_VAL ;C'est équivalent à MOV BX, offset TAB_VAL
RST(S6)-ENSA -KENITRA 31
Instructions de transfert
--Transfert d’adresses--
Instructions LDS/LES
• Chacun de ces instructions permet de charger le segment (DS ou ES) et
l'offset d'une adresse
Exemple :
Au lieu de faire :
MOV BX, offset tab_val
MOV AX , Seg tab_val
MOV DS , AX
On remplace ces trois instructions par une seule :
LDS BX , tab_val ;elle charge automatiquement l'offset de tab_val dans le registre BX ;et le
;segment dans le registre DS .
RST(S6)-ENSA -KENITRA 32
Instructions de transfert
--Transfert de flags--
Instruction LAHF/SAHF
• LAHF : Load AH from Flags : place l'octet de poids faible du registre d'état
(FLAGS) dans le registre AH comme suit :
RST(S6)-ENSA -KENITRA 33
Instructions de transfert
--Transfert de flags--
Instruction PUSHF/POPF
• PUSHF : Permet d'empiler la totalité du registre d'état (FLAGS)
• POPF : Permet de dépiler le registre d'état (FLAGS)
RST(S6)-ENSA -KENITRA 34
Instructions arithmétiques
RST(S6)-ENSA -KENITRA 35
Instructions arithmétiques
--Addition--
Instruction ADD
• Elle effectue une addition, le résultat est placé dans le registre ou dans la
mémoire (Destination)
Syntaxe : ADD Destination, source
Destination <---------- Destination + source
• Cette instruction présente plusieurs cas
ADD registre , donnée immédiate
ADD mémoire, donnée immédiate
ADD registre , mémoire
ADD mémoire , registre
ADD registre, registre
RST(S6)-ENSA -KENITRA 36
Instructions arithmétiques
--Addition--
Exemple 1:
MOV AL,45h
ADD AL,7h ; AL contient 4Ch
ADD AL,[SI] ; AL=AL+le contenu de la case mémoire pointée par SI
ADD AX,BX ; AX=AX+BX (addition sur 16 bits)
• Ici on a presque les mêmes restrictions de l'instruction MOV ; on n'a pas le droit
d'additionner deux cases mémoires sans utiliser un registre de données
Exemple 2:
Ecrire un programme qui permet de charger le registre AL avec 20h et AH par
2Dh, faire leur addition et stocker le résultat dans BL ?
RST(S6)-ENSA -KENITRA 37
Instructions arithmétiques
--Addition--
Exemple:
MOV AL,45h
ADC AL,7h ; AL contient 4Ch si CF=0, 4D si CF=1
RST(S6)-ENSA -KENITRA 38
Instructions arithmétiques
--Addition--
Exemple :
MOV AL,45h
INC AL ; AL contient 46
INC AX ; AX = AX + 1 (incrémentation sur 16 bits).
INC AL ; AL = AL +1 (incrémentation sur 8 bits).
INC [SI] ; [SI] = [SI] + 1 le contenu de la case mémoire pointé par SI sera incrémenter
RST(S6)-ENSA -KENITRA 39
Instructions arithmétiques
--Soustraction--
Exemple :
MOV AL, 45h
SUB AL, 2 ; AL contient 43
SUB AX, BX ; AX = AX - BX (Soustraction sur 16 bits )
SUB AL, BH ; AL = AL - BH ( Soustraction sur 8 bits )
SUB AL, [SI] ; AL = AL - le contenu de la case mémoire pointé par SI
SUB [DI], AL ; le contenu de la case mémoire pointé par DI ; est soustraite de AL , le résultat
;est mis ; dans la case mémoire pointé par DI
RST(S6)-ENSA -KENITRA 41
Instructions arithmétiques
--Soustraction--
Exemple:
MOV AL,45h
SBB AL, 2 ; AL contient 43 si CF=0, 42 si CF=1
SBB AX,BX ; AX = AX-BX - CF (Soustraction sur 16 bits )
SBB AL,BH ; AL = AL - BH - CF( Soustraction sur 8 bits )
SBB AL,[SI] ; AL = AL - le contenu de la case mémoire ; pointé par SI - CF
SBB [DI],AL ; le contenu de la case mémoire pointé par DI ; est soustraite avec AL - CF, le
;résultat est ; mis dans la case mémoire pointé par DI
RST(S6)-ENSA -KENITRA 42
Instructions arithmétiques
--Soustraction--
Exemple :
MOV AL,45h
DEC AL ; AL contient 44
DEC AX ; AX = AX - 1 (décrémentation sur 16 bits).
DEC AL ; AL = AL -1 (décrémentation sur 8 bits).
DEC [SI] ; [SI] = [SI] - 1 le contenu de la case mémoire ; pointé par SI sera décrémenter
RST(S6)-ENSA -KENITRA 43
Instructions arithmétiques
--Soustraction--
Exemple:
MOV AL, 5h
NEG AL ; AL contient FB ( soit -5)
RST(S6)-ENSA -KENITRA 44
Instructions arithmétiques
--Soustraction--
• Cette instruction touche uniquement les indicateurs pour être testés avec autres
instructions ultérieures de saut conditionnel
• Les indicateurs susceptibles d'être touché sont : AF, CF, OF, PF, SF, ZF
RST(S6)-ENSA -KENITRA 45
Instructions arithmétiques
--Multiplication--
L’instruction MUL (MULtiply)
• Cette instruction sert à effectuer la multiplication non signée entre la source
et l’accumulateur AX
Syntaxe : MUL Source
• Il y a deux cas différents:
Si la source a une taille d’un octet, AL est multiplié par la source et le
résultat est stocké dans le registre AX
AX <------------- AL X Source (octets)
Si la source est un mot, le registre AX est multiplié par source et le résultat
dans le registre 32 bits DXAX
DXAX <------------ AX X Source (mots)
Exemple 1:
MOV AL, 5h
MOV BL, 5h
MUL BL ; AX contient 25 ( soit 19h )
RST(S6)-ENSA -KENITRA 46
Instructions arithmétiques
--Multiplication--
Exemple 2:
RST(S6)-ENSA -KENITRA 47
Instructions arithmétiques
--Multiplication--
L’instruction IMUL (Signed IntegerMULtiply)
• Cette instruction sert à effectuer la multiplication signée entre la source et
l’accumulateur AX
Syntaxe : IMUL Source
• Il y a deux cas différents:
Si la source a une taille d’un octet, AL est multiplié par la source et le
résultat est stocké dans le registre AX
AX <------------- AL X Source (octets)
Si la source est un mot, le registre AX est multiplié par source et le résultat
dans le registre 32 bits DXAX
DXAX <------------ AX X Source (mots)
RST(S6)-ENSA -KENITRA 48
Instructions arithmétiques
--Division--
L’instruction DIV (DIVise)
• Elle effectue une division non signée de l'accumulateur par l'opérande
source
Syntaxe : DIV Source
• Il y a deux cas différents:
Si l’opérande source a une taille d’un octet, AX est divisé par la source et
le quotient dans AL et le reste dans AH
Si l’opérande source est un mot, le registre DXAX est divisé par source et
le quotient dans AX et le reste dans DX
Exemple :
MOV AL, 5h
MOV BL, 2h
DIV BL ; AL contient 2 et AH contient 1
RST(S6)-ENSA -KENITRA 49
Instructions arithmétiques
--Division--
L’instruction IDIV (SignedIntegrDIVise)
• Cette instruction fait le même travail que DIV, mais elle supporte les nombres
signés
Syntaxe : IDIV Source
RST(S6)-ENSA -KENITRA 50
Instructions logiques
RST(S6)-ENSA -KENITRA 51
Instructions logiques
--Logique--
Exemple:
RST(S6)-ENSA -KENITRA 52
Instructions logiques
--Logique--
Exemple:
RST(S6)-ENSA -KENITRA 53
Instructions logiques
--Logique--
Exemple:
RST(S6)-ENSA -KENITRA 54
Instructions logiques
--Logique--
Exemple:
MOV AX, 9DE6h ; 1001 1101 1110 0110
NOT AX ; AX contient 0110 0010 0001 1001=6219h
RST(S6)-ENSA -KENITRA 55
Instructions logiques
--Logique--
L’instruction TEST
• Elle permet de faire un ET logique entre la destination et la source (octet ou un
mot)
• La destination ne sera pas touchée
• Cette instruction ne touche que les indicateurs.
Syntaxe : TEST Destination, Source
Exemple :
MOV AX, 503H ; AX = 0000 0101 0000 0011
TEST AX, 0201H ; le resultat de test est 0000 0000 0000 0001
RST(S6)-ENSA -KENITRA 56
Instructions logiques
--Décalage logique--
Ces instructions sont réservées pour les opérations sur les nombres non-
signés
RST(S6)-ENSA -KENITRA 57
Instructions logiques
--Décalage logique--
Exemple 1 :
MOV BX , AX
SHL BX , 1 ; BX = AX * 2
ADD BX , AX ; BX = AX * 3
MOV CL , 4 ; CL = 4
SHL AX , CL ; AX = AX * 16
ADD AX , BX ; AX = AX * 19
RST(S6)-ENSA -KENITRA 58
Instructions logiques
--Décalage arithmétique--
L’instruction SAL(Shift Arithmetic Left): décalage arithmétique à
gauche
Syntaxe : SAL Destination, Compteur
Ces instructions sont réservées pour les opérations sur les nombres
signés
RST(S6)-ENSA -KENITRA 59
Instructions logiques
--Rotation--
L’instruction ROL (Rotate Left): rotation à gauche
Syntaxe : ROL Destination, Compteur
RST(S6)-ENSA -KENITRA 60
Instructions logiques
--Rotation--
L’instruction RCL (Rotate Left through Carry): rotation à gauche à
travers la retenue
Syntaxe : RCL Destination, Compteur
RST(S6)-ENSA -KENITRA 61
Instructions logiques
--Rotation--
Exemple 1 :
STC ;Mettre CF à 1
MOV AL, 5AH ;AL = 0101 1010
MOV CL, 03H ;CL= 0000 0011
ROL AL, CL ;AL= 1101 0010=D2h et CF=0
Exemple 2 :
STC ;Mettre CF à 1
MOV AL, 5AH ;AL = 0101 1010
MOV CL, 03H ;CL= 0000 0011
ROR AL, CL ;AL= 0100 1011=4Bh et CF=0
Exemple 3 :
STC ;Mettre CF à 1
MOV AL, 5AH ;AL = 0101 1010
MOV CL, 03H ;CL= 0000 0011
RCL AL, CL ;AL= 1101 0101 et CF=0
RST(S6)-ENSA -KENITRA 62
Instructions de branchement conditionnel
RST(S6)-ENSA -KENITRA 63
Instructions de branchement conditionnel
Exemple 1 :
ENCORE : CMP AL, [BX]
JA PROCHAIN
MOV AL, [BX]
PROCHAIN : INC BX
LOOP ENCORE
Exemple 2 :
ENCORE : MOV AL, [BX]
SUB AH, AL
JZ PROCHAIN
MOV AL, [BX]
PROCHAIN : INC BX
LOOP ENCORE
RST(S6)-ENSA -KENITRA 64
Instructions de branchement conditionnel
Exemple 3 :
Ecrire la suite d’instructions pour réaliser les étapes suivantes :
1. Mettre 1 dans AX
2. Incrémenter AX
3. Si AX <200 recommencer au point 2
4. Sinon copier AX dans BX
RST(S6)-ENSA -KENITRA 65
Instructions de branchement
RST(S6)-ENSA -KENITRA 66
Instructions de branchement
--Branchement inconditionnel--
RST(S6)-ENSA -KENITRA 67
Instructions de branchement
--Branchement inconditionnel--
RST(S6)-ENSA -KENITRA 68
Instructions de branchement
--Branchement inconditionnel--
Exemple :
;Ecriture de la procédure
Somme : PROC NEAR
ADD AX, BX ; AX <- AX + BX
RET SOMME ENDP
;Appel de la procédure
MOV AX, 6
MOV BX, adress
CALL Somme
MOV adress , AX
RST(S6)-ENSA -KENITRA 69
Instructions de branchement
--Branchement inconditionnel--
RST(S6)-ENSA -KENITRA 70
Instructions de branchement
--Boucle--
Exemple :
MOV AX, 05
MOV CX, 05
Start: INC AX
LOOP Start ; CX=CX-1 bouclage à Start si CX différent de 0
MOV BX, AX ; suite ici si CX=0
RST(S6)-ENSA -KENITRA 71
Instructions de branchement
--Boucle--
Exemple :
MOV AX, 03
MOV CX, 06
Start: ADD DH,DL
INC AX
CMP AL, 06
LOOPNZ Start ; CX=CX-1 bouclage à Start si CX0 Et AL6
MOV AH, 03 ; suite ici si CX=0 ou AL=6
RST(S6)-ENSA -KENITRA 72
Instructions de branchement
--Interruptions--
Exemple:
; stop the program and return the control to the operating System
MOV AH,4ch
INT 21h
; show the mouse pointer
MOV AH,1h
INT 33h
La plupart du temps, il faudra modifier les registres (ici par exemple AH) pour
lancer une interruption
RST(S6)-ENSA -KENITRA 79
Instructions de contrôle du 8086
RST(S6)-ENSA -KENITRA 80
Exemple : produit de deux matrices 3x3
RST(S6)-ENSA -KENITRA 81
Exemple : produit de deux matrices 3x3
RST(S6)-ENSA -KENITRA 82