Vous êtes sur la page 1sur 46

Jeu d'instructions

dU 8086
Aventage segmentation de mémoire
• La séparation des segments de données et de code
permet d'exécuter un même programme sur divers
ensembles de données en rechargeant le registre
DS pour pointer vers les nouvelles données, offrant
ainsi une grande flexibilité.
• Les programmes qui utilisent uniquement des
décallages peuvent être chargés et exécutés
n'importe où en mémoire, car les décallages restent
toujours comprises entre 0000 et FFFFH,
indépendamment de la base du segment de code.
Aventage segmentation de mémoire
Avantage des programmes relocalisables : Dans un
environnement multitâche, le processeur 8086 peut
effectuer diverses tâches simultanément. Les
programmes inactifs peuvent être temporairement
sauvegardés sur disque et remplacés par de
nouveaux programmes, indépendamment de leur
emplacement physique. Pour qu'un programme soit
relocalisable, il ne doit faire référence à aucune
adresse physique et ne peut modifier les registres de
segment
MODES D'ADRESSAGE
les instructions informatiques se composent
d'un Op-code et d'opérandes, qui indiquent ce
que l'instruction doit faire et où elle doit le faire.
Les opérandes peuvent cibler des registres du,
des emplacements mémoire ou des ports
d'E/S. Les différentes manières dont le
microprocesseur détermine ces adresses
d'opérandes sont appelées les modes
d'adressage.
Mode d'adressage immédiat
Le mode d'adressage immédiat est utilisé pour charger un registre
ou un emplacement mémoire avec des données initiales, que les
instructions suivantes vont ensuite manipuler. La seule restriction
est que les registres de segment ne peuvent pas être spécifiés.
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 par registre
Certaines instructions se contentent d'opérer sur des
données ou de les déplacer de manière bidirectionnelle
entre les registres du CPU. MOV DX, CX place une copie
du registre CX dans le registre DX. l'opérande ne nécessite
aucune référence mémoire.
MOV AX, 8010H
MOV DS, AX DS 80 10
Mode d'adressage direct
Dans le mode d'adressage direct, l'adresse mémoire est fournie
directement en tant que partie de l'instruction.
MOV AH, MEMBDS Stocker le contenu de l'emplacement mémoire
MEMBDS dans le registre AH.
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].
Indirect Memory Access Addressing Modes
Le mode d'adressage direct est utile pour les
accès mémoire peu fréquents. Cependant,
lorsqu'une location mémoire doit être lue ou
écrite plusieurs fois au sein d'un programme, la
récupération répétée de l'adresse logique sur
deux octets rend ce mode inefficace. Les modes
d'adressage indirect résolvent ce problème en
stockant l'adresse mémoire dans un registre
pointeur ou d'index (BX, BP, SI, ou DI).
Indirect Memory Access Addressing Modes

Ces registres sont écrits entre crochets. Il


existe 4 formes de ce mode d'adressage sur le
8086, qui sont illustrées par les instructions
suivantes :
MOV DX, [BX] segment mémoire DS MOV DX, [BP] segment mémoire SS

MOV DX, [SI] segment mémoire DS MOV DX, [DI] segment mémoire DS
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, AX=EE78H c 14520H 78H

MOV [BX], AX c 14521H EEH

C'est un cas d'adressage indirect de registre. BX est un pointeur vers


l'adresse 3400H.
PhysiqueAdresse= 1112Hx10H + 3400H= 14520H
Le contenu d'AX est déplacé vers cette adresse.
INSTRUCTIONS DE TRANSFERT DE DONNÉES
MOV
Cette instruction transfère des données d'un
registre ou d'un emplacement mémoire vers un
autre registre ou un autre emplacement mémoire.
La source peut être l'un des registres de segment
ou d'autres registres généraux ou spéciaux, ou un
emplacement mémoire, vers un autre registre ou
un autre emplacement mémoire
l’instruction MOV
l’instruction mov prend plusieur formes :
registre ver un regisre MOV AX, BX
Opérend immédiate vers un registre MOV AX, 00C1H
Opérend immédiate vers une location mémoire MOV [BX], 00F1
Location mémoire vers un registre MOV AX, [BX]
Registre vers une location mémoire MOV [AX], BX
Registre/Location mémoire vers un registre de segment MOV DS, BX
Registre de segmentvers un registre/Location mémoire MOV CX, DS
On a pas une opération de déplacement d’une location mémoire vers une
location mémoire pas de déplacement vers immédiat vers un registre de
segment
L’instruction PUSH
c’est une instruction de transfert de données 16 bits qui sont transférés sur la pile.
PUSH registre
PUSH location mémoire
PUSH registre de segment
PUSH registre d’état
Le transfert de données s'effectue de la manière suivante. Chaque
fois qu'une donnée est poussée (pushed) sur la pile, le premier
octet de données est déplacé vers l'emplacement mémoire du
segment de pile adressé par SS:SP-1, et le deuxième octet de
données vers l'emplacement mémoire adressé par SS:SP-2. Après
le stockage des données, le registre SP est décrémenté de 2.
l’instruction PUSH
[SS]=0200H
[SP]=0722H
Lorsque vous effectuez l'instruction (SS) 0200H
PUSH AX,
AH est transféré à l'adresse mémoireSS:SP-1
AL est transféré à l'adresse mémoire SS:SP-2.
Ainsi, 34H est transféré à l'adresse mémoire
2721H et 12H à l'adresse mémoire 2720H. Après
cette opération, SP est décrémenté de 2 et stocke
donc la valeur 0720H.
l’instruction POP
Cette instruction effectue l'opération
opposée de l'instruction PUSH. Les
données sont transférées depuis la pile
vers le registre cible spécifié (registre
de segment, emplacement mémoire ou
registre de drapeau).
l’instruction POP
Lorsque l'instruction POP
s'exécute, elle transfère
l'emplacement mémoire
SS:SP vers le byte inférieur
et l'emplacement mémoire
SS:SP+1 vers le byte
supérieur de la cible.
exemple POP BX
POP BX
Considérez que le pointeur mémoire initial de la pile est
défini avec SS=0100H et SP=071BH, c'est-à-dire
0171BH. Maintenant, lorsque l'instruction POP BX est
exécutée, BL est chargé avec les données de
l'emplacement mémoire SS:SP et BH est chargé avec le
contenu de l'emplacement mémoire SS:SP+1 (0171CH).
Après cette opération, SP est incrémenté de 2 et, par
conséquent, stocke la valeur 071DH.
l’instruction XCHG
Cette instruction échange le contenu des opérandes
source et destination spécifiées,
L'échange du contenu de deux emplacements
mémoire n'est pas autorisé.
Les registres de segment ne peuvent pas être utilisés
avec l'instruction XCHG.
l’instruction XCHG

XCHG REG, MEM


XCHG REG, REG
XCHG AX, REG16
exemple
XCHG AL, CL échange du contenu du AL avec CL
XCG BP, SI échange du données de BP avec SI
l’instruction IN
Cette instruction transfère des données d'un port vers
l'accumulateur.
En cas de transfert de 8 bits, les données sont placées
dans AL.
En cas de transfert de données de 16 bits, les données
sont placées dans le registre AX
DX est le seul registre (implicite ) a utorisé à
transporter l'adresse du port.
MOV DX, port address
IN AX, DX 16bits data transfer
L’instruction OUT
Cette instruction est utilisée pour écrire sur un port de sortie,
elle transfère des données de l'accumulateur vers un port
d'E/S identifié par le deuxième octet de l'instruction.
L'adresse du port de sortie peut être spécifiée directement
dans l'instruction ou implicitement dans DX.
Les registres ALet AX sont les opérandes source autorisés
pour les opérations de 8 bits et de 16 bits respectivement.
MOV DX, adresse du port
OUT DX, AX
l’instruction LEA
L'instruction de chargement de l'adresse effective
charge le décalage (offset) d'un opérande dans le
registre spécifié. Elle peut également déterminer
l'adresse de décalage d'une variable située à un
emplacement mémoire spécifié dans l'instruction,
afin de la charger dans le registre spécifié. Le
format pour l'instruction LEA est le suivant :
LEA reg16, mem
LEA CX, [BX + SI 0532H]
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 mais
CMP dest, src AF CF OF PF SF ZF
n'enregistre pas le résultat. Seuls les drapeaux sont concernés
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
REG, immediate nombres binaires signés ou non signés
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
L’opérande source est soustrait de
memory, REG
REG, REG l’opérande de destination; le résultat
memory, remplace l’opérande de destination.
immediate les opérandes peuvent être des octets
REG, immediate
ou des mots. les deux opérandes
Example:
MOV AL, 05H peuvent être des nombres binaires
SUB AL, 02H signés ou non.
AX 00 03H
Operandes SBB Soustraire
REG, memory
soustrait la source de la destination,
memory, REG
REG, REG puis soustait 1 si CF est à 1; le résultat
memory, immediate est ensuite envoyé dans l’opérande de
REG, immediate destination. les deux opérandes
Example: peuvent être des octets ou des mots. il
MOV AX, 5678H
peuvent être des nombres binaires
SUB AX, 4321H
MOV BX, 1234H signés ou non
Opérande DEST = opérande DEST - opérande SRC- CF
SBB BX, FEDBH
l'exemple montre la soustraction de FEDB4321H à partir de 12345678H.
INC Incrément
Operandes
Ajoute1 à l’opérande de destination.
REG
memory L’opérande peut être un octet ou un
mot. l'instruction INC n'affecte pas le
Exemple : flag de retenue. L'instruction INC est
INC BL une instruction à un octet.
INC BX
DEC Décroissance
Operands
REG Soustrait un de l’opérande de
memory destination. Celui-ci peut être un octet

Exemple :
ou un mot. L'instruction DEC est une
DEC BX 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 (2’s Complement of 15H)
CBW Convertir octet en mot
converte la valeur signée dans le registre AL
pas d'opérandes
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
Exemple
DX:AX en dupliquant le bit de signe vers la
MOV DX, 0
MOV AX, 0 gauche.
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 d'instructions Fonction réalisée Flags concernés

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


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

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


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

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


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

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


NOT dest Aucune
à1
Effectue un ET logique des deux opérandes mettant à jour le CF DE PF SF ZF
TEST dest, src
registre des drapeaux sans enregistrer le résultat (AF non défini)
AND LOGIQUE
Operandes:
Cette instruction effectue un AND
REG, memory
memory, REG logique au niveau du bit de l'opérande de
REG, REG destination et de l'opérande source. Le
memory, immediate résultat de l'opération est stocké dans
REG, immediate
l'opérande de destination.
Exemple
MOV AL, 61H; AL = 01100001
AND AL, CFH; AL = 01000001
CMP Comparer
Operandes Le microprocesseur exécute cette instruction
REG, memory CMP en soustrayant l'opérande source de
memory, REG l'opérande destination mais aucun des
opérandes n'est modifié. Le résultat est reflété
REG, REG
par les bits de Flags.
memory, immediate
REG, immediate
Exemple:
CMP AX, BX.
NOT logique
Operandes
REG C e t t e i n s t r u c t i o n g é n è r e l e
memory complément à 1 ou l'opération NOT
Exemple de l'opérande et enregistre le résultat
MOV AL, 39H dans le même opérande. Après cette
NOT AL; AL = C6H instruction, le registre des Flags reste

inchangé.
Operandes OR logique
REG, memory Cette instruction effectue une opération
memory, REG OR 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.
TEST
Operandes
REG, memory Cette instruction effectue un AND
memory, REG logique entre tous les bits des
REG, REG opérandes source et destination.
memory, immediate Cette instruction effectue l'opération
REG, immediate logique ET mais aucun des
Exemple
MOV AL, 25H
opérandes n'est modifié, seuls les
TEST AL, 05H; ZF = 0 Flags ZF, SF, PF sont modifiés. Les
TEST AL, 20H; ZF = 0 Flags CF et OF sont effacés.
Operandes
REG, memory XOR Logique
memory, REG
REG, REG Cette instruction effectue une
memory, immediate
REG, immediat opération OU exclusif au
Exemple
AL =8CH, CH = 67H, niveau du bit entre les
XOR AL, CH opérandes source et destination.
Après éxecution
AL = EBH, CF = 0, OF =
Après l'opération, le résultat est
0, ZF = 0. stocké dans la destination.

Vous aimerez peut-être aussi