Vous êtes sur la page 1sur 75

Systèmes Microprogrammés

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

 La tâche principale d'un microprocesseur est d'exécuter des programmes.


 Un programme est une suite d’instructions écrites une par ligne
 Un processeur sait exécuter un ensemble bien défini de codes machines (jeu
d'instructions)
 Chaque code machine est un nombre binaire de quelques octets, il correspond à
une instruction élémentaire bien définie. on a pris l'habitude de représenter ces
codes en hexadécimal
 Pour un langage de bas niveau comme l'assembleur, une instruction réalise une
tâche élémentaire comme une addition par exemple
 Avec un langage de haut niveau comme le C/C++, une instruction peut réaliser un
ensemble de tâches qui nécessiterait plusieurs instructions en Assembleur

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

 Une instruction est composée de deux champs :

Champ code opération Champ Opérande

• Le Champ code opération : indique au processeur quelle instruction réaliser


• Le champ Opérande : contient la donnée ou la référence à une donnée en
mémoire (son adresse)
• Le champ Opérande peut être composé de un ou deux opérandes
• Le champ Opérande peut être des registres, des constantes ou le contenu
de cases mémoire
 Exemple:
MOV BX,AX a comme code machine 8B D8
8B : Code Opération
D8 : Opérande

RST(S6)-ENSA -KENITRA 6
Modes d’adressages

 Un mode d'adressage est la façon dont une instruction spécifie le champ


Opérande.
 Selon le mode d’adressage , une instruction sera codé sur 1,2,3 ou 4 octets
 On distingue 7 modes d’adressages:
• Adressage Registre
• Adressage Immédiat
• Adressage Direct
• Adressage Indirect
• Adressage Basé
• Adressage Indexé
• Adressage Basé Indexé

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

• L’adressage indirect est divisé en 3 catégories selon le registre d’offset


utilisé.

• 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

• Adressage Basé Indexé


• L’Offset de l’adresse de l'opérande est la somme d'un registre de base et d'un
registre d'index
• On peut préciser un déplacement
• Si le registre Segment n'est pas spécifié, le segment par défaut du registre de
base est utilisé

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.

MOV [adresse], AL donne

 Si le registre est un registre de 16 bits (2 octets), l’opération se fera avec deux


cases mémoires

MOV [adresse], AX donne

• 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 BYTE PTR [adresse],4Ah ; On écrit 4A dans la position adresse

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

 Afficher le contenu de la RAM, en hexadécimal puis en décimal à partir de


l’adresse 4000h

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

 Le 8086 dispose de 133 instructions. On distingue:


• Les instructions de transfert
• Les instructions arithmétiques
• Les instructions logiques
• Les instructions de branchement conditionnel
• Les instructions de branchement
• Les instructions de contrôle
• Les instructions de traitement de chaines de caractères

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:

MOV AL,77h ; registre et donné immédiate


MOV AL,[1000h] ;registre et donné en mémoire
MOV BX,AX ;registre et registre
MOV WORD PTR [1000h], 1258h ;mémoire et donné immédiate

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

PUSH registre EX: PUSH AX


POP registre EX: POP AX

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]

Exemple: conversion du code binaire 4 bits en un digit hexa codé en ASCII

Tab DB ‘0123456789ABCDEF‘ ; déclarer un tableau d’octets


MOV AL,1110B ; chargement de la valeur à convertir (14)
MOV BX, OFFSET TAB ; pointé sur le tableau
XLAT ; AL est chargé par le code ASCII de ‘E’

RST(S6)-ENSA -KENITRA 30
Instructions de transfert
--Transfert d’adresses--

 Instruction LEA (Load Effective Adress)


• Elle transfert l'adresse offset (décalage) d'une opérande mémoire dans un
registre de 16 bits (pointeur ou index)

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 :

• SAHF : Store AH into Flags : Place le contenu de AH dans l'octet de poids


faible du registre d'état (FLAGS)

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 ?

MOV AL, 20h


MOV AH, 2Dh
ADD AL, AH
MOV BL, AL

RST(S6)-ENSA -KENITRA 37
Instructions arithmétiques
--Addition--

 L’instruction ADC (Add with Carry)


• Elle effectue une addition, le résultat est placé dans la destination

Syntaxe : ADC Destination, source


Destination <------------ Destination + source + retenue
• Le résultat varie en fonction de Flag CF
 CF=0: le résultat est une addition normale
 CF=1: le résultat de l’addition est incrémenté de 1
• Cette instruction présente aussi plusieurs cas

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

 L’instruction INC (INCrement)


• Elle permet d'incrémenter le contenu de la destination
Syntaxe : INC Destination
Destination <---------- Destination + 1

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

 L’instruction SUB (SUBtract)


• Elle permet de soustraire la destination de la source (octet ou un mot) le
résultat est mis dans la destination
Syntaxe : SUB Destination, Source
Destination <---------- Destination-Source

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

 L’instruction SBB (SUBtract with Borrow)


• Elle permet de soustraire la destination de la source et la retenue (octet
ou un mot) le résultat est mis dans la destination

Syntaxe : SUB Destination, Source


Destination <---------- Destination-Source-retenue

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

 L’instruction DEC (DECrement)


• Elle permet de décrémenter le contenu de la destination

Syntaxe : DEC Destination


Destination <---------- Destination-1

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

 L’instruction NEG (NEGatif)


• Cette instruction inverse le contenu d’un registre ou d’une mémoire
(complémentation à 1+1: complémentation à 2)

Syntaxe : NEG Destination


Destination <---------- 0-Destination

Exemple:
MOV AL, 5h
NEG AL ; AL contient FB ( soit -5)

RST(S6)-ENSA -KENITRA 44
Instructions arithmétiques
--Soustraction--

 L’instruction CMP (CoMParison)


• Elle soustrait la source de la destination , qui peut être un octet ou un mot
Syntaxe : CMP Destination , Source
• Le résultat n'est pas mis dans la destination

• 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:

Ecrire un programme en assembleur qui permet de charger AH par 12h et BH


par 23h,faire la multiplication non signé des deux opérandes et stocker le
résultat dans BX ?

MOV AH, 12h


MOV BH, 23h
MOV AL,AH
MUL BH
MOV BX,AX

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

 L’instruction AND (ET logique)


• Elle effectue un ET logique (Bit à Bit) entre la destination et la source
Syntaxe : AND Destination, source
Destination <---------- Destination . source

Exemple:

MOV AH, 9Dh ; 10011101


MOV BH, 6Dh ; 01101101
AND AH,BH ; AH contient 0Dh

RST(S6)-ENSA -KENITRA 52
Instructions logiques
--Logique--

 L’instruction OR (OU logique)


• Elle effectue un OU logique (Bit à Bit) entre la destination et la source
Syntaxe : OR Destination, source
Destination <---------- Destination . source

Exemple:

MOV AH, 9Dh ; 10011101


MOV BH, 6Dh ; 01101101
OR AH,BH ; AH contient FDh

RST(S6)-ENSA -KENITRA 53
Instructions logiques
--Logique--

 L’instruction XOR (OU Exlusif logique)


• Elle effectue un XOR logique (Bit à Bit) entre la destination et la source
Syntaxe : XOR Destination, source
Destination <---------- Destination . source

Exemple:

MOV AH, 9Dh ; 10011101


MOV BH, 6Dh ; 01101101
XOR AH,BH ; AH contient F0h

RST(S6)-ENSA -KENITRA 54
Instructions logiques
--Logique--

 L’instruction NOT (NON logique)


• Elle effectue la complémentation à 1 d’un nombre
Syntaxe : NOT Destination
Destination <---------- Complément à 1 (Destination)

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

 L’instruction SHL(Shift Left): décalage logique à gauche


Syntaxe : SHL Destination, Compteur

 L’instruction SHR(Shift Right): décalage logique à droite


Syntaxe : SHR Destination, Compteur

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 AL, 09H ; AL = 0000 1001=09h


MOV AH, AL ; AH = 0000 1001=09h
SHL AH, 1 ;AH= 0001 0010=12h=18
MOV AH, AL ; AH = 0000 1001=09h
SHR AH, 1 ;AH= 0000 0100=04h=4

Exemple 2 : Multiplication par un nombre différent de 2n


; Mettre dans AX=AX*19=AX*(16+2+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

 L’instruction SAR(Shift Arithmetic Right): décalage arithmétique à


gauche
Syntaxe : SAR 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

 L’instruction ROR (Rotate Right): rotation à droite


Syntaxe : ROR 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

 L’instruction RCR (Rotate Right through Carry): rotation à droite à


travers la retenue
Syntaxe : RCR 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

MOV AX, 0001H


INCR : INC AX
CMP AX, 200
JB INCR
MOV BX, AX

RST(S6)-ENSA -KENITRA 65
Instructions de branchement

RST(S6)-ENSA -KENITRA 66
Instructions de branchement
--Branchement inconditionnel--

 L’instruction CALL: appel de procédure


Syntaxe : CALL label

 L’instruction RET: retour d’une procédure


Syntaxe : RET

RST(S6)-ENSA -KENITRA 67
Instructions de branchement
--Branchement inconditionnel--

 Une procédure s’écrit comme l’exemple suivant

Si la procédure appartient au même segment que le programme principal elle


est dite de type NEAR sinon elle est dite de type FAR

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

 L’instruction JMP: saut inconditionnel


Syntaxe : JMP label

• Provoque un saut sans condition à la ligne portant l'étiquette

RST(S6)-ENSA -KENITRA 70
Instructions de branchement
--Boucle--

 L’instruction LOOP: boucle


Syntaxe : LOOP label

• Elle décrémente le contenu de CX de 1

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

 L’instruction LOOPNE/ LOOPNZ : boucle si non égal ou non égale à 0


Syntaxe : LOOPE label

• Elle décrémente le contenu de CX de 1

Exemple :
MOV AX, 03
MOV CX, 06
Start: ADD DH,DL
INC AX
CMP AL, 06
LOOPNZ Start ; CX=CX-1 bouclage à Start si CX0 Et AL6
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