0% ont trouvé ce document utile (0 vote)
50 vues35 pages

TP Microprocesseurs

Transféré par

manartouil
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
50 vues35 pages

TP Microprocesseurs

Transféré par

manartouil
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Avant-propos

Ce fascicule de travaux pratiques est destiné aux étudiants de Master 1


académique d’électrotechnique pour les parcours : (Réseaux Eclectiques, Commandes
Electriques et Machines Eclectiques) comme il s’adresse aux étudiants de Licence
automatique. Son objectif est de mettre à leur disposition un support pédagogique
conformément aux programmes officiels.

Il rassemble une série de travaux pratiques (TP) ayant pour but de permettre aux
étudiants de mieux comprendre les implications pratiques de leurs cours de
microprocesseur 8086. L’accent y est mis sur l’utilisation pratique de la maquette
didactique MTS-86C, qui utilise le langage assembleur.
En effet l’assembleur est un langage largement répandu depuis bien longtemps, et y
reste aujourd’hui, autant dans les universités que dans les centres de recherche et
développement, ainsi que dans l’industrie.
En plus des TP ce manuel fournie aux étudiants un certains nombres d’informations
(compléments théoriques) qui leurs serons utiles pour débuter leurs TP.

Le but de ces TP est de stimuler l’intérêt des l’étudiants pour l’usage du langage
assembleur utilisé dans divers domaines d’automatique industrielle principalement
commande industrielle, à travers une démarche de synthèse plutôt que par le biais de
travaux d’analyse. Il ne s’agit donc pas ici d’illustrer le cours, mais bien de le mettre
en pratique.
Ce fascicule contient cinq TP indépendants et chaque TP comprend :
▪ Une description du but du TP.
▪ Un aperçu théorique nécessaire à la compréhension du TP.
▪ Une description des étapes à suivre pour réaliser TP.
AVANT-PROPOS

Principaux composants du Kit didactique MTS-86………………………………………….......01

Rappels de cour sur le microprocesseur 8086…………………………………………….............02

TP N°1 : Initiation au micro-ordinateur MTS-86C…………………………………...................07

TPN°2: Initiation à la programmation en assembleur …………………………………….........12

(Les instructions de transfert)

TP N°3: Initiation à la programmation en assembleur…………………………………….........15

(Les instructions arithmétiques)

TP N°4 : Initiation à la programmation en assembleur……………………………………........20

(Les instructions logiques)

TP N°5 : Initiation à la programmation en assembleur ………………………………….........25

(Les instructions de saut et de branchement)

Annexe
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Principaux composant du Kit didactique MTS-86C

Le kit MTS-86C est composé d´un microprocesseur 16 bits (8086 d’Intel) auquel sont
connectés tous les constituants principaux de l’informatique industrielle :

- RAM (64Ko) 2 x 62256

- EPROM Moniteur (64Ko) 2 x 27256

- EPROM Utilisateur (64Ko) 2 x 27256

- Interface parallèle 3 x 8255

- Interface série 2 x 8251

- Contrôleur de clavier 8279

- Contrôleur d’interruption 8259

- Timer programmable 8253

- ADC (8 bits – 8 entrées) ADC809

- DAC (8 bits) DAC0808

1
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

1. LE MICROSYSTEME MTS -86C

Le clavier et l’afficheur LCD

Le clavier comporte 16 touches pour les digits hexadécimaux et 8 touches fonctions. Le


clavier et l’afficheur permettent une utilisation du système MTS-86C en mode autonome. On
peut rentrer le programme en hexa sur le clavier et visualiser le contenu de la mémoire sur
l’afficheur.

Le moniteur

Le système MTS-86C est piloté par un moniteur en ROM. En mode autonome, le moniteur
assure la gestion de la saisie du clavier, l’affichage du contenu de la mémoire ou des messages de
dialogues et l’exécution des commandes de l’utilisateur. En mode liaison, le moniteur assure le
dialogue avec le PC et l’exécution des requêtes de celui-ci (chargement de programme utilisateur
en RAM, exécution du programme, lecture/écriture de la mémoire et des ports,…).

La mémoire RAM

Le MTS-86C possède une RAM de 64 Ko (de 00000H jusqu’à 0FFFFH) et une EPROM
utilisée comme une ROM système.
Le moniteur utilise les cases mémoires s’étendant de F8000H jusqu’à FDFFFH, le programme
principal (pour le contrôle du clavier) utilise les cases de FE000H jusqu’à FFFFFH.
Les adresses de la mémoire utilisateur est E0000H-EFFFFH et elle est utilisée par le ROM et la RAM.

Cartographie de la mémoire du kit

FFFFFH MONITOR PROGRAM ROM


F8000H Exercise Program
EFFFF
H USER MEMORY ROM,
E0000 RAM
H
DFFFF
H OPEN
10000
H
FFFFH
400H User program RAM
3FF
H INTERRUPT VECTOR
0H TABLE

2
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Rappel de cours sur le microprocesseur 8086


1.Le microprocesseur 8086

Le 8086 a initié l'avènement de la famille des microprocesseurs Intel 80x86. Bien que sa
conception s'appuie sur celle des microprocesseurs 8 bits qui l'on précédé (i.e. le 8080 et le 8085), il
n'est pas directement compatible avec eux.

Le 8086 a été le premier microprocesseur 16 bits à être largement utilisé, et son implantation au
sein des premiers IBM PC lui a permis d'imposer sa famille au premier rang des microprocesseurs
16 bits. Ses successeurs ont alors largement profité de leur compatibilité logicielle, pour s'assurer
la fidélité d'une large base installée.

2.Organisation interne du 8086

Le µp 8086 est constitué de deux unités internes distinctes:

• l’unité d’exécution (EU : Execution Unit) ;


• l’unité d’interface de bus (BIU : Bus Interface Unit).

Le rôle de la BIU est de récupérer et stocker les informations à traiter, et d'établir les
transmissions avec les bus du système. L'EU exécute les instructions qui lui sont transmises par la
BIU.
Pendant que l'EU du 8086/8088 exécute les informations qui lui sont transmises, l'instruction suivante
est chargée dans la BIU. Les instructions qui suivront sont placées dans une file d'attente. Lorsque l'EU a
fini de traiter une instruction la BIU lui transmet instantanément l'instruction suivante, et charge la
troisième instruction en vue de la transmettre à l'EU. De cette façon, l'EU est continuellement en activité.

3
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

1. Synoptique fonctionnel du µp 80x86

Le microprocesseur 8086 contient 14 registres répartis en 4 groupes :

AX AH AL SP CS IP

BX BH BL BP DS FLAGS

CX CH CL SI SS

DX DH DL DI ES

• Registres généraux ou de travails : 4 registres sur 16 bits AX, BX, CX et DX.


Chacun de ces registres est de 16-bits de large, mais Ils peuvent être également considérés
comme 8 registres sur 8 bits.
Registre AX = (AH, AL) : (Accumulateur) : registre de travail principal.
Registre BX= (BH, BL) : (registre de base) : Il est utilisé pour l'adressage.
Registre CX = (CH, CL): (Le compteur) : le registre CX a été fait pour servir comme
compteur lors des instructions de boucle.
Registre DX = (DH, DL): On utilise le registre DX pour les opérations de multiplication et de
division et pour contenir le numéro d'un port d'entrée/sortie pour adresser les interfaces

4
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

d'E/S.

• Registres de segments : 4 registres sur 16 bits. Ils sont employés par la CPU pour
déterminer les adresses de segment de mémoire.
Le registre DS: (D Datat segment): Le registre segment de données pointe sur la zone
mémoire de données.
Le registre ES: (Extra segment) : segment auxiliaire pour données.
Le registre CS: ( Code segment) : segment de code.
Le registre SS: (Stack segment) : Le registre SS pointe sur la pile.

Remarque: la pile est une zone mémoire ou on peut sauvegarder le contenu des registres,
les adresses ou les données pour les récupérer après l'exécution d'un sous-programme ou
l'exécution d'un programme d'interruption, elle fonctionne selon le principe FILO.

• Registres de pointeurs et d’index : 4 registres sur 16


bits. Ce sont des registres de 16 bits qui contiennent des adresses
de cases mémoire.
L'index SI: (source indexe) : Il est associé au registre DS, il sert aussi pour les instructions de
chaîne de caractères, en effet il pointe sur le caractère source.
L'index DI: (Destination indexe) : Il est associé aux registres (DS ou ES), il sert aussi pour les
instructions de chaîne de caractères, il pointe alors sur la destination.
Les pointeurs SP et BP: ( Stack pointer et base pointer ) : Ils sont associés au registre SS,
Ils pointent sur la zone pile. Pour le registre
BP a un rôle proche de celui de BX, le registre SP Pointe sur le sommet de la pile.
Le pointeur IP: Associé au registre CS, il a seulement une fonction qui est d'indiquer
l ’ ad r es s e d e la prochaine instruction à exécuter par le CPU.

• le registre FLAG : La plupart des instructions arithmétiques et logiques affectent le


registre d'état du processeur (ou registre de FLAG). C’est un registre de 16 bits. Six des drapeaux
sont des indicateurs d'état reflétant les propriétés du résultat de la dernière instruction arithmétique
ou logique effectuée. Trois des indicateurs peuvent être activés ou remis à zéro par le
programmeur: (TF, IF, DF).

5
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Flags

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

CF : indicateur de retenue (carry) ;


PF : indicateur de parité;
AF : indicateur de retenue auxiliaire ;
ZF : indicateur de zéro ;
SF : indicateur de signe;
TF : indicateur d’exécution pas à
pas (trap)
IF : indicateur d’autorisation d’interruption;
DF : indicateur de décrémentation ;
OF : indicateur de dépassement (overflow).

3.La segmentation de la mémoire

Le processeur 8086 a un bus d'adresses du bit 20, Ceci permet au processeur d'adresser
220 ou 1048576 emplacements mémoire différents (1 Mo).
Puisque les registres du 8086 ne font que 16 bits et avec 16 bits en peut adresser que 64 ko
alors INTEL a proposé de fractionner la mémoire totale adressable de 1 Mo en bloc de 64ko
appelés segments. On utilise alors deux registres pour adresser une case mémoire (registre
de segment combiné au registre d’offset), on appelle donc adresse logique la quantité représentée
par : le couple : segment : offset.
On appelle adresse physique : L’adresse d’une case mémoire donnée sous la forme d’une
quantité sur 20 bits.

Adresse physique = segment x 16+ offset


Exemple : CS : IP = 3F51 : 0021 donc Adresse physique = 3F510 + 0021 = 3F530h

6
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

TP N1
Initiation au micro-ordinateur
MTS-86C
1. But
L’objectif de cette manipulation est :
• La familiarisation avec le fonctionnement de base du MTS-86C
• Apprendre à exécuter les principales commandes.
On procèdera à l’introduction de la procédure d’utilisation du Kit MTS-86C en
utilisant seulement les touches du clavier pour saisir des programmes simples. A la fin
de la manipulation l’étudiant sera capable de :
• Utiliser le clavier du Kit MTS-86C ;
• Saisir un programme en langage machine ;
• Comparer l’utilisation du langage machine et du langage assembleur.

Matériels utilisés :
- Le Kit MTS-86C.

Durée :
1H30mn

7
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

2. Présentation du MTS-86C
Le micro ordinateur MTS-86C est un kit basé sur le microprocesseur Intel 8086. Les
principales caractéristiques techniques du système sont:
Le microprocesseur Intel 8086
Mémoire RAM du système (62256 *2 EA 64KB).
Mémoire Rom du système (27256*2 EA 64KB).
Mémoire utilisateur de (27256*2 EA 64KB ou bien (62256 *2 EA 64KB).

Interface I/O.

Interfaces parallèles 8255 3* EA


Interfaces série 8251 2* EA (RS-232)
Contrôle d'interruption 8259
Conteur /timer 8253
Convertisseur ADC 0809 (convertisseur A/D), 8 Bit * 8 Channel
Convertisseur DAC 080 (convertisseur A/D), 8 Bit * 1 Channel
Clavier avec 24 touches
Afficheur LCD de (16*2line)
Sondes logiques pour la sortie du haut parleur de 2W
Interruption accessible (input)
LED pour le fonctionnement digital de la sotie
FND pour le fonctionnement numérique de la sotie

Connexion.

Port parallèle de 2EA


Port série de 2EA
Port d'expansion de 1EA

Alimentation.

Entrée d'AC85-260V
Sortie de DC 5V, 2A, DC+- 12V 0.3 A

L'unité d'entrée est le clavier qui permet à l'utilisateur d'introduire les commandes et les
données au système.
L'unité de sortie du système est l'écran à cristaux liquides.
Les commandes et les données introduites à partir du clavier apparaissent sur l'écran.
Seulement deux lignes peuvent être visualisées sur l'écran.

8
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Le clavier de la carte MTS-86C

Le clavier de la carte MTS-86C comporte 24 touches et il apparaît comme suit :

Touches de fonctions Touches Hexadécimales

RESET NMI C D E F
/IP /FL

+ 8 9 A B
- IW/CS OW/DS /SS /ES

: REG 4 5 6 7
IB/SP OB/BP MV/SI EW/DI

0 1 2 3
, . EB/AX ER/BX GO/CX ST/DX

Les touches de fonctions

Touches Description
La touche RESET vous permet d’initialiser la carte MTS-86C. Quand
RESET la touche est pressée le 8086 envoie un message sur le LCD et le
monitor est près.
La touche NMI génère une interruption non masquable de type 2.
NMI
La touche + vous permet d’additionner 2 valeurs hexadécimale.
+
La touche – vous permet de substituer une valeur hexadécimale d’un
- autre.
: Cette touche vous permet de séparer une adresse entrée sur deux
parties ; la valeur de segment ou de l’offset.
Cette touche vous permet d’utiliser les contenus des registres du 8086
REG comme une adresse ou une donnée en entrée.
, Cette touche sépare les entrées saisies à partir des touches du clavier et
incrémente l’adresse mémoire à chaque entrée.
. Lorsque cette touche est appuyée la commande courante est exécutée.
Notez que lorsque la touche GO est appuyée, le 8086 lance l’exécution
à partir de l’adresse spécifiée quand la touche est pressée.

9
Les touches hexadécimales

Touches Commandes Registres


Hexadicimales
Acronyme Nom Acronyme Nom

0 EB/AX EB Examine par Octet AX Accumulateur


(Byt)
1 ER/BX ER Examine registre BX Registre de Base
2 GO/CX GO Go CX Registre Compteur
3 ST/DX ST Un pas (STEP) DX Registre de Données
4 IB/SP IB Entrée Octet SP Stacker Pointer
5 OB/BP OB Sortie Octet BP Base Pointer
6 MV/SI MV Move SI Source Index
7 EW/DI EW Examine par Word DI Destination Index
8 IW/CS IW Entrée Word CS Registre Segment de Code
(CodeSegment)
Registre Segment de
9 OW/DS OW Sortie Word DS données ( Data Segment)
A /SS non N/A SS Registre Segment de pile
(Stack Segment)
B /ES non N/A ES Registre Segment extra
(Extra Segment)
C /IP non N/A IP Pointeur d'instruction
D /FL non N/A FL Flag
E non N/A non N/A
F non N/A non N/A

3. Initiation à la programmation en langage machine

Soit le programme en CODE SEGMENT

MOV AX, 7A54 B8 547A


MOV BX, 3421 BB2134
MOV CX, AX 8B C8
MOV AX, BX 8BC3
MOV BX,CX 8BD9
HLT F4

10
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

4. Manipulation
Comment utiliser les principales touches de fonction pour introduire le programme précédant
en mémoire ?

a/ Insertion du programme par Octet (Byt):

Reset 0(EB/AX) → 0(EB/AX) → 0EB/AX) → : → 0 → ' B8' (donnée variable) → , ' 54'
(donnée variable) , →' 7A ' (donnée variable) → ,,,,,,,,,,,,,,,,, →,' F4 ' (HLT) → . (Fin de la
commande)

b/Pour exécuter ce programme étape par étape, on utilise les touches suivantes :

ST (3) →1→0→0→ : →0→,→.

c/ pour accéder aux différents registres ou pour lire ou modifier leurs contenus on utilise les
touches suivantes :

1 (ER/BX) → 0(ES/ AX) → , 1 (ER/BX) → , 2 (GO/CX) → ,3 (ST/DX) . (Fin de la


commande)

d/ Exécution totale du programme par les touches :


2(GO/CX) →1→0→0→ : →0→,→.

e/ Insertion du programme par mot word):

7 (EW/DI) → 1 (ER/BX) → 0 (EB/AX) → 0 (EB/AX) : → 0 → ' B854' (donnée variable)


→ , ' 7A BB' (donnée variable) → ,,,,,,,,,,,,,,,,, →,' F4 ' (HLT) variable) → . (Fin de la commande)

f / le MTS86-C offre 20 programmes démos :


Reset (T) → , → 0 (EB/AX) → 1 (ER/BX)

5. Travail demandé

1/ Identifier les différents constituants du KIT MTS 86-C.


2/ Donner une déception détaillée des principaux constituants.
3/Donner la conclusion sur :
Les deux modes d’insertion des programmes
Les deux types d’exécution.

4/ Etablir une liste des programmes démos et déterminer leurs emplacements mémoire.

11
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

TP N2
Initiation à la programmation en assembleur
(Les instructions de transfer)

1. But du TP

Le but de cette manipulation est de :


• Connaissance des registres internes du Microprocesseur 80x86
• Utilisation des instructions de transfert du µp 80x86 en utilisant le MTS-86C.
• Déterminer les différent modes d’adressage

Ces instructions permettent de déplacer des données d’une source vers une destination, toute en
gardant la même information dans la source. Plusieurs modes d’adressage sont possibles.
Matériels utilisés :
- Le Kit MTS-86C.

Durée : 1H30mn

2. Rappel

Chaque microprocesseur reconnait un ensemble d’instructions appelé jeu d’instructions


(Instruction Set) fixé par le constructeur. Pour les microprocesseurs classiques, le nombre
d’instructions reconnues varie entre 75 et 150.
Une instruction est définie par son code opératoire, valeur numérique binaire difficile à manipuler
par l’être humain. On utilise donc une notation symbolique pour représenter les instructions: les
mnémoniques. Un programme constitué de mnémoniques est appelé programme en assembleur.
Les instructions peuvent être classées en groupes:

• Instructions de transfert de données ;


• Instructions arithmétiques ;
• Instructions logiques ;
• Instructions de branchement ...

Les instructions de transfert

Elles permettent de déplacer des données d’une source vers une destination:
• registre vers mémoire ;
• registre vers registre ;
• mémoire vers registre.
MOV destination, source
Destination = Reg. ou case mémoire
Source = Reg., case mémoire, ou donnée immédiate
Note : Une opération de transfert ne peut pas se faire entre deux cases mémoire, il faut que ça passe

12
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

par un registre. On ne peut pas avoir des instructions du style :

Le microprocesseur 8086 contient 14 registres répartis en 4 groupes :

• Registres généraux : 4 registres sur 16 bits.


AX = (AH,AL) ;
BX = (BH,BL) ;
CX = (CH,CL) ;
DX = (DH,DL).

• Registres de pointeurs et d’index : 4 registres sur 16 bits.


SP : Stack Pointer, pointeur de pile
BP : Base Pointer, pointeur de base,
SI : Source Index ;
DI : Destination Index.

• Pointeur d’instruction et indicateurs (flags) 2 registres sur 16 bits.


Pointeur d’instruction : IP et le flags

• Registres de segments : 4 registres sur 16 bits.


CS : Code Segment, registre de segment de code
DS : Data Segment, registre de segment de données ;
SS : Stack Segment, registre de segment de pile ;
ES : Extra Segment, registre de segment suppl´ementaire
Les registres de segments, associés aux pointeurs et aux index, permettent au microprocesseur 8086
d’adresser l’ensemble de la mémoire.

3. Manipulation

Exercice 01:

Soit le programme suivant écrit en assembleur


Le programme est débuté à partir de l'adresse physique 100:0 H en utilisant la commande [EB]

Adresse mnémoniques langage machine


0000 MOV AX, OPR1 A1 0E 00
0003 MOV BX, AX 8B D8
0005 MOV CX , BX 8B CB
0007 MOV DX, CX 8B D1
0009 MOV OPR2, DX 89 16 10 00
000D HLT F4
000E OPR1 DW F73AH 3A F7
0010 OPR2 DW 5533H 3355
1) Charger le programme à partir de l’adresse 0000H
2) Initialiser les registres AX, BX, CX, DX c.-à-d. charger les registres par la valeur 0000H.
3) Changer le contenu du registre segment de données par la valeur 100H
4) Exécuter le programme étape par étape en utilisant la commande [ST]

13
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

5) Regrouper les valeurs des registres dans le tableau suivant :

Étape R Registre AX Registre BX Registre CX R Registre DX L'adrésse


Etape1
Étape 2
Etap Etape 3
Étape 4
Étape 5

6) Que fait ce programme?


7) Déterminer le mode d’adressage utilisé pour chaque instruction.

Exercice 2

Soit le programme suivant écrit en assembleur


Le programme est débuté à partir de l'adresse physique 100:0 H en utilisant la touche [EB]

Adresse Mnémoniques Code machine


0000 MOV AX, 1234H B8 34 12
0003 MOV BX, 5678H BB 7856
0006 MOV CX, AX 8B C8
0008 MOV AX, BX 8B C3
000A MOV BX, CX 8B D9
000C HLT F4

1) Charger le programme à partir de l’adresse 0000H


2) Initialiser les registres AX, BX, CX, DX c.-à-d. charger les registres par la valeur 0000H.
3) Changer le contenu du segment de donnée par la valeur 100H
4) Exécuter le programme étape par étape en utilisant la commande [ST]
5) Regrouper les valeurs des registres dans le tableau suivant :

Étape R Registre AX Registre BX Registre CX R Registre DX L'adrésse


Etape1
Étape 2
Etap Etape 3
Étape 4
Étape 5

6) Que fait ce programme?


7) Déterminer le mode d’adressage utilisé pour chaque instruction.
8) Quelle est la différence ente e le premier et le deuxième programme.

14
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

TP N3
Initiation à la programmation en assembleur
(Les instructions arithmétiques)

1. But du TP
Le but de cette manipulation est :
• Utilisation des instructions arithmétiques du µp 80x86 en utilisant le MTS-86C.
• Les modes d’adressage possibles
• Emplacement des résultats
Les instructions arithmétiques de base sont l’addition, la soustraction, la multiplication et la
division qui incluent diverses variantes. Plusieurs modes d’adressage sont possibles.

Matériels utilisés :
- Le Kit MTS-86C.

Durée :
1H30mn

2. Rappel

ADDITION

Un nombre non signé est défini comme une donnée ou tous ses bits sont utilisés pour la
représenter, i.e. aucun bit n’est réservé pour représenter son signe, négatif ou positif. Par exemple
un opérande sur 8-bits peut prendre des valeurs de 00H a FFH (de 0 a 256 en décimale).

ADD destination, source ;Opérande dest. = Opérande dest. + Opérande source


ADC destination, source ;Opérande dest.= Opérande dest.+Opérande source + CF

Un opérande dest. peut être un registre ou une case mémoire. Un opérande source peut être un
registre, une case mémoire, ou une valeur immédiate. Les opérations de mémoire à mémoire non
permises dans le langage assembleur du 80x86. L’instruction ADD peut changer les indicateurs ZF,
SF, AF, CF ou PF du registre FLAG. Le OF concerne les opérations signées.

MOVAL, 0F5H 1111 0101


ADD AL, 0BH + 0000 1011
--------------
1 0000 0000 → ZF = 1, CF = 1, AF = 1, PF = 1, SF = 0 (bit D7 est 0)

ADC AL, 0BH 0000 0000


+ 1

15
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

--------------
00000 0001 → ZF = 0, CF = 0, AF = 1, PF = 0, SF = 0 (bit D7 est 0)

Soustraction

SUB destination, source ;Opérande dest. = Opérande dest. - Opérande source


SBB destination, source ;Opérande dest. = Opérande dest. - Opérande source – CF

Pour la soustraction, les µp 80x86 utilisent la méthode complément à 2 (Cà2), pour éviter un
circuit soustracteur (économie de transistors oblige). Les étapes à suivre par le hardware de la CPU
pour mener l’instruction SUB, pour les nombres non signés, sont:
1- Prendre le Cà2 de l’opérande source : (Cà1+1)
2- Ajouter a l’opérande destination.
3- Inverser la retenue CF.

MOV, AL, 3FH 0011 1111 - 0010 0011


MOV, BH, 23H
SUB AL, BH + 1101 1101 (Cà2 de 0010 0011)
--------------
1 0001 1100 → CF → 0, ZF = 0, PF = 0, SF = 0 (bit D7 est 0)

Si CF = 0, le résultat est positif. Si non il est négatif. Dans ce cas l’opérande destination contient le
Cà2 du résultat. Normalement, ce résultat est laissé tel que.

SBB destination, source ;Opérande dest. = Opérande dest. - Opérande source – CF


Cette instruction concerne les nombres « multi-mots » qui prend en compte la retenue ’’empreint =
borrow’’ de l’opérande (mot) précédent. Si CF=0, SBB est équivalente à SUB. Si CF=1, SBB
soustrait 1 du résultat.
DATA_A DD 62562FAh
DATA_B DD 412963Bh
… … …
MOV AX, WORD PTR DATA_A ; AX = 62FAh
SUB AX, WORD PTR DATA_B ; SUB 963Bh de (AX = 62FAh)
MOV WORD PTR RESULTAT, AX ; stocker le résultat
MOV AX, WORD PTR DATA_A + 2 ; AX = 0625h
SBB AX, WORD PTR DATA_B + 2 ; SUB 0412h avec l’empreint (retenue)
MOV WORD PTR RESULTAT, AX + 2 ; stocker le résultat
Le résultat:
SUB → AX = 62FA – 963B = CC3B et CF =1 →
SBB → 625 – 412 –1 = 212
RESULTAT → 0212CCBFh

16
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Multiplication non signée

MUL opérande, ou opérande est un registre ou une case mémoire. Cette instruction effectue la
multiplication du contenu de AL par un opérande sur 1 octet ou du contenu de AX par un opérande
sur 2 octets. Le résultat est placé dans AX (résultat sur un octet) ou il est placé dans AX et DX
(résultat sur deux octets).

MUL reg. (ou case mém.)

MOV AL, 23H ; l’un des opérandes (ici une donnée immédiate) toujours dans AL
MOV CL, 65H ; 2eme opérande (ici une donnée immédiate) dans le registre BL
MUL CL ; AX = CL (65h) x AL (23h)

Noter que plusieurs modes d’adressage peuvent être utilisés.

Multiplication Opérande 1 Opérande 1 Résultat

Octet x Octet AL Reg. ou mem. AX

Mot x Mot AX Reg. ou mem. DX, AX

Mot x Octet AL=Octet, AH=0 Reg. ou mem. DX, AX

Division non signée: DIV opérande, ou opérande est un registre ou une case mémoire.
Cette instruction effectue la division du contenu de AX par un opérande sur 1 octet si
l’opérande est sur 1 octet, alors AL = quotient et AH = reste
Dans la division des nombres non signés, quatre cas sont considérés:

Octet/Octet Mot/Mot Mot/Octet DoubleMot/Mot.

Il existe deux cas « exception » ou la CPU ne peut effectuer une division: division par « 0 »
ou si le quotient est plus large que la taille du registre. Un signal d’interruption est activé et
le PC affiche un message d’erreur
Les modes d’adressage permis : Adressage direct, Adressage registre, Adressage registre
indirect:

Multiplication et Division signée (IMUL / IDIV) reg. (ou case mémoire.)

Note: Dans les manuels d’Intel IMUL et IDIV pour Integer MULtiplication et DIVision (X et / des
nombres entiers) mais au fait il s’agit de Multiplication et Division des nombres signés.

17
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Multiplication Operande 1 Operande 2 Résultat


Signée (> ou <) (> ou <)
AX (CF=OF=1 si AH possède une partie du
Octet*Octet AL Reg. résultat, mais si celui-ci n’est pas large → pas
Ou besoin de AH, le bit de signe est copié aux bits
case mem. non utilisés de AH et la CPU force CF=OF=0
pour l’indiquer)

DX AX(CF=OF=1 si DX possède une partie du


Mot*Mot AX Reg. résultat, mais si celui-ci n’est pas large → pas
ou besoin DX, le bit de signe est copié aux bits
c case mem. non utilisés de DX et la CPU force CF=OF=0
pour l’indiquer)

AL = Octet Reg. DX AX (même remarque que précédemment)


Mot*Octet CBW O ou case mem.

Division Signée NUM. DENOM. QUOTIENT Reste


(> ou <) (> ou <)

Octet/Octet AL = Octet CBW Reg. AL AH


ou
Ou case mem.

Mot/Mot AX = Mot CWD Reg. AX DX


ou
Ou case mem.

Mot/Octet AX = Mot Reg. AL AH


ou (Err erreur si –128>AL>+127)
Ou case mem.

Double DXAX = DoubleMot Reg. AX DX


Mot/Mot ou (Err erreur si –
Ou case mem.
327 68>AL>+32767)

3. Manipulation
Exercise :

Soit le programme suivant écrit en assembleur


Le programme est débuté à partir de l'adresse physique 100:0 H en utilisant la commande [EB]
1) Charger le programme à partir de l’adresse 0000H
2) Initialiser les continues des registres AX, BX, CX, DX c.-à-d. charger les registres par la valeur
0000H.
3) Changer le contenu du registre segment de données par la valeur 100H
4) Exécuter le programme étape par étape en utilisant la commande [ST]
5) Regrouper les valeurs des registres dans le tableau suivant :

18
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Les valeurs remis les résultats de l'exécution


Adresse Langage Mnémoniques AX BX CX AX BX CX
machine
0000 B0 06 MOV AL,6 00000 0000 0000 0006 0000 0000
0002 04 05 ADD AL,5
0004 37 AAA
0005 8A D8 MOV BL,AL
0007 B0 04 MOV AL,4
0009 14 C3 ADC AL,3
000B 37 AAA
000C 8A F8 MOV BH,AL
000E B0 03 MOV AL,3
0010 2C 04 SUB AL,4
0012 3F AAS
0013 8A C8 MOV CL,AL
0015 B0 08 MOV AL,8
0017 1C 01 SBB AL,1
0019 3F AAS
001A 8A E8 MOV CH,AL
001C B0 58 MOV AL,58
001E 04 15 ADD AL,15
0020 27 DAA
0021 B0 51 MOV AL,51
0023 2C 13 SUB AL,13
0025 2F DAS
0026 B3 04 MOV BL,4
0028 B0 03 MOV AL,3
002A F6 E3 MUL BL
002C D4 0A AAM
002E B8 04 01 MOV AX,104
0031 B3 04 MOV BL,4
0033 D5 0A AAD
0035 F6 F3 DIV BL
0037 F4 HLT

6) Déterminer les registres impliques dans chaque instructions arithmétiques, son mode d’adressage et
l’emplacement des résultats.

19
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

TP 4
Initiation à la programmation en assembleur
(Les instructions logiques)

1. But du TP
Le but de cette manipulation est :
• Utilisation des instructions logiques du µp 80x86 en utilisant le MTS-86C.
• Déterminer les différents indicateurs impliqués pour chaque opération logique
Les instructions arithmétiques de base sont : ET logique, OR logique, OU exclusif, le complément à
1, complément `a 2, décalages et rotations. Plusieurs modes d’adressage sont possibles.

Matériels utilisés :
- Le Kit MTS-86C.

Durée :
1H30mn

2. Rappel

Ce sont des instructions qui permettent de manipuler des données au niveau des bits. Les opérations
logiques de base sont : ET(AND), OU (OR), OU exclusif (XOR), complément `a 1 (NOT),
complément `a 2 (NEG), décalages et rotations.

Instruction AND: AND destination, source


Destination = Reg. ou case mémoire
Source = Reg., case mémoire, ou donnée immédiate

MOV BL, 35H X XY X AND Y


AND BL , 0FH ; BL AND 0Fh → BL (05h). 0 0 0

Avec AND seuls les indicateurs ZF, SF et PF sont affectés et (CF, OF) → 0. 0 1 0
L’instruction AND est utilisée pour:
1 0 0
- Masquer (mise à 0) certains ou tout les bits (AND AL, 00h)
- Application: Tester si un opérande est “0” 1 1 1

20
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Instruction OR: OR destination, source


XB Y
XY X
Y o X OR Y

Destination = Reg. ou case mémoire.


000 0 0 000 0
Source = Reg., case mémoire, ou donnée immédiate
0 00 10 11 1
MOV AX, 0504H
OR AX, 0DA68H ; AX OR DA68Fh → AX (DF66h). 1 11 01 10 1

1 11 11 000
1 0
Avec OR seuls les indicateurs ZF, SF et PF sont affectés et (CF, OF) → 0.
L’instruction OR est utilisée pour:
- Mettre à 1 certains ou tout les bits (OR BL, FFh).
- Tester si un opérande est “0”

Instruction XOR: XOR destination, source


X Y Xx
Destination = Reg. ou case mémoire. X Y X XOR Y
Source = Reg., case mémoire ou donnée immédiate 0 0 0 0 0000 0

MOV DH, 54H 0 0 111


0 111
1 1
XOR DH , 78H ; DH XOR 78h → DH (2Ch).
1 11 0 100 1011 1
Avec l’instruction XOR, si les bits sont égaux, le bit résultant est 0 et vice 1 11 1 111 000
1 0
versa.
Avec XOR, seuls les indicateurs ZF, SF et PF sont affectés et (CF, OF) → 0.
Application: L’instruction XOR est utilisée pour:
- Mettre à 0 le contenu d’un registre (XOR AL, AL), le résultat, toujours 00h,
→AL
- Comparer deux registres si leur contenus sont égaux (XOR AX, CX).
Si c’est les cas ZF → 1 et le résultat est sauvegardé dans la destination (0000 →AX)
- Basculer (toggle) ou inverser un ou plusieurs bits (0 →1 ou 1 →0):

MOV AH, 54H


XOR AH , 04H ; bit 2 de AH s’inverse (50h → AH)

Instructions de Decalage → Logique (opérandes non signés) et Arithmétique (opérandes


signés)
Les instructions de décalage logiques affectent les indicateurs OF, SF, PF et ZF.
Les opérandes à décaler peuvent être dans un registre ou dans une case mémoire de n bits (n
≥ 1) mais jamais en mode immédiat.

▪ Instruction SHL (Décalage logique à gauche)


▪ Instruction SHR (Décalage logique à droite)
▪ Instruction SAL (Décalage arithmétique à gauche)
▪ Instruction SAR (Décalage arithmétique à droite)

21
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Les décalages arithmétiques permettent de conserver le signe. Ils sont utilisés pour effectuer
des opérations arithmétiques comme des multiplications et des divisions par 2.

Instructions de Rotation

Dans les rotations, les bits déplacés dans un sens sont réinjectés de l’autre côté du mot. Les quatre
opérations de rotation disponibles apparaissent dans la figure suivante :

Instruction RCL (Rotation à gauche à travers le Carry)

Instruction ROL (Rotation à gauche)

Instruction RCR (Rotation à droite à travers le Carry)

Instruction ROR (Rotation à droite)

Instruction CMP (Compare) CMP destination, source

Destination = Reg. ou case mémoire.


Source = Reg., case mémoire ou donnée immédiate

22
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

L’instruction CMP affecte les indicateurs AF, OF, SF, PF, CF et ZF mais
C Comparer ZZ ZF
ZF CF
seuls CF et ZF sont utilisés. Op opérandes
L’opérande destination peut être dans un registre ou dans une case
Des Dest. > Source
000 0000 0
mémoire.
L’opérande source peut être dans un registre, dans une case mémoire, ou
Des Dest. = Source
111 100
1 0
en mode immédiat.
Les opérandes (destination et source) ne changent pas. Des Dest. < Source
000 011
0 1

DATA1 DW 235FH

MOV BX, 7888H ; 7888Hh → BX
MOV CX, 9FFFH
CMP BX, CX ; BX < CX ➔ CF=1 ➔ JNC est exécutée → PASSE
JNC PASSE

Note: les contenus de (BX, et CX) ne changent pas après CMP

ADD BX, 4000H


PASSE:ADD CX, DATA1 ; mais CF est toujours vérifié pour (< ou >). Pour (=) on
utilise ZF.

MOV AL, DATA ; DATA → AL


CMP AL, 99 ; DATA = 99 Avec (SUB AL, 99), la même chose mais 0
➔ AL
JZ PROCHAIN ; Si ZF=1 (TEMP=99), Saute a PROCHAIN:
INC BX ; Sinon incrémente BX
PROCHAIN :HLT ; Arrêt du programme

3. Manipulation
Exercice 01:

Soit le programme suivant écrit en assembleur


Le programme est débuté à partir de l'adresse physique 100:0 H en utilisant la commande [EB]

1) Charger le programme à partir de l’adresse 0000H


2) Initialiser les registres AX, BX, CX, DX c.-à-d. charger les registres par la valeur 0000H.
3) Changer le contenu du registre segment de données par la valeur 100H
4) Exécuter le programme étape par étape en utilisant la commande [ST]
5) Regrouper les valeurs des registres dans le tableau suivant :

23
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

AdresseL Langage Mnémoniques Registre AL Registre AL


m machine Les valeurs resultat
remis
0000 B0 01 MOV AL,00000001B 0000 0000 B 0000 0001 B
0002 F6 D0 NOT AL
0004 F6 D8 NEG AL
0006 24 0FAN AND AL,00001111B
0008 B0 AA MOV AL,10101010B
000A 0C 0F ORAL,00001111B
000C 34 CC XOR AL,11001100B
000E F4 HLT

6) Dresser les tableaux de vérité et comparer les résultats théoriques obtenus avec ceux obtenus par
l’exécution du programme.

Exercice 02:

Soit le programme suivant écrit en assembleur


Le programme est débuté à partir de l'adresse physique 100:0 H en utilisant la commande [EB]
1) Charger le programme à partir de l’adresse 0000H
2) Initialiser les registres AX, BX, CX, DX c.-à-d. charger les registres par la valeur 0000H.
3) Changer le contenu du registre segment de données par la valeur 100H
4) Exécuter le programme étape par étape en utilisant la commande [ST]
5) Regrouper les valeurs des registres dans le tableau suivant :

Adresse
L Langage mnémoniques Registre AL Registre AL
m Machine Les valeurs remis resultat
0 0000 B0FF M MOV AL,11111111B 0000 0000 B 0000 0001 B
0 0002 D0E0 SHL AL,1
00 0004 D0E8 SHR AL,1
00 0006 B088 MOV AL,10001000B
0 0008 B103 MOV CL,3
0 000A D2F8 SSS SAR AL,CL
0 000C B080 MOV AL,10000000B
00 000E D0C0 ROL AL,1
0010 D0C8 ROA AL,1
0012 B080 MOV AL,10000000B
0014 D0D0 RCL AL,1
0016 D2D8 RCR AL,1
0 0018 F4 HLT

6) Dresser les registres et déterminer le sens des décalages ou des rotations.


7) Comparer les résultats théoriques obtenus avec ceux obtenus par l’exécution du programme.

24
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

TP N5
Initiation à la programmation en assembleur
(Les instructions de saut et de branchement)
1. But du TP
Le but de cette manipulation est :
• Utilisation des instructions de saut du µp 80x86 en utilisant le MTS-86C,
• Constater l’effet des différentes conditions posées sur le déroulement du programme.

Matériels utilisés :
- Le Kit MTS-86C.

Durée :
1H30mn
2. Rappel
Les instructions de branchement (ou saut) permettent de modifier l’ordre d’exécution des
instructions du programme en fonction de certaines conditions. Il existe trois types de saut :
1 -Instructions de sauts inconditionnels
JMP label ; Provoque un saut sans condition à la ligne portant l'étiquette label. Où label est un
identificateur d'adresse de programme.
2 -Instructions de sauts conditionnels
Instructions de sauts conditionnels sont conditionnées par l'état des indicateurs (drapeaux) qui
sont eux même positionnés par les instructions précédentes.
Jxxx label où: xxx décrit la condition du saut.

instruction nom condition


JZ label Jump if Zero saut si ZF = 1
JNZ label Jump if Not Zero saut si ZF = 0
JE label Jump if Equal saut si ZF = 1
JNE label Jump if Not Equal saut si ZF = 0
JC label Jump if Carry saut si CF = 1
JNC label Jump if Not Carry saut si CF = 0
JS label Jump if Sign saut si SF = 1
JNS label Jump if Not Sign saut si SF = 0
JO label Jump if Overflow saut si OF = 1
JNO label Jump if Not Overflow saut si OF = 0
JP label Jump if Parity saut si PF = 1
JNP label Jump if Not Parity saut si PF = 0

Tableau 1: Liste des instructions de sauts conditionnels du 8086.

25
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

3. Manipulation
Exercice :

Soit le programme suivant écrit en assembleur


Le programme est débuté à partir de l'adresse physique 100:0 H en utilisant la commande [EB]

1) Charger le programme à partir de l’adresse 0000H


2) Initialiser les registres AX, BX, CX, DX c.-à-d. charger les registres par la valeur 0000H.
3) Changer le contenu du registre segment de données par la valeur 100H
4) Exécuter le programme étape par étape en utilisant la commande [ST]

0000 MOV AL,78H B0 78


0002 MOV CL,80H B1 80
0004 CMP CL ;00H 80 F9 00
0007 JB J1 72 03
0009 JL J1 7C 01
000B NOP 90
000C J1 CMP AL,CL 3A C1
000E JG J2 7F 03
0010 JA J2 77 01
0012 NOP 90
0013 J2 ADD AL,18H 04 18
0015 JC J3 72 03
0017 JS J3 78 01
0019 NOP 90
001A J3 ADD AL,80H 04 80
001C MOV AL, 00H B0 00
001E JZ J4 74 03
0020 JC J4 72 01
0022 NOP 90
0023 J4 MOV AL,0FFH B0 FF
0025 ADD AL,01H 04 01
0027 JC J5 72 01
0029 NOP 90
002A J5 CLC F8
002B MOV AL,0FFH B0 FF
002D INC AL FE C0
002F JC J6 72 03
0031 JE J6 74 01
0033 NOP 90
0034 J6 HLT F4

6) Déterminer les registres impliqués dans chaque instruction, l’emplacement des différents
résultats.
7) Déterminer la condition imposée (Flag) dans chaque instruction de saut et sa satisfaction ou non

26
ANNEXE

27
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

Les opérations non exécutées par le µp 8086


Voici une liste non exhaustive de quelques erreurs à éviter

Une opération ne peut pas se faire entre deux cases mémoire, il faut que ça passe par un
registre. On ne peut pas avoir des instructions du style :

MOV [245],[200] INST [ ] , [ ]


ADD [BX],[BP]

Bien que le registre SP soit un registre d’adressage, il ne peut être utilisé directement pour
accéder à la pile, on peut toutefois le copier dans un registre valide pour l’adressage (BX, BP,SI, DI) et
utiliser ensuite ce dernier :

MOV AX,[SP] MOV BP,SP


MOV AX,[BP]

On ne peut pas faire des opérations directement sur un registre segment, il faut passer
par un autre registre. On ne peut pas non plus copier un registre segment dans un autre

MOV ES, 02F7H MOV BX,02F7h


MOV ES,BX

MOV ES,DS MOV AX,DS


MOV ES,AX

IN ES
MOV BX,ES
INC BX
MOV ES,BX

ADD ES,2 MOV BX,ES


ADD BX,2
MOV ES,BX

On ne peut pas faire une multiplication ou une division sur une donnée (immédiat)

MUL im
DIV im
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

❖ JEU D'INSTRUCTION 8086

1. INSTRUCTION DE TRANSFERT

Général
MOV Déplacement d’un octet ou d’un mot
PUSH Ecriture d’un mot au sommet de la pile
POP Lecture d’un mot au sommet de la pile
XCHG Echange d’octets ou de mots
XLAT ou Traduction d’un octet à l’aide d’une table
XLATB
Entrées/Sorties
IN Lecture d’un port d’E/S
OUT Ecriture d’un port d’E/S
Transfert d’adresses
LEA Chargement d’une adresse effective
LDS Chargement d’un pointeur utilisant DS
LES Chargement d’un pointeur utilisant ES
Transfert des flags
LAHF Transfert des 5 flags bas dans AH
SAHF Transfert de AH dans les 5 flags bas
PUSHF Sauvegarde des flags sur la pile
POPF Restauration des flags à partir de la pile
Général
MOV Déplacement d’un octet ou d’un mot
PUSH Ecriture d’un mot au sommet de la pile
POP Lecture d’un mot au sommet de la pile
XCHG Echange d’octets ou de mots
XLAT ou Traduction d’un octet à l’aide d’une table
XLATB
Entrées/Sorties
IN Lecture d’un port d’E/S
OUT Ecriture d’un port d’E/S
Transfert d’adresses
LEA Chargement d’une adresse effective
LDS Chargement d’un pointeur utilisant DS
LES Chargement d’un pointeur utilisant ES
Transfert des flags
LAHF Transfert des 5 flags bas dans AH
SAHF Transfert de AH dans les 5 flags bas
PUSHF Sauvegarde des flags sur la pile
POPF Restauration des flags à partir de la pile
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

2. INSTRUCTIONS ARITHMETIQUES

Addition
ADD Addition d’octets ou de mots
ADC Addition d’octets ou de mots avec retenue
INC Incrémentation de 1 d’un octet ou d’un mot
AAA Ajustement ASCII de l’addition
DAA Ajustement décimal de l’addition

Soustraction
SUB Soustraction d’octets ou de mots
SBB Soustraction d’octets ou de mots avec retenue
DEC Décrémentation de 1 d’un octet ou d’un mot
NEG Complémentation à 2 d’un octet ou d’un mot (changement de signe)
CMP Comparaison d’octets ou de mots
AAS Ajustement ASCII de la soustraction
DAS Ajustement décimal de la soustraction
Multiplication
MUL Multiplication non signée d’octets ou de mots
IMUL Multiplication signée d’octets ou de mots
AAM Ajustement ASCII de la multiplication
Division
DIV Division non signée d’octets ou de mots
IDIV Division signée d’octets ou de mots
AAD Ajustement ASCII de la division
CBW Conversion d’octet en mot
CWD Conversion de mot en double mot

3. INSTRUCTION LOGIQUES

Logique
NOT Complément à 1 d’un octet ou d’un mot
AND ET logique de deux octets ou de deux mots
OR OU logique de deux octets ou de deux mots
XOR OU exclusif logique de deux octets ou de deux mots
TEST Comparaison, à l’aide d’un ET, d’octets ou de mots
Décalages
SHL/SAL Décalage à gauche arithmétique ou logique (octet ou mot)

SHR Décalage logique à droite d’un octet ou d’un mot


SAR Décalage arithmétique à droite d’un octet ou d’un mot
Rotations
ROL Rotation à gauche d’un octet ou d’un mot)
ROR Rotation à droite d’un octet ou d’un mot
RCL Rotation à gauche incluant CF (octet ou mot)
RCR Rotation à droite incluant CF (octet ou mot)
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

4. INSTRUCTIONS SUR CHAINE DE CLAVIER

Préfixes
REP Répétition tant que CX n’est pas nul
REPE ou REPZ Répétition tant qu’il y a égalité et que CX n’est pas nul
REPNE ou Répétition tant qu’il n’y a pas égalité et que CX n’est
REPNZ pas nul
Instructions
MOVS ou Déplacement de blocs d’octets ou de mots
MOVSB/MOVSW
CMPS ou Comparaison de blocs d’octets ou de mots
CMPSB/CMPSW
SCAS ou Exploration d’un bloc d’octets ou de mots
SCASB/SCASW
LODS ou Tranfert d’un octet ou d’un mot dans AL ou AX
LODSB/LODSW
STOS ou Chargement d’un bloc d’octets ou de mots par AL ou
STOSB/STOSW AX

5. INSTRUCTIONS DE BRANCHEMENT

Branchements inconditionnels
CALL Appel de procédure
RET Retour d’une procédure
JMP Saut inconditionnel
Contrôles d’itérations
LOOP Bouclage tant que CX = 0
LOOPE ou Bouclage tant que CX = 0 et ZF = 1 (égalité)
LOOPZ
LOOPNE ou Bouclage tant que CX = 0 et ZF = 0 (inégalité)
LOOPNZ
JCXZ Saut si CX est nul
Interruptions
INT Interruption logicielle
INTO Interruption si OF = 1 (overflow)
IRET Retour d’une interruption

1) concerne des nombres non signes.


(2) concerne des nombres signes.
Initiation au langage Assembleur avec le MTS-86C M.Oukli - N.Mehnane

6. INSTRUCTION DE CONTRÖLE 8086


Opérations sur les flags
STC Met le flag de retenue à 1
CLC Efface le flag de retenue
CMC Inverse l’état du flag de retenue
STD Met le flag de direction à 1 (décrémentation)
CLD Met le flag de direction à 0 (incrémentation)
STI Autorise les interruptions sur INTR
CLI Interdit les interruptions sur INTR
Synchronisation avec l’extérieur
HLT Arrêt du microprocesseur (sortie de cet état par inter-
ruption ou reset)
WAIT Attente tant que TEST n’est pas à 0
ESC Préfixe = instruction destinée à un coprocesseur
LOCK Préfixe = réservation du bus pour l’instruction
Pas d’opération
NOP Pas d’opération

Vous aimerez peut-être aussi