You are on page 1of 8

Architecture du µp 8086 : AX : Registre accumulateur 16 bits (composé de deux registres 8 bits, AH et AL).

BX : Registre d'adresses de base 16 bits (composé de deux registres 8 bits, BH et BL).


1) Les bus : CX : Registre compteur 16 bits (composé de deux registres 8 bits, CH et CL).
Un bus est un ensemble de fils qui assure la transmission du même type d’information. On retrouve DX : Registre de données 16 bits (composé de deux registres 8 bits, DH et DL).
trois types de bus véhiculant des informations en parallèle dans un système de traitement programmé de SP : Registre pointeur de pile 16 bits.
l’information : BP : Registre pointeur de base 16 bits.
SI : Registre d'index source 16 bits.
Bus de données : DI : Registre d'index destination 16 bits.
c’est un bus bidirectionnel qui assure la transmission et la réception des données en parallèle. (Pour le 4) Registres de segments :
8086 est de taille 16 bits). CS Segment de code contenant le programme en cours.
Bus d’adresse : DS Segment de données contenant l'adresse du segment de données dans lequel le programme
c’est un bus unidirectionnel qui permet la sélection des informations à traiter dans un espace mémoire déposera ses éléments de travail (variables, champs, tableaux de branchement, etc.).
(ou espace adressable) qui peut avoir 2n emplacements, avec n = nombre de conducteurs du bus ES Extra segment appartient au programmeur pour définir son utilisation.
d'adresses. (Dans le cas du 8086 est de taille 20 bits). SS Segment de pile contenant l'adresse de la pile.
Bus de contrôle : Plus deux registres spécieux :
constitué par quelques conducteurs qui assurent la synchronisation des flux d'informations sur les bus Le registre IP : pointeur d’instruction.
des données et des adresses. Le registre FLAG : indique l’état en courant de µp.
Schéma synoptique du µp 8086 : 5) le registre FLAG :
La plupart des instructions arithmétiques et logiques affectent le registre d'état du processeur (ou registre
de FLAG).

Comme vous pouvez le remarquer, c'est un registre 16 bits, chaque bit s'appelle un flag (ou un
indicateur) et peut prendre la valeur 1 ou 0.
CARRY flag : ce flag positionne à « 1 » lorsque il y a un débordement.
3) Registres de travails :
Le CPU 8086 comporte 8 registres à usage général, chaque registre est identifié par son nom :
1 2
PARITY flag : la parité est celle du nombre de bits égaux à « 1 » s’il est pair PF est mis à « 1 ».

OVERFLOW flag : ce flag est à « 1 » lorsqu'un débordement signé.

AUXILLIARY flag : ce flag est à « 1 »lorsqu'un débordement a lieu de demi-mot de 8bits ou 16bits. TRACE flag : ce bit est à « 1 » signifie que l’exécution est en mode pas à pas (STEP BY STEP).

INTERUPT flag : si ce bits à « 1 » le µp prend en conte les interruptions vienne de la pin INTR
(INTERRUPT REQUESTE) « les interruption hardware ».

DIRECTION flag : ce flag est utilisé par quelques instructions pour traiter les
chaînes de données, Lorsque ce drapeau est placé à 0, la chaîne est traitée octet par octet en
incrémentant, lorsque ce drapeau est placé à 1, la chaîne est traitée octet par octet en décrémentant.

V) Les modes d’adressages :


Introduction :
ZERO flag : ce flag est à « 1 » lorsque tous les bits d’un mot sont à « 0 ». Avant de commencer, il faut résoudre le problème de la taille de bus d’adresse de 20 bits et la taille
des registres internes du µp (16 bit), la question qui il faut poser est « Quelle est la solution proposer par
INTEL pour fabriquer une adresse de 20 bits à partir des registres de 16 bits ? ».
La solution est la suivante :
Chaque registre de segment sera multiplié par 16 plus un offset sur 16 bits comme l’indique le
schéma au-dessous :

SIGN flag : ce flag est à 1 lorsque le résultat est négatif. Lorsque le résultat est positif, le flag est à 0. Ce
flag prend la valeur du bit le plus fort (MSB).
3 4
Exemple :
MOV [BX+12], AL ; transfert de contenu de AL vers la case mémoire pointer par (BX+12) par rapport
au DATA segment.
MOV SI, [BP+400] ; transfert de contenu de la case mémoire 16 bits pointer par (BP+400) par rapport
au STACK segment vers SI.
6) Adressage indexé : le même mode que le basé, mais il utilise les registres d’indexes comme pointeur
; les registres d’indexes sont (SI, DI).
Syntaxe :
MOV [SI/DI + déplacement 8 bits ou 16 bits], source.
MOV destination, [SI/DI + déplacement 8 bits ou 16 bits].
Remarque : les cases mémoires consultées ou modifiées sont par rapport au DATA segment
7) Adressage basé indexé : c’est un mode combine entre de modes d’adressage comme l’indique son
1) Adressage registre : ce mode utilise les registres internes de µp, dans ce mode il faut respecté la nom.
taille de différents registres.
Exemple :
Dans le plus part du cours, on va utiliser l’instruction MOV (instruction de transfert) :
Syntaxe :
MOV Destination, Source ; Destination ← Source.
MOV BX, AX; Transfert du contenu de AX vers BX.
MOV BX, AL; Déclaration d’erreur par ce que BX est registre 16 bits et AL est registre 8 bits. 8) Adressage des entrées sorties (I/O) : dans ce mode, le bus d’adresse devient de taille 16 bits
MOV BL, BH; Transfert du contenu de BH vers BL. →l’espace adressable par I/O est 64 KO. Il utilise comme instructions d’accès (IN, OUT).
2) Adressage immédiat : est un mode de manipulation des valeurs latéraux avec un 9) Adressage relatif : ce type d’adressage est utilisé par les instructions de saut.
registre interne ou une case mémoire. 10) Adressage vectorisé : ce mode d’adressage est utilisé seulement pour le traitement des
Exemple : d’interruption.
MOV Alpha, 40h; Alpha est une case mémoire de 8 bits.
MOV AL, 102h; déclaration d’une erreur, AL registre de 8 bits, mais 102h est une valeur immédiate sur Jeu d’instructions :
16 bits. Chaque microprocesseur reconnaît un ensemble d’instructions appelé jeu d’instructions (Instruction Set)
MOV AX, 40h; cette instruction est juste Par ce que, on peut écrire 40h → 0040h valeur sur 16 bits. fixé par le constructeur. Pour les microprocesseurs classiques (microprocesseurs CISC : COMPLEX
3) Adressage direct : comme l’indique son nom, c’est la réalisation des opérations entre les registres INSTRUCTION SET COMPUTER), le nombre d’instructions reconnues varie entre 75 et 150. Il
internes de µp et la mémoire. existe
Exemple : aussi des microprocesseurs dont le nombre d’instructions est très réduit (microprocesseurs RISC :
MOV AL, Bêta; transférer le contenu de la case mémoire Bêta vers AL. REDUCED INSTRUCTION SET COMPUTER) : entre 10 et 30 instructions, permettant d’améliorer
MOV [2000h], BL ; transférer l contenu de BL vers la case mémoire de l’adresse 2000h par rapport au le temps d’exécution des programmes.
DATA segment. Une instruction est définie par son code opératoire, valeur numérique binaire difficile à manipuler par
4) Adressage indirect par registre : c’est le mode d’accès entre la mémoire et les registres internes de l’être humain.
µp par un intermédiaire, ces sont les registres pointeurs : (SI, DI,BX). On utilise donc une notation symbolique pour représenter les instructions: les mnémoniques.
Exemple : Un programme constitué de mnémoniques est appelé programme en assembleur.
MOV AX, [BX]; transfert de contenu de la case mémoire 16 bits pointer par BX par rapport au DATA Les instructions peuvent être classées en 7 groupes :
segment vers AX. 1. Instructions de transferts
MOV [SI], DL; transfert de contenu de DL vers la case mémoire 8 bits pointer par SI par rapport au 2. Instructions arithmétiques
DATA segment. 3. Instructions logiques
5) Adressage basé : tous simplement, il utilise la registres de base comme pointeur entre la mémoire et 4. Instructions de traitement de chaîne
les registres internes de µp ; les registres de base sont (BX, BP). 5. Instructions de saut et d’appel de sous-programmes
Syntaxe : 6. Instructions des interruptions logicielles
MOV [BX/BP + déplacement 8 bits ou 16 bits], source. 7. Instructions de contrôle du µp
MOV destination, [BX/BP + déplacement 8 bits ou 16 bits].
5 6
A) Instructions de Transferts :
Ces sont les instructions suivantes :
MOV PUSH PUSHF POP POPF XCHG XLAT LEA LDS LES LAHF SAHF IN OUT

1) Instruction MOV:
Copié l’opérande2 vers l’opérande1.

Syntaxe :
MOV Destination, Source ou MOV Op1, Op2
La source peut être : Registre, mémoire, valeur immédiate (latérale)
La destination peut être : Registre, mémoire. Après chaque exécution de l’instruction PUSH la valeur de SP décrémente automatiquement par deux
Exemple : (2) SP ←SP-2.
MOV AL, BL ; Transférez le contenu de BL vers AL 3) Instruction PUSHF :
MOV AX, SI ; Transférez le contenu de SI vers AX Empilement de registre FLAG vers le sommet de la PILE.
MOV Bêta, CL ; Transférez le contenu de CL vers la case mémoire Bêta Syntaxe :
PUSHF ; sans opérande.
La source est le registre FLAG
La destination est une case mémoire de 16 bits pointer par SS : [SP].

Des conseilles :
4) Instruction POP :
1- Interdit d’utiliser le registre (CS) comme destination.
2- Interdit de lire ou écrire dans le registre (IP). Dépile une valeur de 16 bits depuis le sommet de la Pile (STACK SEGMENT)
3- Interdit de copier la valeur d’un registre de segment vers un autre registre de segment, il faut passer Syntaxe :
par une case mémoire ou par un registre interne de 16 bits. POP Destination ; la destination peut être un registre ou une case mémoire de 16 bits
4- Interdit de copier une valeur immédiate vers un registre de segment, il faut La source est une case
passer par un registre interne ou une case mémoire de 16 bits. mémoire de 16 bits pointer
5- Interdit de transférer le contenu d’une case mémoire vers une autre, if faut passer par un registre par SS : [SP].
interne de même taille. Exemple :
2) Instruction PUSH : POP AX
Empile une valeur de 16 bits dans le sommet de Pile (STACK SEGMENT). POP SI
Syntaxe : Après chaque exécution de
PUSH Source ; la source peut être un registre ou une case mémoire de 16 bits l’instruction POP la valeur de
La destination est une case mémoire de 16 bits pointer par SS : [SP]. SP incrémente
Exemple : automatiquement par deux
PUSH DX (2) SP← SP+2.
PUSH CX
7 8
5) Instruction POPF : Plus la mise à jour des FLAG : CF← 0 ; OF ←0 ; AF ←0 ; SF ←0 ; ZF←0 ; PF←1
Dépilement de registre FLAG depuis le sommet de la Pile (STACK SEGMENT).
Syntaxe : 2) Instruction ADC :
POPF ; sans opérande. Addition entre deux opérandes avec carry.
La source est une case mémoire de 16 bits pointer par SS : [SP]. 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 FLAG affectés :

Exemple :
STC; forcé le CF à « 1 ».
MOV DL, 08h
MOV DH, 00h
ADC DL, DH ; DL ←DL+DH+CF DL=8+0+1=9.

3) Instruction INC :
6) Instruction XCHG : Incrémentation d’un opérande.
Echange les valeurs de deux opérandes. Syntaxe :
Syntaxe : INC Destination ; Destination ← destination+1.
XCHG Op1, Op2 La destination peut être : registre, mémoire.
Exemple : Les FLAG affectés :
XCHG AL, AH
XCHG Alpha, BX
XCHG DX, Bêta CF reste inchangé.
Exemple :
MOV Alpha, 0Fh
INC Alpha ; Alpha ←Alpha+1 Alpha=10h.

4) Instruction SUB :
B) Instructions Arithmétiques :
Soustraction entre deux opérandes.
Syntaxe :
1) Instruction ADD :
SUB Destination, Source ; Destination← destination – source.
Addition entre deux opérandes.
La destination peut être : registre, mémoire.
Syntaxe :
La source peut être : registre, mémoire, valeur immédiate.
ADD Destination, Source ; Destination← destination+source.
Les FLAG affectés :
La destination peut être : registre, mémoire.
La source peut être : registre, mémoire, valeur immédiate.
Les FLAG affectés :
6) Instruction DEC :
Décrémentation d’un opérande.
Exemple :
Syntaxe :
MOV AL, 03h
DEC Destination ; Destination ← destination – 1.
MOV BL, 02h
La destination peut être : registre, mémoire.
ADD AL, BL ; AL←AL+BL AL=3+2=5
Les FLAG affectés :
9 10

-
; AX← (00002000h)/2=1000h.
; DX ←0000h.
CF reste inchangé.
7) Instruction CMP :
La comparaison entre deux opérandes. C) Instructions Logiques :
Syntaxe : 1) Instruction OR :
CMP Op1, Op2 ; Résultat ← Op1 – Op2. OU logique entre deux opérandes bit à bit.
Résultat est un registre virtuel, mais le plus important, c’est la mise à jour des FLAG. Syntaxe :
OR Destination, Source ; Destination← destination (ou) source.
La destination peut être : registre, mémoire.
Op1 peut être : registre, mémoire.
La source peut être : registre, mémoire, immédiate.
Op2 peut être : registre, mémoire, valeur immédiate.
Exemple: Les FLAG affectés :
MOV AL, 40h Exemple :
MOV AH, 30h MOV AL, 01h
CMP AL, AH MOV gamma, 02h
OR AL, gamma; AL← AL (ou) gamma = 03h.
On peut dire que AL ≠ AH.
On peut dire que AL plus grand que AH. 2) Instruction XOR:
OU Exclusif entre deux opérandes bit à bit.
9) Instruction MUL : Syntaxe :
Multiplication entre l’accumulateur et un opérande (non signé). XOR Destination, Source ; Destinationdestination (ou exclusif) source.
Syntaxe : La destination peut être : registre, mémoire.
MUL Opérande. La source peut être : registre, mémoire, immédiate.
Si l’opérande est une valeur sur 8 bits : AX←AL*Opérande.
Les FLAG affectés :
Si l’opérande est une valeur sur 16 bits : DX : AX ←AX*Opérande.
Exemple :
L’opérande peut être : registre, mémoire.
MOV DL, 55h
Les FLAG affectés : XOR DL, 0FFh; DL ←DL (XOR) 0FFh = 0AAh.
Exemple :
MOV AL, 20h 3) Instruction AND :
MOV CL, 02h ET logique entre deux opérandes bit à bit.
MUL CL ; AX← AL*CL. Syntaxe :
AX=20h*02h=40h. AND Destination, Source ; Destination← destination (et) source.
10) Instruction DIV: La destination peut être : registre, mémoire.
Division entre l’accumulateur et un opérande (non signé). La source peut être : registre, mémoire, immédiate.
Syntaxe :
Les FLAG affectés :
DIV Opérande.
Exemple :
Si l’opérande sur 8 bits : AL←AX / Opérande ; AH← Reste.
MOV CL, 32h
Si l’opérande sur 16 bits : AX←(DX : AX) / Opérande ; DX← Reste.
AND CL, 0Fh; CL← CL (ET) 0Fh = 02h.
L’opérande peut être : registre, mémoire.
Astuces sur les instructions logiques (OR, XOR, AND) :
Exemple :
1. Forçage à 1 :c’est le OR avec un « 1 ».
MOV DX, 0000h
2. Masquage à 0 :c’est le AND avec un « 0 ».
MOV AX, 2000h
3. Basculement :c’est le XOR avec un « 1 ».
MOV CX, 0002h
DIV CX ; AX← (DX: AX) / CX
11 12
Exercice : Astuce :
Donnez à chaque fois la valeur immédiate qui réalise les opérations suivantes : Cette instruction réalise l’opération suivante :
1. forcez le bit (1) de registre AL. Destination← destination * 2N.
2. masquez les bits (3 5) de registre AL.
3. basculez les bits (2, 7) de registre AL. 8) Instruction SHR :
4) Instruction TEST : Décalage logique à droite.
ET logique entre deux opérandes positionne uniquement les FLAG. Syntaxe :
Syntaxe : La même syntaxe que SHL. Et les mêmes FLAG affectés.
TEST Op1, Op2; Résultat← Op1 (ET) Op2. Synoptique de décalage :
; Plus la mise à jour des FLAG.
Op1 peut être : registre, mémoire.
Op2 peut être : registre, mémoire, immédiate.

Les FLAG affectés :


Exemple :
MOV AL, 0F2h
MOV BL, 3Dh
TEST AL, BL

Instructions de Rotations
9) Instructions ROL et ROR :
Rotation à gauche et à droite.
5) Instruction NOT: Syntaxe :
Inversion bit à bit d’un opérande. La même syntaxe que SHL. Et les mêmes FLAG affectés.
Syntaxe :
NOT Destination; Destination ←
La destination peut être : registre, mémoire.
Exemple :
MOV AL, 45h
NOT AL; AL ← 0BAh.
Instructions de Décalages
6) Instructions SHL :
Décalage arithmétique et logique à gauche.
Syntaxe :
SHL Destination, N
Si N=1 alors la syntaxe devienne SHL Destination, 1.
Sinon le nombre de décalage a effectué sur la destination mettre dans CL :
MOV CL, N
SHL Destination, CL
La destination peut être : registre, mémoire.

Les FLAG affectés :

13 14
E) Instructions de saut et d’appelle sous programme : Une procédure est une suite d'instructions effectuant une action précise, qui sont regroupées par
commodité et pour éviter d'avoir à les écrire à plusieurs reprises dans le programme.

Les procédures sont repérées par l'adresse de leur première instruction, à laquelle on associe une
étiquette en assembleur.

L'exécution d'une procédure est déclenchée par un programme appelant. Une procédure peut elle-même
appeler une autre procédure, et ainsi de suite.

Instructions CALL et RET

L'appel d'une procédure est effectué par l'instruction CALL.

CALL adresse_debut_procedure

L'adresse est sur 16 bits, la procédure est donc dans le même segment d'instructions. CALL est une
nouvelle instruction de branchement inconditionnel. La fin d'une procédure est marquée par
l'instruction RET :

V-1-2 ) RET :

RET ne prend pas d'argument ; le processeur passe à l'instruction placée immédiatement après le CALL.

RET est aussi une instruction de branchement : le registre IP est modifié pour revenir à la valeur qu'il
avait avant l'appel par CALL. Comment le processeur retrouve-t-il cette valeur ? Le problème est
compliqué par le fait que l'on peut avoir un nombre quelconque d'appels imbriqués, comme sur la figure
suivante :

V-1 ) Branchement inconditionnel

V-1-1 ) CALL : notion de procédure :

La notion de procédure en assembleur correspond à celle de fonction en langage C, ou de sous-


programme dans d'autres langages.

L'adresse de retour, utilisée par RET, est en fait sauvegardée sur la pile par l'instruction CALL. Lorsque
le processeur exécute l'instruction RET, il dépile l'adresse sur la pile (comme POP), et la range dans IP.

L'instruction CALL effectue donc les opérations :

 Empiler la valeur de IP. A ce moment, IP pointe sur l'instruction qui suit le CALL.
La procédure est nommée calcul. Après l'instruction B, le processeur passe à l'instruction C de la  Placer dans IP l'adresse de la première instruction de la procédure (donnée en argument).
procédure, puis continue jusqu'à rencontrer RET et revient à l'instruction D.

15 16

You might also like