Académique Documents
Professionnel Documents
Culture Documents
1
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
Remarque :
ORG 100h est une directive de compilation, Elle indique au compilateur que le
fichier exécutable sera chargé à l'offset 100h.
Exemple 2:
#make_com#
ORG 100h ; cette partie est générée automatiquement dès l’ouverture
; du nouveau fichier
var1 db 7 ; déclaration des données
var2 dw 1234h
tab1 db 1,2,3,4,5
tab2 db 5 dup(2)
ret ; arrêter le programme
- Après la saisie du programme, cliquer sur ‘émuler’ puis ‘exécuter’.
- Essayer de vérifier le résultat dans la partie mémoire.
L’instruction MOV :
Avant de voir les différentes méthodes d’accès à la mémoire, on doit savoir
utiliser une instruction très puissante du langage assembleur qui est l’instruction
MOV.
MOV destination, source ; Copier la deuxième opérande (source) dans la
; première opérande (destination).
2
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
L'opérande source peut être une valeur immédiate, un registre d'usage général ou
un emplacement mémoire. Le registre de destination peut être un registre
d'usage général ou un emplacement mémoire et dans tous les cas, les deux
opérandes doivent avoir la même taille. Les combinaisons possibles sont les
suivantes :
MOV REG, mémoire
MOV mémoire, REG
MOV REG, REG
MOV mémoire, immédiate
MOV REG, immédiate
avec :
REG : AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
mémoire : [BX], [BX+SI+7], variable, etc.
immédiate : 5, -24, 3Fh, 10001101b, etc.
Dans le cas où l’une des opérandes est un registre de segment (DS, ES, CS, SS),
seules les combinaisons suivantes sont supportées :
MOV SREG, mémoire
MOV mémoire, SREG
MOV REG, SREG
MOV SREG, REG
avec :
SREG : DS, ES, SS, et uniquement en tant que deuxième opérande pour : CS.
REG : AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
mémoire : [BX], [BX+SI+7], variable, etc.
Remarque :
L'instruction MOV ne peut pas être utilisée pour copier la valeur du registre IP.
3
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
Exemple 4:
Pour charger la valeur 1Ah à l’adresse (0B800 : 015Eh) on écrit :
MOV AX, 0B800h ; choisir le segment
MOV DS, AX ; pointer le registre de segment de données DS
MOV BX, 015Eh ; choisir le déplacement dans le segment
MOV [BX], 1Ah ; charger la valeur 1Ah à l’adresse 0B800h : 015E h
4
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
5
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
- Zero Flag (ZF) (ou Indicateur de zéro) : Ce flag est à 1 lorsque le résultat est
zéro. Lorsque le résultat est autre que zéro, ce flag reste à 0.
- Sign Flag (SF) (ou Indicateur de signe) : Ce flag est à 1 lorsque le résultat est
négatif. Lorsque le résultat est positif, le flag restr à 0. Ce flag prend la valeur
du bit le plus significatif.
- Overflow Flag (OF) (ou Indicateur de débordement) : Ce flag est à 1 lorsqu'un
débordement signé a lieu. Par exemple, il y a débordement, lorsque dans l'octet,
vous ajoutez 100 + 50 (le résultat n'est pas compris entre -128 et 127).
- Parity Flag (PF) (ou Indicateur de parité) : Ce flag est à 1 lorsque le résultat
est un nombre pair de bits, ce flag est à 0 lorsque le résultat est un nombre
impair de bits. Même si le résultat est un Word (mot), uniquement les 8 bits de
poids faible sont analysés.
- Auxiliary Flag (AF) (ou Indicateur auxiliaire) : Ce flag est à 1 lorsqu'un
débordement non signé a lieu sur les 4 bits de poids faible.
- Interrupt enable Flag (IF) (ou Indicateur d'interruption) : Lorsque ce flag est
à 1, le processeur réagit aux interruptions des dispositifs externes.
- Direction Flag (DF) (ou Indicateur de direction) : Ce flag est utilisé par
quelques instructions pour traiter les chaînes de données, Lorsque cet indicateur
est placé à 0, la chaîne est traitée octet par octet en incrémentant, lorsque cet
indicateur est placé à 1, la chaîne est traitée octet par octet en décrémentant.
On peut deviser l’ensemble des instructions arithmétiques et logiques en trois
groupes :
Premier groupe : ADD, SUB,CMP, AND, TEST, OR, XOR
- ADD : Ajoute le deuxième opérande au premier.
- SUB : Soustrait le deuxième opérande du premier.
- CMP : Soustrait le deuxième opérande du premier pour les flags uniquement.
- AND : Compare par un AND (ET) logique tous les bits des deux opérandes
- TEST : Idem à AND mais pour les flags uniquement.
- OR : Effectue un OR (OU) logique entre tous les bits des deux opérandes.
- XOR : Effectue un XOR logique (OR (OU) exclusif) entre tous les bits des
deux opérandes
Ces types d'opérandes sont supportés :
REG, mémoire
mémoire, REG
REG, REG
mémoire, immédiat
REG, immédiat
Ces instructions affectent uniquement les flags suivants : CF, ZF, SF, OF, PF,
AF.
6
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
Exemple 7:
MOV AL,05h
MOV BL,02h
ADD AL, BL
SUB AL, 01h
-Emuler et dire que fait ce programme. Vérifier les flags.
Les instructions MUL et IMUL affectent uniquement les flags suivants : CF, OF
Lorsque le résultat est plus grand que la taille de l'opérande ces flags sont placés
à 1, lorsque la taille de l'opérande est ajustée ces flags sont placés à 0.
Pour DIV et IDIV les flags ne sont pas définis.
Exemple 8:
MOV AX, 0010 h
MOV BX,0002 h
MUL BX
MOV BX,0003 h
DIV BX
- Emuler et dire que fait ce programme. Vérifier les flags.
7
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
Les instructions INC, DEC affectent uniquement les flags suivants : ZF, SF,
OF, PF, AF.
L'instruction NOT n'affecte aucun flag.
L'instruction NEG affecte uniquement les flags suivants : CF, ZF, SF, OF, PF,
AF.
Exemple 9:
MOV AX, 0005h
INC AX
NEG AX
NOT AX
ADD AX,0001h
- Emuler et commenter ce programme.
Instructions de branchement :
Ces instructions permettent le contrôle du programme, faire des
branchements (sauts) conditionnels à des instructions comportant une étiquette.
Exemple 10:
JMP étiquette ; saut inconditionnel à étiquette.
8
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
Condition
Instruction
Instruction Description Flag(s)
inverse
testé(s)
9
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
Condition
Instruction
Instruction Description Flag(s)
inverse
testé(s)
ZF = 0
JG Saut si supérieur (>). JNG
et
JNLE Saut si ni inférieur ni égal (non <=). JLE
SF = OF
ZF = 1
JLE Saut si inférieur ou égal (<=). ou JNLE
JNG Saut si pas supérieur (non >). SF <> JG
OF
Condition
Instruction
Instruction Description Flag(s)
inverse
testé(s)
CF = 0
JA Saut si supérieur (>). JNA
et
JNBE Saut si ni inférieur ni égal (non <=). JBE
ZF = 0
10
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
CF = 1
JBE Saut si inférieur ou égal (<=). JNBE
ou
JNA Saut si pas inférieur (non >). JA
ZF = 1
Exemple 11:
MOV AX, 0001h
MOV BX, 0005h
etq: INC AX
CMP AX,BX
JNE etq
INT 20h
- Emuler et commenter ce programme.
La pile :
La pile est une zone de la mémoire pour conserver provisoirement des données.
PUSH - stocke une valeur 16 bits sur la pile.
POP - récupère une valeur 16 bits de la pile.
Syntaxe pour l'instruction PUSH :
PUSH REG
PUSH SREG
PUSH mémoire
PUSH immédiate
Syntaxe pour l'instruction POP :
POP REG
POP SREG
POP mémoire
Remarque :
- PUSH et POP travaillent uniquement avec des valeurs de 16 bits.
- La pile utilise l'algorithme LIFO (dernier entré, premier sorti),
11
UAMB M1 ELT/ER
Faculté de Technologie UEM 111
Dpt . de Génie électrique
Exemple 12:
MOV AX, 1234h
PUSH AX
MOV AX, 5678h
POP AX
RET
- Emuler et commenter ce programme.
Remarque :
Pour les autres instructions de l’assembleur du µp8086, se référer au cours ou à
la rubrique d’aide de l’Emu8086
Les interruptions :
Les vecteurs d’interruption sont des sous-programmes prédéfinis. Chaque
interruption est destinée à réaliser une tâche bien définie. Il existe en tout 256
interruptions pour la famille des µp8086 dont 224 peuvent être logicielles.
Exemple 13 :
Lecture d’un caractère à partir d’un clavier :
MOV AX,01
INT 21h
INT 20 h
Ce programme permet de charger le code ASCII du caractère dans AL. Dans le
cas où le touche tapée est un caractère spécial, AL est remis à zéro et AH
contient le code ASCII de ce dernier.
La mémoire vidéo :
Pour travailler en mémoire vidéo, le registre de segment DS doit être pointé à
partir du segment : 0B800h, cela est utile pour les programmes d’affichage et
d’utilisation de l’écran en général.
Exemple 14 :
MOV AX, 0B800h
MOV DS, AX
; afficher ‘HELLO’ sur l’écran
MOV [02h], 'H'
MOV [04h], 'E'
MOV [06h], 'L'
MOV [08h], 'L'
MOV [0Ah], 'O'
RET
- Copier et exécuter ce programme avec l’émulateur Emu8086.
12