Jeu d'instructions
-Instructions de transfert
- Instructions de calcul ( Inst Arithmétiques)
- Instructions de décalages
- Instructions de saut/appel
Instruction de transfert: MOV
MOV d e s t , s o u r c e
– dest reçoit source
E x e m ples :
MOV AL,0 # AL ← 0
MOV n,AL # n ← (AL)
Instruction de transfert: MOV
Mouvemnts autorisés:
MOV Registre général, Registre quelconque
MOV Mémoire, Registre quelconque
MOV Registre général, Mémoire
MOV Registre général, Constante
MOV Mémoire, Constante
MOV Registre de segment, Registre général
Instruction de transfert: MOV
Remarque: Source et Destination doivent avoir
la même taille.
Exemples:
MOV AX, 5 ; Transférer 5 vers AX
MOV ES, D X ; Transférer le contenu de D X vers ES
MOV AL, BL ; Transférer le contenu de BL vers AL
MOV AX, SI ; Transférer le contenu de SI vers AX
MOV Bêta, CL ; Transférer le contenu de CL vers la case
mémoire Bêta
Instruction de transfert XCHG (« E x c h a n g e »)
Syntaxe: XCHG Destination, Source
Description: Échange les contenus de Source et de
Destination.
Mouvements autorisés:
XCHG Registre général, Registre général XCHG
Registre général, Mémoire
XCHG Mémoire, Registre général
Exemple:
XCHG AL, AH
XCHG Alpha, BX
XCHG DX, Beta
In s t r u c t i on s Arithmétiques
Le 8086 permet d'effectuer les Quatre opérations
arithmétiques de base, l'addition, la soustraction, la
multiplication et la division. Les opérations peuvent
s'effectuer sur des nombres de 8 bits ou de 16 bits
signés ou non signés. Les nombres signés sont
représentés en complément à 2.
In s t r u ct i on ADD
Syntaxe:
ADD Destination, Source
Destination ← Destination+Source.
La destination peut être: registre, mémoire.
La source peut être: registre, mémoire, valeur immédiate.
Les FLAGS affectés:
Exemple:
Instruction ADC
Addition entre deux opérandes avec carry.
Syntaxe:
ADC Destination, Source ; Destination Destination+Source+CF.
La Destination peut être: registre, mémoire.
La Source peut être: registre, mémoire, valeur immédiate.
Les FLAGS affectés :
Instruction INC
Incrémentation d’un opérande.
Syntaxe:
INC Destination ; Destination ← Destination+1.
La Destination peut être: registre, mémoire.
Les FLAGS affectés:
CF reste inchangé.
Instruction SUB
Soustraction entre deux opérandes.
Syntaxe:
SUB D estinati on, Sou rce
Destination ← Destination – Source.
La Destination peut être: registre, mémoire.
La Source peut être: registre, mémoire,valeur
immédiate.
Exemples:
SUB AL,7 permet de soustraire 7 de la valeur du registre AL
SUB CL,44h permet d'effectuer l'opération «CL = CL - 44h»
SUB AL,BL permet d'effectuer l'opération «AL = AL - BL»
Soustraction entre deux opérandes avec
carry.
Syntaxe:
SBB D estination, Sou rce
Destination ← Destination – Source – CF.
La Destination peut être: registre, mémoire.
La Source peut être: registre, mémoire,
valeur immédiate.
Les FLAG affectés :
Instruction DEC
Décrémentation d’un opérande
Syntaxe:
DEC Destination ; Destination ←Destination – 1
La Destination peut être : registre, mémoire.
Les FLAGS affectés:
CF reste inchangé.
Instruction NEG
La négation d’une valeur (changement de signe
en complément à deux).
Syntaxe:
NEG D esti nation ;
Destination ← Destination * (-1).
La destination peut être : registre, mémoire.
Les FLAG affectés:
Algorithme de la négation en complément à
deux : 1- inversé tous les bits de l’opérande.
2- Additionné « 1 » au résultat précèdent.
Exemple :
MOV AL, 05h
NEG AL; AL ← AL*(-1)
CMP Op1, Op2 Résultat ← Op1 – Op2.
Op1 peut être : registre, mémoire.
Op2 peut être : registre, mémoire, valeur immédiate.
Exemple:
MOV AL, 40h
MOV AH, 30h
CMP AL, AH
Plus la mise à jour des FLAG : CF ← 0 ; OF ← 0 ; AF ← 0 ; SF ←0 ; ZF← 0;
PF ←0.
On peut dire que AL ≠ AH.
On peut dire que AL plus grand que AH.
AL = FBh la représentation de (-5) en complément à 2.
D’une façon générale le calcul de complément à (n) d’une valeur est
calculé par l’algorithme suivant :
Le complément à (n) ←inversion bit à bit (valeur) + n/2. (Avec (n) est
un entier pair).
Exemple de complément à 10 : COM10 ← NOT (Value) + 05h.
Instruction MUL
Multiplication entre l’accumulateur et un opérande
(non signé).
Syntaxe:
MUL Opérande.
Si l’opérande est une valeur sur 8 bits :
AX ← AL*Opérande.
Si l’opérande est une valeur sur 16 bits :
DX : AX ← AX*Opérande.
L’opérande peut être: registre, mémoire.
Les FLAGS affectés:
Le ZF, SF, PF et AF sont inconnus (X).
Exemple :
MOV AL, 20h
MOV CL, 02h
MUL CL; AX ← AL*CL.
AX=20h*02h=40h.
Instruction DIV
Division entre l’accumulateur et un opérande (non
signé). Syntaxe:
DIV Opérande.
Si l’opérande sur 8 bits : AL ← AX / Opérande ; AH ← Reste.
Si l’opérande sur 16 bits : AX ← (DX : AX) / Opérande ;
DX ← Reste.
L’opérande peut être : registre, mémoire.
Le CF, OF, ZF, SF, PF, et AF sont inconnus (X).
Exemple:
MOV DX, 0000h ; AX ←(DX: AX) / CX
MOV AX, 2000h ; AX ← (00002000h)/2=1000h.
MOV CX, 0002h ; DX ← 0000h.
DIV CX
Instruction CBW
Conversion de l’accumulateur de 8 bits à un mot de 16 bits
signé.
Syntaxe:
CBW ; s a n s o p é r a n d e .
La source est l’accumulateur de 8 bits (AL).
La destination est l’accumulateur de 16 bits (AX).
Les FLAGs restent inchangés.
Exemple:
MOV AL, 50h ;( SF=0).
CBW
AX ← 0050h
MOV AL, 80h; (SF=1).
CBW AX ← FF80h
Instruction CWD
Conversion de l’accumulateur de 16 bits à un mot de 32 bits
signé.
Syntaxe:
CWD ; s a n s o p é r a n d e .
La source est l’accumulateur de 16 bits.
La destination est formée par la concaténation entre les registres
DX et AX.
Les FLAGS restent inchangés.
Exemple:
MOV AX, 4002h (SF=0)
CWD DX: AXÍ00004002h.
MOV AX, 80FFh (SF=1)
CWD DX: AXÍFFFF80FFh.
a = b + c;
– MOV AL, b # AL ← (b)
– ADD AL, c # AL ← (AL) + (c)
– MOV a, AL # a ← (AL)
Exemples
d = a – e;
– MOV AL, a # AL ← (a)
– SUB AL , e # AL ← (AL) - (e)
– MOV d, AL # d ← (AL)
Exemples
f = ( g + h) – (i + j);