Vous êtes sur la page 1sur 79

Jeu d'instructions dU

8086
INTRODUCTION

Un programme est un ensemble d'instructions


écrites pour résoudre un problème.
Les instructions sont les directions suivies par un
microprocesseur pour exécuter une tâche ou une
partie de tâche. qu'un microprocesseur suit pour
exécuter une tâche ou une partie de tâche.
INTRODUCTION

Le langage machine est le langage qu'une


machine peut comprendre. Les instructions
dans ce langage sont écrites en bits binaires.
L'ordinateur interprète cette configuration
binaire comme une instruction pour effectuer
une tâche particulière.
INTRODUCTION

Il s'agit d'un langage convivial pour les machines


mais non convivial pour les utilisateurs.
le langage assambleur présente une solution
adéquate à ces problèmes. ces instruction sont en
alphabets (mnemonics) ce langage est traduit en
langage machine manuellement ou par un
compilateur.
MODES D'ADRESSAGE DU 8086

Les modes d'adressage sont les manières de spécifier un


opérande dans une instruction. En 8086, les modes
d'adressage sont généralement classés en deux groupes:
1. Modes d'adressage des données: permettent de définir
un opérande de données.
2. Modes d'adressage d'adresse: permettent de spécifier
une branche d’adresse dans les instructions de transfert
de contrôle.
Adresse physique 8086
L'adresse physique (20 bits) peut
être calculée à l'aide de l'équation
suivante:
PhysiqueAdresse =[ SegmentAdresse] x 10H + OffsetAdresse

Registre de
Registre d’offset
segment
CS IP
DS SI, DI, BX
ES DI, SI, BX
SS SP, BP
EXEMPLE : Adresse physique 8086
Déterminez l'adresse physique lorsque CS = 5300H,IP = 0200H.
Écrivez l'adresse de début et de fin du segment de code.
SOLUTION
Le contenu du SC est décalé à gauche de 4 bits et l'adresse de
base devient 53000H. Pour déterminer l'adresse physique, le
contenu de l'IP sera ajouté à l'adresse de base. Par conséquent,
adresse physique = 53000 + 0200 = 53200H
la taille de la mémoire CS est 64K, l'adresse de fin sera calculée
après l'ajout de 64K avec l’adresse de début la mémoire de CS
L'adresse de fin du CS = 53200 + FFFF = 631FFH.
Modes d'adressage des données
Le mode d'adressage des registres indirect du 8086 fonctionne
avec les registres SI, DI, BX et BP. Outre ces modes d'adressage
de données, le 8086 dispose de cinq autres modes d'adressage.
Ceux-ci sont:
1. Mode d'adressage de base
2. Mode d'adressage d'index
3. Mode d'adressage indexé basé
4. Base indexée avec mode d'adressage par déplacement
5. Mode d'adressage de chaîne
Mode d'adressage immédiat
En mode d'adressage immédiat, les opérandes
sont spécifiés dans l'instruction elle-même.
L'opérande immédiat ne peut être que l'opérande
source. Par exemple: AX 25 00

MOV AX, 2500H


Ici les données immédiates sont 2500H.
le contenu du registre AX est 2500H
Mode d'adressage de registre
Les instructions 8086 peuvent fonctionner sur le jeu de registres
à usage général du 8086. Le contenu d'un registre est
accessible en spécifiant le nom du registre comme opérande à
l'instruction.
MOV AX, BX
MOV DL, AL
MOV SI, DX
Les deux opérandes doivent avoir la même taille. Les registres
de segment ne sont pas utilisés comme registres de données
pour contenir des valeurs arbitraires. Ils ne doivent contenir que
des adresses de segment.
Mode d'adressage
Dans ce mode d'adressage, direct
l'instruction se compose d'une adresse
mémoire 16 bits ou d'une adresse E/S
8 bits. L'adresse mémoire 16 bits est
toujours écrite entre crochets. Tous les
modes d'adressage direct pointent
dans le segment de données DS.
Pour pointer sur un autre segment de mémoire il faut le spécifié
comme dans l’instruction suivante: MOV AX, ES: [4321H].
EXEMPLE : Mode d'adressage direct
Afficher l'emplacement des données en mémoire, après l'exécution de chacune de ces
instructions, si le contenu des registres est tel qu'indiqué.
DS = 1112H, AX = EE78H.
a) MOV [0422H], AL b) MOV [0424H], AX

La destination est un emplacement de mémoire, qui est spécifié directement


dans l’instruction.Les modes d'adressage direct pointent dans DS.

PhysiqueAdresse =[ SegmentAdresse] x 10H + OffsetAdresse


a) PhysiqueAdresse= 1112Hx10H + 0422H = 11542H
instruction adresse contenu
aprés l’execution le contenu du registre AL est
a 11542H 78H
déplacé vers cette adresse
b 11544H 78H
b) PhysiqueAdresse= 1112Hx10H + 0424H= 11544H
b 11545H EEH
Le contenu d'AX est déplacé vers cette adresse.
Mode d’adressage registre indirect
Ce mode d'adressage est également utilisé en ce
qui concerne la mémoire et les E/S. Dans ce
mode d'adressage, l'adresse mémoire est
spécifiée par un pointeur, un index ou des
registres de base. Ces registres sont écrits entre
crochets. Il existe 4 formes de ce mode
d'adressage sur lemémoire
MOV DX, [BX] segment 8086, DS qui
MOVsont illustrées
DX, [BP] par les
segment mémoire SS
instructions
MOV DX, [SI] suivantes : DS MOV DX, [DI] segment mémoire DS
segment mémoire
Mode d’adressage registre indirect

Pour accéder aux données à partir d'un autre


segment que le segment par défaut, les symboles
de préfixe de remplacement de segment doivent
être utilisés. Les instructions suivantes illustrent
l'utilisation de ces remplacements:
MOV AX, CS:[BX] MOV AX, DS:[BP]

MOV AX, SS:[SI] MOV AX, ES:[DI]


Exemple : Mode d’adressage registre indirect

Afficher l'emplacement des données en mémoire, après l'exécution


de chacune de ces instructions, si le contenu des registres est tel
qu'indiqué. instruction adresse contenu

DS = 1112H, BX = 3400H c 14520H 78H


c 14521H EEH
MOV [BX], AX
C'est un cas d'adressage indirect de registre. BX est un pointeur
vers l'adresse 3400H.
PhysiqueAdresse= 1112Hx10H + 3400H= 11544H
Le contenu d'AX est déplacé vers cette adresse.
Mode d'adressage base indexe avec déplacement
C'est le cas lorsque l'adresse physique est spécifiée avec un
registre de base, un registre d'index ainsi qu'un
déplacement. L'adresse physique est la somme des deux
registres et du déplacement. Par exemple, les éléments
suivants utilisent le mode d'adressage indexé relatif
MOV DL, 15[BX][DI]
MOV 5[BP][SI], AX
MOV CL, COST[BX][SI]
Exemple : Mode d'adressage base indexe avec déplacement

Trouvez l'adresse de la mémoire physique pour les instructions


suivantes si le contenu des registres requis est le suivant:
SS = 2344H, BP = 1402H, SI = 4442H
MOV AL, 5[SI][BP]
L'adresse effective est calculée comme la somme du déplacement
et du contenu des registres SI et BP.
PhysiqueAdresse= 2344Hx10H + 0005H + 4442H + 1402H=28C89H
JEU D’INSTRUCTION
Une instruction est une commande appliquée au
microprocesseur pour exécuter une fonction spécifique. Le jeu
d'instructions d'un microprocesseur désigne l'ensemble du
groupe d'instructions.
Les instructions sont classées dans les 5 groupes fonctionnels:
1. Groupe de transfert de données
2. Groupe arithmétique
3. groupe logique
4. Groupe de contrôle de succursale
5. Groupe E/S et commande machine
Groupe d’instruction de Transfert de données
Les instructions de transfert de données copient les données d'une
source vers une destination sans modifier le contenu de la source.
Le transfert de données peut être possible entre registres ou entre
mémoires ou entre mémoire et registres ou entre ports d'E/S et
l'accumulateur.
Groupe d’instruction de Transfert de données
Format d'instructions Fonction réalisée
MOV dest, src (Move) Copiez le contenu de la source vers la destination
LEA reg16, memory (Load Effective Address) Charger le décalage de l'emplacement mémoire spécifié dans
le registre (16 bits)
XCHG dest, src (Exchange) Échangez le contenu de la destination et de la source
PUSH source (Push) Transférer un mot de la source au sommet de la pile (SS :
SP).
POP destination (Pop) Transférer le mot au sommet de la pile actuelle (SS : SP)
vers la destination
LDS reg16, memory (Load to DS and register) Charger le pointeur lointain sur DS et s'enregistrer
LES reg16, memory (Loads to ES and register) Charger le pointeur lointain sur ES et s'enregistrer
LAHF (Load AH with flags) Copiez les bits 0 à 7 du registre des flags dans AH
SAHF (Store AH with flags) Transférer les bits 0 à 7 de AH dans le registre des flags
PUSHF (Push flags) Poussez le registre de flags sur la pile
POPF (Pop flags) dépiler un mot de la pile dans le registre du flags
XLAT (Translate) Remplace l'octet dans AL par un octet d'une table
utilisateur adressée par BX
MOV destination, source Déplacer la source vers la destination

L'instruction MOV copie le deuxième opérande (source)


vers le premier opérande (destination) sans modifier le
contenu de la source.
L'opérande source : 1)valeur immédiate, 2)un registre
3)emplacement mémoire.
Le registre de destination: 1)un registre à usage
général 2) emplacement mémoire.
Les deux opérandes doivent avoir la même taille, un
octet ou un mot.
MOV destination, source Déplacer la source vers la destination

• Les E/S ne peuvent communiquer qu'avec l'accumulateur.


• Les données immédiates ne peuvent pas être transférées
dans un registre de segment.
• Les déplacements vers et depuis les registres de segment
sont toujours 16 bits.
• L'instruction MOV ne peut pas définir la valeur des
registres CS et IP.
• On ne peut pas copier la valeur d'un registre de segment
vers un autre registre de segment.
MOV destination, source Déplacer la source vers la destination

Les types d'opérandes suivants sont pris en charge :


MOV REG, memory
MOV memory, REG
MOV REG, REG
MOV memory, immediate
MOV REG, immediate
Les types de MOV pris en charge par les registres de segment :
MOV SREG, memory
MOV memory, SREG
MOV REG, SREG
MOV SREG, REG
Exemple:

MOV AX, 2500H,


AX 25 00
MOV DS, AX DS 25 00

Dans l'instruction MOV, le registre des flags


reste inchangé.
IN entrer les Données à partir du port d'entrée
IN AL, DX; Move the content of the port number specified in DX to AL.
Opérandes
– AL, adresse de port 8 bits
– AL, DX
– AX, adresse de port 8 bits
– AX, DX
Cette instruction transfère un octet ou un mot d'un port au registre de
l'accumulateur. L'adresse du port est spécifiée par l'opérande source,
qui peut être DX ou une constante 8 bits. Si l'adresse du port est de 8
bits, l'adressage direct sera utilisé.
Exemple : Données d'entrée à partir du port d'entrée

IN AX, 04H; Déplacer le contenu du numéro de


port 04H et 05H vers AL et AH
IN AL, 70H; Déplacez le contenu du numéro de
port 70H vers AL.
A noter que le registre DX n'est pas mis
entre crochets comme l'adressage mémoire.
OUT sortir les Données vers le port de sortie
OUT DX, AL; Transférez le contenu du registre AL vers le port spécifié par
DX. Le registre des flags reste inchangé.
Opérandes
AL, 8-bit port address
AL, DX
AX, 8-bit port address
AX, DX
Cette instruction transfère un octet ou un mot vers un port de
sortie à partir du registre de l'accumulateur. L'adresse du port
est spécifiée par l'opérande de destination.
LDS Rd, M: : charger le pointeur à l'aide de DS

Cette instruction est utilisée pour charger le mot double stocké en


mémoire dans le registre spécifié et le registre DS.
Le registre à usage général est chargé à partir du mot de poids
faible de l'opérande mémoire et le registre de segment DS à
partir du mot de poids fort.
LDS SI, [BX];
SI est réglé sur [BX:BX + 1]
et DS est réglé sur [BX + 2:BX + 3].
Le registre des flags reste inchangé.
LEA Rd, M : Charger l'adresse effective
Cette instruction est utilisée pour charger l'adresse
effective (offset) de l'opérande source (mémoire)
dans le registre de destination spécifié. Il charge le
registre 16 bits spécifié avec l'adresse effective
(offset) de l'emplacement mémoire spécifié.
LEA SI, DS:[4F00H] charge le registre de
destination SI avec la valeur 4F00H.
LES Rd, M : Charger l'adresse effective et le registre ES
LES transfère une variable à 32 bits de l’opérande source,
qui doit être un opérande de mémoire, vers l’opérande de
destination et le registre ES. le mot de déplacement du
pointeur est transféré dans l’opération de destination.

LES DI, [BX + 15]; DI est réglé


sur [BX + 15:BX + 16]
et ES est réglé sur [BX + 17:BX
+ 18].
Opérandes PUSH Poussez le contenu
RÉG vers le haut de la pile
SREG
Mémoire
L'instruction push pousse
l'opérande source sur la pile.
Après l'instruction PUSH, le
contenu de SP est diminué
de 2 et la valeur source est
copiée dans SS:SP.
Operandes POP transfère le mot situé au
REG sommet actuel de la pile
SREG
mémoire
POP transfère le mot situé au
sommet actuel de la pile (pointé
par SP) dans l’opérande de
destination, puis incrémente SP
de 2 pour qu’il pointe vers le
nouveau sommet de la pile.
Exemple
POP DX
POP DS (CS ne s’emploie par avec POP)
LAHF Load flag SAHF Store flag

LAHF:
charger les indicateurs dans le registre AH copie
respectivement SF, ZF , AF ,PF ,CF dans les bites
7, 6, 4, 2, 0 du registre AH
SAHF:
trnsfère les bites 7, 6, 4, 2 et 0 du registre AH
dans SF, ZF, AF ,PF et CF, respectivement.
Instructions arithmétiques
Le microprocesseur 8086/8088 peut effectuer les
opérations arithmétiques sur des données binaire
signé, binaire non signé, BCD non compressé non
signé et BCD compressé non signé.
Le 8086 propose de nombreuses opérations
arithmétiques : addition, soustraction, négation,
multiplication, division et comparaison de deux
valeurs.
Instructions arithmétiques
Format
Fonction réalisée Flags concernés
d'instructions
ADD dest, src Ajouter dest et src AF CF OF PF SF ZF
ADC dest, src Ajouter dest, src et CF AF CF OF PF SF ZF
INC dest Add 1 to the destination AF - - OF PF SF ZF
SUB dest, src Soustraire src de dest AF CF OF PF SF ZF
SBB dest, src Soustraire source et CF de destination AF CF OF PF SF ZF
DEC dest Soustraire 1 de la destination AF - - OF PF SF ZF
Soustrait la source de la destination et met à jour les indicateurs
CMP dest, src mais n'enregistre pas le résultat. Seuls les drapeaux sont concernés AF CF OF PF SF ZF

MUL src Multiplication non signée - - CF OF - - - - - -

DIV src Division binaire non signée --------------


CBW Convertir un octet en mot Aucune
Instructions arithmétiques
Format
Fonction réalisée Flags concernés
d'instructions
CWD Convertir un mot en double mot Aucune
DAA Decimal Adjust for Addition AF CF - - PF SF ZF
DAS Ajustement décimal pour l'addition AF CF - - PF SF ZF
NEG dest Négation du complément à deux AF CF OF PF SF ZF
IMUL src Multiplier signé –– CF OF –– –– ––
IDIV src Division entière signée –– –– –– –– –– ––
AAA Ajustement ASCII pour l'addition AF CF –– –– –– ––
AAS Ajustement ASCII pour la soustraction AF CF –– –– –– ––

AAM Ajustement ASCII pour la multiplication –– –– –– PF SF ZF


AAD ASCII Adjust for Division SF –– –– PF –– ZF
ADD La somme des deux opérandes, qui
Operandes peuvent être des octes ou des mots,
REG, memory
remplace l’opérandes de destination.
memory, REG
REG, REG Les bits des flags sont modifiés en
memory, immediate fonction du résultat de l'opération.
REG, immediate
Exemple: utiliser l’instruction ADD pour effectuer l'opération F=X+Y+Z
MOV AX, X
ADD AX, Y
ADD AX, Z
MOV F, AX
Operandes ADC Ajouter avec retenue
REG, memory additionne des opérandes, qui peuvent être des
memory, REG octes ou des mots; puis ajout 1 si CF=1 et
REG, REG remplace l’opérande de destination par le
memory, immediate résultat. les opérandes peuvent être des
nombres binaires signés ou non signés
REG, immediate
Exemple: Efectuer l'addition des deux nombres 12345678H et
FEDB4321H à l'aide de l'instruction ADC.
MOV AX, 5678H
ADD AX, 4321H
MOV BX, 1234H
ADC BX, FEDBH
Operandes SUB Soustraire
REG, memory
memory, REG
L’opérande source est soustrait de
REG, REG l’opérande de destination; le
memory, résultat remplace l’opérande de
immediate destination. les opérandes peuvent
REG, immediate
être des octets ou des mots. les
Example:
MOV AL, 05H deux opérandes peuvent être des
SUB AL, 02H nombres binaires signés ou non.
AX 00 03H
Operandes SBB Soustraire
REG, memory soustrait la source de la destination,
memory, REG
puis soustait 1 si CF est à 1; le
REG, REG
résultat est ensuite envoyé dans
memory, immediate
REG, immediate
l’opérande de destination. les deux
Example: opérandes peuvent être des octets
MOV AX, 5678H ou des mots. il peuvent être des
SUB AX, 4321H nombres binaires signaés ou non
Opérande DEST = opérande DEST - opérande SRC- CF
MOV BX, 1234H
SBB BX,montre
l'exemple FEDBH la soustraction de FEDB4321H à partir de 12345678H.
INC Incrément
Operandes
REG
Ajoute1 à l’opérande de
memory destination. L’opérande peut être
un octet ou un mot. l'instruction INC
Exemple : n'affecte pas le flag de retenue.
INC BL L'instruction INC est une instruction
INC BX à un octet.
DEC Décroissance
Operands
REG Soustrait un de l’opérande de
memory destination. Celui-ci peut être un
Exemple : octet ou un mot. L'instruction DEC
DEC BX
est une instruction à un octet.
l'instruction DEC n'affecte pas le
flag de retenue
DIV Division non signée
Operands DIV effectue une division non signée de
REG l’accumulateur par l’oppérande source.
memory

Exemple
MOV AX, 00C8H
MOV CL, 06H
DIV CL
Après ce programme le résultat est disponible en AL (= 21H)
et le reste est présent en AH (= 02H).
Operands IDIV Division signée
REG
memory effectue une division signée de
l’accummulateur par l’oérande source.

Example
MOV AX, -200;AX = 0FF38H
MOV CL, 6
IDIV CL

Après ce programme, le résultat est disponible dans AL (= DFH =


33) et le reste est présent dans AH (= FEH = 02).
Operands MUL Multiplication
REG
memory
Effectue une multiplication non signée de
l’opérandee source de l’accumulateur
Exemple
MOV AL, 0FDH
MOV CL, 05H
MUL CL; AX = 04F1H

CF = OF = 0 lorsque la partie
haute du résultat est nulle.
Operands IMUL Multiplication signée
REG
memory
Effectue une multiplication signée de l’opérandee
source de l’accumulateur
Exemple
MOV AL, –03H
MOV CL, –05H
IMUL CL; AX = 000FH

CF = OF = 0 lorsque le résultat
correspond à l'opérande d'IMUL
NEG Négation
Operands
REG
memory
Calcule le complément à 2 de l’opérande
Exemple

MOV AL, 15H


NEG AL; AL = 0EBH (Complement à 2 de 15H)
CBW Convertir octet en mot
pas d'opérandes
converte la valeur signée dans le registre AL en une
valeur signée 16 bits équivalente dans le registre AX
en étendant le bit de signe vers la gauche.

MOV AX, 0; AH = 0, AL = 0
MOV AL, F5H
CBW; AX = 0FFF5H
F5H est équivalent à 11110101B, cela signifie que le bit de
signe est 1. Après le CBW, le bit de signe (1 dans ce cas)
sera étendu au registre AX.
CWD Convertir mot en double mot
pas d'opérandes
CWD convertit la valeur signée 16 bits dans le
registre AX en une valeur signée 32 bits équivalente
dans la paire de registres DX:AX en dupliquant le bit
Exemple
de signe vers la gauche.
MOV DX, 0
MOV AX, 0
MOV AX, –14H; DX:AX = 0000H:0FFECH
CWD; DX:AX = 0FFFFH:0FFECH
Instruction logique
Le 8086 fournit des instructions logiques.
tel que AND, OR, XOR, TEST, NOT et
CMP. Ces instructions peuvent manipuler
des bits, convertir des valeurs, effectuer
des opérations logiques, compresser et
décompresser des opérations de données
Instruction logique
Format
Fonction réalisée Flags concernés
d'instructions

ET logique des deux opérandes renvoyant le résultat CF DE PF SF ZF


AND dest, src dans la destination (AF non défini)

OU inclusif logique des deux opérandes renvoyant le CF DE PF SF ZF


OR dest, src résultat dans la destination (AF non défini)

Effectue un OU exclusif bit à bit des opérandes CF DE PF SF ZF


XOR dest, src renvoyant le résultat dans la destination (AF non défini)

Inverse les bits de l'opérande "dest" formant le


NOT dest complément à 1
Aucune

Effectue un ET logique des deux opérandes mettant à CF DE PF SF ZF


TEST dest, src jour le registre des drapeaux sans enregistrer le résultat (AF non défini)
AND LOGIQUE
Operandes:
Cette instruction effectue un AND
REG, memory
logique au niveau du bit de
memory, REG
REG, REG l'opérande de destination et de
memory, immediate l'opérande source. Le résultat de
REG, immediate l'opération est stocké dans
Exemple l'opérande de destination.
MOV AL, 61H; AL = 01100001
AND AL, CFH; AL = 01000001
CMP Comparer
Operandes Le microprocesseur exécute cette
REG, memory instruction CMP en soustrayant l'opérande
source de l'opérande destination mais
memory, REG aucun des opérandes n'est modifié. Le
REG, REG résultat est reflété par les bits de Flags.
memory, immediate
REG, immediate
Exemple:
CMP AX, BX.
NOT logique
Operandes
Cette instruction génère le
REG
complément à 1 ou l'opération NOT
memory
de l'opérande et enregistre le
Exemple
résultat dans le même opérande.
MOV AL, 39H
Après cette instruction, le registre
NOT AL; AL = C6H
des Flags reste inchangé.
Operandes
OR logique
REG, memory Cette instruction effectue une opération OR
memory, REG logique au niveau du bit entre les
REG, REG opérandes source et destination. Le
memory, immediate résultat est stocké dans l'opérande de
REG, immediat destination. Après l'opération, les bits des
Flags FZ, FS et FP sont modifiés tandis
que les bits CF et OF sont à 0 et AF est
indéfini.
Operandes TEST
REG, memory Cette instruction effectue un AND
memory, REG logique entre tous les bits des opérandes
REG, REG source et destination. Cette instruction
memory, immediate effectue l'opération logique ET mais
REG, immediate aucun des opérandes n'est modifié,
Exemple seuls les Flags ZF, SF, PF sont modifiés.
MOV AL, 25H Les Flags CF et OF sont effacés.
TEST AL, 05H; ZF = 0
TEST AL, 20H; ZF = 0
Operandes XOR Logique
REG, memory
memory, REG
REG, REG Cette instruction effectue une
memory, immediate
REG, immediat opération OU exclusif au
Exemple
niveau du bit entre les
AL =8CH, CH =
67H, opérandes source et
XOR AL, CH destination. Après l'opération,
Après éxecution le résultat est stocké dans la
AL = EBH, CF = 0,
destination.
OF = 0, ZF = 0.
Instructions de décalage et de rotation
Le 8086 fournit quatre instructions de rotation
et trois instructions de décalage utilisées pour
la manipulation de bits, convertir des valeurs,
effectuer des opérations logiques, compresser
et décompresser des données et effectuer
des opérations arithmétiques.
RCR Rotate à droite à travers le Flag de retenu
Operandes
Cette instruction effectue la rotation du
memory, immediate
contenu de l'opérande1 à travers le Flag de
REG, immediate
retenu. Le deuxième opérande décide le
memory, CL
nombre de fois que la rotation aura lieu.
REG, CL
après l'exécution, seuls les bits d'indicateur
CF et OF
Exemple
STC; set carry (CF = 1)
MOV AL, 5AH; AL = 01011010
MOV CL, 03H
RCR AL, CL; AL = 10111010, CF = 0
ROL Faire pivoter à gauche
Operandes
memory, immediate
L'instruction ROL est utilisée pour faire tourner
REG, immediate
l'opérande vers la gauche. L'instruction ROL
memory, CL déplace le bit D15 ou D7 vers la position du bit D0
REG, CL de l'opérande ainsi que vers le drapeau de retenue
Exemple et tous les autres bits se déplacent vers la gauche,
STC; set carry (CF = 1)
MOV AL, 5AH; AL = 01011010
MOV CL, 03H
ROL AL, CL; AL = 11010010, CF = 0
RCL Rotation à gauche par le Flag de retenu
Operandes L'instruction RCL est utilisée pour faire tourner
memory, immediate l'opérande 1 vers la gauche via le Flag de Retenu
REG, immediate
memory, CL
REG, CL
Exemple :
STC; set carry (CF = 1)
MOV AL, 5AH; AL = 01011010
MOV CL, 03H
RCL AL, CL; AL = 11010101, CF = 0
ROR Rotation à droite
Operandes
Faire pivoter l'opérande1 vers la droite. Cette
memory, immediate
instruction est la même que celle du RCR à la
REG, immediate
différence que le LSB ira à la position MSB
memory, CL ainsi qu'au portage. Seuls les drapeaux de
REG, C report et de débordement seront modifiés, le
Exemple reste sera indéfini.
STC; set carry (CF = 1)
MOV AL, 5AH; AL = 01011010
MOV CL, 03H
ROR AL, CL; AL = 01011010, CF = 0
SAL/SHL Décalage arithmétique/logique vers la gauche
Les commandes SHL (Shift Logically Left) et
Operandes SAL (Shift Arithmetically Left) permettent de
memory, immediate décaler le contenu du premier opérande vers la
REG, immediate gauche. Les commandes SHL (Shift Logically
memory, CL Left) et SAL (Shift Arithmetically Left)
permettent de décaler le contenu du premier
REG, CL opérande vers la gauche
Exemple
MOV AL, 8EH; AL = 10001110
MOV CL, 01H
SAL AL, CL; AL = 00011100; CF = 1.
SAR Décalage airthmatique vers la droite
Operands décaler un nombre binaire vers la droite
memory, immediate équivaut à diviser ce nombre par deux,
REG, immediate donc l'instruction SAR est utilisée pour
memory, CL effectuer une division signée. Chaque
REG, CL décalage vers la droite divise la valeur
Exemple de la destination par deux.
MOV AL, 8EH; AL = 10001110
MOV CL, 02H
SAR AL, CL; AL = 11100011; CF = 1.
SHR Décalage logique vers la droite
Operandes
memory, immediate
REG, immediate
memory, CL
REG, CL
Exemple
MOV AL, 07H; AL = 00000111
MOV CL, 02H
SHR AL, CL; AL = 00000001; CF = 1
instruction de saut inconditionnel, car le instruction JMP
processeur saute à l'emplacement
spécifié. Les sauts peuvent être des
sauts courts lorsque l'adresse cible se
trouve dans le même segment que
l'instruction JMP ou des sauts éloignés
lorsqu'elle se trouve dans un segment
différent.
JMP destination
Operandes
label
L'adresse 4-byte spécifiée comme 234h:5678H. la première
4-byte address
valeur indique le segment et la deuxième valeur indique l’offset.
L'instruction de saut peut être
conditionnelle (30 instructions), Dans instructions JMP
ces instructions, le contrôle sera conditionnel
transféré à label ou à l'adresse 4-byte
uniquement lorsque la condition est
vraie. La condition peut être logique ou
peut être arithmétique.
Ménomonique Déscription
JC Sauter si CF=1
JNC Sauter si CF=0
JZ Sauter si ZF=1
JNO Sauter si CF=0
Instruction CALL
Instruction CALL
L'instruction CALL est utilisée pour transférer l'exécution vers un sous-programme ou
une procédure.
Une near CALL (proche) est un appel à une procédure qui se trouve dans le même
segment de code que l'instruction CALL. 8086 lorsqu'il rencontre un appel proche, il
décrémente le SP de 2 et copie l’offset de l'instruction suivante après le CALL sur la
pile. Il charge l'IP avec l'offset de la procédure puis lance l'exécution de la procédure.
Une far CALL (lointain)est l'appel à une procédure résidant dans un segment
différent. Ici, la valeur de CS et le décalage de l'instruction suivante sont tous deux
sauvegardés dans la pile. Et puis branche à la procédure en changeant le contenu du
registre CS avec la base de segment contenant la procédure et IP avec l’offset de la
première instruction de la procédure.
Instruction RET
L'instruction RET renverra
l'exécution d'une procédure à
l'instruction suivante après
l'instruction CALL dans le
programme appelant. S'il
s'agissait d'un appel proche,
alors IP est remplacé par la
valeur en haut de la pile,
Instructions de contrôle d'itération
Ces instructions sont utilisées pour exécuter une série
d'instructions un certain nombre de fois. Le nombre est
spécifié dans le registre CX, qui sera automatiquement
décrémenté au cours de l'itération. Mais ici, l'adresse de
destination du saut doit être comprise entre -128 et 127
octets Instruction Déscription
parcourir le jeu d'instructions jusqu'à ce que CX soit
LOOP égal à 0
répété le jeu d'instructions jusqu'à ce que CX=0 ou
LOOPE/LOOPZ ZF=0
répété ici jusqu'à ce que CX=0 ou ZF=1
LOOPNE/LOOPNZ
Instructions de contrôle d'itération
Exemple
MOV AX , 3000H
MOV DS , AX
MOV BX , 0000H
MOV CX , 100H
NEXT: MOV AL , [BX + 4000H]
MOV [BX + 6000H] , AL
INC BX
LOOP NEXT
HLT
Instructions de contrôle de la machine
instruction HLT :
L'instruction HLT amènera le microprocesseur 8086 à extraire et à
exécuter des instructions. Le 8086 entrera dans un état d'arrêt. Le
processeur sort de ce signal d'arrêt lors d'un signal d'interruption dans la
broche INTR/NMI ou d'un signal de réinitialisation sur l'entrée RESET.
instruction WAIT:

Lorsque cette instruction est exécutée, le 8086 entre dans un état de


repos. Cet état inactif se poursuit jusqu'à ce qu'un signal haut soit reçu sur
la broche d'entrée TEST ou qu'un signal d'interruption valide soit reçu.
Wait n'affecte aucun Flag. Il est généralement utilisé pour synchroniser le
8086 avec un ou plusieurs périphériques.
Instructions de contrôle de la machine
Instruction ESC
Cette instruction est utilisée pour transmettre des instructions à un coprocesseur
comme 8087. Il existe une instruction 6 bits pour le coprocesseur intégrée dans
l'instruction ESC. Dans la plupart des cas, le 8086 traite ESC et un NOP, mais dans
certains cas, le 8086 accédera aux éléments de données en mémoire pour le
coprocesseur
Instruction LOCK
Dans les environnements multiprocesseurs, les différents microprocesseurs
partagent le système de bus, nécessaire pour accéder aux périphériques externes
tels que les disques. L'instruction LOCK est donnée comme préfixe dans le cas où
un processeur a besoin d'un accès exclusif au bus système pour une instruction
particulière. Cela n'affecte aucun Flag.
Instructions de contrôle de la machine

Instruction NOP
A la fin de l'instruction NOP, aucune opération n'est effectuée
autre que l'extraction et le décodage de l'instruction. Cela
prend 3 cycles d'horloge. NOP est utilisé pour remplir les
délais ou pour fournir de l'espace pour les instructions lors
du dépannage. NOP n'affecte aucun drapeau.
Instructions de manipulation des Flags

1. Instruction STC : cette instruction met le Flag de retenue à 1. Cela


n'affecte aucun autre Flag.

2. Instruction CLC : Cette instruction remet le Flag de retenue à zéro. CLC


n'affecte aucun autre Flag.

3. Instruction CMC : Cette instruction complement le Flagde retenue. CMC


n'affecte aucun autre Flag.

4. Instruction STD : Cette instruction est utilisée pour mettre le drapeau de


direction à 1 afin que SI et/ou DI puissent être décrémentés
automatiquement après l'exécution de l'instruction de chaîne. STD n'affecte
aucun autre Flag.
Instructions de manipulation des Flags
5.Instruction CLD : Cette instruction est utilisée pour remettre à zéro
le Flag de direction afin que SI et/ou DI puissent être incrémentés
automatiquement après l'exécution de l'instruction de chaîne de
caractères. CLD n'affecte aucun autre Flag.

6. Instruction STI : Cette instruction met le Flag d'interruption à 1.


Cela active l'interruption INTR du 8086. STI n'affecte aucun autre Flag.

7. Instruction CLI : Cette instruction remet le drapeau d'interruption à 0.


De ce fait, le 8086 ne répondra pas à un signal d'interruption sur son
entrée INTR. CLI n'affecte aucun autre Flag.
Instructions de chaîne de caractères
MOVS/MOVSB/MOVSW
Ces instructions copient un mot ou un byte d'un emplacement du
segment de données vers un emplacement du segment
supplémentaire. L‘offset de la source est en SI et celui de la
destination est en DI. Pour les transferts de plusieurs mots/bytes, le
compteur est stocké dans le registre CX.
Lorsque le Flag de direction est 0, SI et DI sont incrémentés et lorsqu'il
est 1, SI et DI sont décrémentés.
MOVS n'affecte aucun Flag. MOVSB est utilisé pour les mouvements
de la taille d'un byte tandis que MOVSW est pour la taille d'un mot.
Example:
CLD ; clear the direction flag to auto increment SI and DI
MOV AX, 0000H ;
MOV DS, AX ; initialize data segment register to 0
MOV ES, AX ; initialize extra segment register to 0
MOV SI, 2000H ; Load the offset of the string1 in SI
MOV DI, 2400H ; Load the offset of the string2 in DI
MOV CX, 04H ;
load length of the string in CX
REP MOVSB ; decrement CX and MOVSB until CX will be
Instructions de chaîne de caractères
REP est utilisé avec l'instruction de chaîne ; il répète une instruction
jusqu'à ce que la condition spécifiée devienne fausse.
LODS/LODSB/LODSW
Cette instruction copie un octet d'un emplacement de chaîne de
caractère pointé par SI vers AL ou un mot d'un emplacement de
chaîne caractère pointé par SI vers AX. LODS n'affecte aucun Flag.
LODSB copie l'octet et LODSW copie le mot.
CMPS/CMPSB/CMPSW
CMPS est utilisé pour comparer les chaînes, par octet ou par mot. La
comparaison est affectée par la soustraction du contenu pointé par DI
de celui pointé par SI. Les drapeaux AF, CF, OF, PF, SF et ZF sont
affectés par cette instruction, mais aucun opérande n'est affecté.

Vous aimerez peut-être aussi