Vous êtes sur la page 1sur 124

Chap.

1
SYSTEMES A BASE DE MICROPROCESSEUR
I / Architecture dun systme base de microprocesseur :
Un systme base de microprocesseur est form des trois lments :
- Une unit CPU (central processing unit )
- Une mmoire (ROM et RAM)
- Des ports dentres/sorties.
Les trois modules sont interconnects comme le montre la figure
suivante autour de trois bus : bus de donnes, bus dadresses et bus de
contrles et commandes.
Bus : Il sagit de plusieurs pistes lectroniques qui sont relies au
microprocesseur. Ces bus assurent la communication interne et externe du
microprocesseur.

- Le bus de donnes : cest un ensemble de fils bidirectionnels qui va


permettre le transfert de donnes entre les diffrents lments du
systme. Il fixe la longueur du mot chang avec la mmoire.
- Le bus dadresses : il permet dadresser un lment par le
microprocesseur .il est unidirectionnel .il dtermine la capacit maximale
dadressage du systme, (ex : 16 bits adressent 65536 octet = 64 K
octet,).

- Le bus de commandes et de contrle : cest un bus qui permet de


vhiculer les signaux de contrles et de commandes tels que lhorloge les
signaux Rd/Wr etc
1- le CPU
Elle se compose essentiellement de lunit de commande, de lUAL et dun ensemble de registres.
LUC est organise le long dun bus (bus interne du microprocesseur.
Le processeur est un circuit lectronique complexe qui excute chaque instruction trs
rapidement, en quelques cycles dhorloges.
La squence des instructions (ou programme) est stocke en mmoire des emplacements successifs
et en code binaire.
Le rle du CPU se dcompose en quatre tapes :
1. aller chercher linstruction suivante en mmoire cycle de chargement ;
2. la dcoder pour dterminer laction quil doit effectuer ;
3. lexcuter cycle dexcution ;
4. revenir ltape 1.

2- la Mmoire
La mmoire est divise en emplacements de taille fixe (par exemple 8 bits) utiliss pour stocker
instructions et donnes.
Dans une mmoire de taille N, on a N emplacements mmoires, numrots de 0 N - 1. Chaque
emplacement est repr par son numro, appel adresse. Ladresse est le plus souvent crite en
hexadcimal.
Donnes

adresse

1 0 1 1 0 1 1 1
.
.
.

bit du poid fort

1 0

bit du poid faible

numero des bits

Remarque :
La mmoire morte (ROM : Read Only Memory) range en gnral le programme dinitialisation du
systme (exemple dans le PC elle range le BIOS : Basic Input Ouput systeme ) .

La mmoire vive (RAM : Random Axes Memory) sert au rangement des programmes utilisateurs
cest une mmoire volatile.
La capacit (taille) de la mmoire est le nombre demplacements, exprim en gnral en kilo-octets ou
en mga-octets, voire davantage. Rappelons que le kilo informatique vaut 1024 et non 1000 (210 =
1024 non 1000). Voici les multiples les plus utiliss :
1 K (Kilo) 210 = 1024
1 M (Mga) 220 = 1048 576
1 G (Giga) 230 = 1 073 741 824
1 T (Tra) 240 = 1 099 511 627 776

schma fonctionnel dune mmoire

Le nombre de lignes dadresses dpend de la capacit de la mmoire : n


lignes dadresses permettent dadresser 2n cases mmoire : 8 bits
dadresses permettent dadresser 256 octet, 16 bits dadresses permettent
dadresser 65536 octets (= 64 Ko), ...
Exemple : mmoire RAM 6264, capacit = 8K8 bits : 13 broches
dadresses A0 A12, 2^13= 8192 = 8 Ko.

Interfaage microprocesseur mmoire


Les interfaces dentres sorties : Elles permettent dassurer la communication entre le
microprocesseur et les priphriques. (capteur, clavier, moniteur ou afficheur, imprimante, modem,
actionneur, etc).

Le microprocesseur doit Donc contrler les fonctions effectues par les autres modules, il
doit chercher ainsi que dcoder des instructions ranger en mmoire, et il doit adresser des
interfaces dentres/sorties pour lire des donnes du monde extrieur, et restituer le rsultat
de son traitement.

II / Architecture dun CPU :


Une CPU est forme par les trois lments fonctionnels interconnects suivants :
Registres.
UAL : Unit arithmtique et logique.
Circuit de contrle.
II-1 / Les registres :
II-1-1 / Laccumulateur :

Il sagit dun registre dusage gnral recevant des oprandes, des rsultats
intermdiaires ou des rsultats provenant de lunit arithmtique et logique. Ils
vitent des appels frquents la mmoire, rduisant ainsi les temps de calcul.
II-1-2 / Le compteur de programme :

Le compteur de programme contient ladresse de linstruction suivante en mmoire


qui doit tre excute. Le registre compteur de programme est constamment

modifi aprs lexcution


linstruction suivante.

de chaque

instruction

afin

quil

pointe

sur

II-1-3 / Registre dinstruction et dcodeur dinstruction :


II-1-3-1 / Le registre dinstruction :

Chaque opration que le microprocesseur va effectuer est code instruction code


ou opration code , Le registre dinstructions contient le code de la prochaine
instruction tre excute par le processeur. Cette instruction sera achemine
(par un bus de donnes) au dcodeur dinstructions qui sera charg de linterprter.
II-1-3-2 / Le dcodeur dinstruction :

Cest lui qui va interprter linstruction contenue dans le registre dinstruction


(RI). Cest--dire quelle est lopration effectuer (Addition, branchement
etc...) Et comment aller chercher les oprandes requises pour cette opration
(par exemple, les nombres additionner). Le dcodeur dinstructions communique
alors avec lunit de commandes et de contrles qui pourra dclencher les
vnements en consquence.
II-1-4/ Registres dadresses :

Ces registres servent grer ladressage de la mmoire, et puisque les registres


peuvent tre incrmenter ou dcrmenter donc on peut accder facilement
des donnes qui se trouvent en mmoire.
II-1-5 Registre dtat (FLAGS) :

Le registre dtat FLAG sert contenir ltat de certaines oprations effectues par le
processeur.
II-2 / Lunit arithmtique et logique (UAL) :

Comme son nom lindique, cette unit peut excuter deux types doprations.
- Oprations arithmtiques
Elles incluent laddition et la soustraction qui sont des oprations de base (une
soustraction est une addition avec le complment deux), la multiplication et
la division. Les donnes traites sont considres dans des reprsentations
entires.
- Oprations logiques
Ces oprations sont effectues bit bit sur les bits de mme poids de deux mots, tel
que ET, OU, NOT OU EXCLUSIF, de mme les oprations de rotation et de dcalage
(arithmtique et logique)
A la fin dune opration, lUAL peut aller modifier certains bits du registre dtat
(FLAG).

II 3 / Unit de contrle et commande :

Synchronise par le signal de lhorloge, cest elle qui dclenche les vnements
dans le. Par exemple, quand une information passe dans un bus, cette information
est destine un seul endroit (par exemple, un registre). Cest donc lunit de
commande et de contrle qui va dverrouiller lentre de cette destination
pour que linformation qui circule sur le bus puisse y entrer

III / Fonctionnement dun systme base de microprocesseur :


III-1 / Les interruptions :

Les interruptions permettent au matriel (priphrique)


de communiquer
avec le processeur. Dans certains cas, on dsire que le processeur ragisse
rapidement un vnement extrieur, mais la majorit de ces priphriques nont
besoin du microprocesseur qu certains moments, alors ils gnres demande
dinterruption.
Une interruption est signale au processeur par un signal lectrique sur une borne
spciale. Lors de la rception de ce signal, le processeur traite linterruption ds la
fin de linstruction quil tait en train dexcuter. Le traitement de linterruption
consiste soit :
lignorer et passer normalement linstruction suivante : interruptions
masquables.
excuter un
masquables.

traitant dinterruption

(interrupt handler). Interruptions non

Remarque :
Parfois le microprocesseur est sollicit par plusieurs interruptions en mme temps,
pour rpondre ces appels un ordre de priorit est souvent pris en compte pour
leurs traitements.
Les interruptions augmentent considrablement lefficacit du processeur.
Les interruptions sont de deux types :

Interruption matrielle.

Interruption logicielle.

III-2 /Lcriture en mmoire (WRITE) :

Pour crire une donne dans la mmoire le microprocesseur doit placer


ladresse de la donne sur le bus dadresses, puis il place la donne sur le bus de
donnes et enfin gnre le signal WRITE.

III-3 / La lecture de la mmoire (READ) :

Pour lire une donne de la mmoire le microprocesseur dpose son adresse sur le
bus dadresses puis gnre le signal READ, alors la donne sera achemine vers le
microprocesseur travers le bus de donnes. La donne sera stocke dans un
registre dans le microprocesseur.

Remarque :

Si la donne est un code opratoire dune instruction alors elle sera loge dans le
registre dinstructions sinon elle sera loge dans un registre de donnes (en gnral
laccumulateur)
III- 4 /Communication avec les entres/sorties :

Les donnes changes entre un priphrique et le processeur transitent par


linterface associ ce priphrique .Linterface possde de la mmoire tampon pour
stocker les donnes changes et les informations pour grer la communication
avec le priphrique :
des informations de commande, pour dfinir le mode de fonctionnement de
linterface : sens
de transfert (entre ou sortie), mode de transfert des
donnes (par scrutation ou interruption), etc. Ces informations de commandes
sont communiques linterface lors de la phase dinitialisation de celle-ci, avant le
dbut du transfert.
des informations dtat, qui mmorisent la manire dont le transfert cest effectu
(erreur de transmission, rception dinformations,
etc). Ces
informations
sont
destines au processeur.
Lors de lexcution des instructions dentres/sorties, le processeur met 1 sa borne
IO/M et prsente ladresse E/S sur le bus dadresse. Le signal IO/M indique aux
circuits de dcodage dadresses quil ne sagit pas dune adresse en mmoire
principale, mais de ladresse dune interface dentres/sorties.
III -5 / Accs direct la mmoire (DMA)

Lorsquun transfert en mmoire est ncessaire de la mmoire RAM un port dE/S,


la CPU lit le premier octet en mmoire et le charge dans lun des registres du
microprocesseur. La CPU crit ensuite loctet rang prcdemment sur le port
dE/S appropri.
Il en rsulte que le microprocesseur effectue des oprations de lecture et dcriture
rptes. Ainsi un certain temps est perdu entre le traitement de chaque octet. Pour
remdier ce problme, une procdure est mise au point pour laccs direct la
mmoire (Direct Memory Acess), qui permet de transfrer des donnes de la
mmoire RAM au port dE/S sans passer par le microprocesseur. Pour cela, un
contrleur DMA, qui reprend le rle de la CPU, cest dire quil gre les transferts de
la RAM aux ports dE/S.

Chap 2
LE MICROPROCESSEUR 8086 / 8088
I / Introduction :
Le processeur 8086 d'Intel est la base des processeurs Pentium actuels. Les
processeurs successifs (de PC) se sont en effet construits petit petit en ajoutant
chaque processeurs des instructions et des fonctionnalits supplmentaires, mais
en conservant chaque fois les spcificits du processeur prcdent.

II / Architecture externe du 8086 :


Le 8086 est un circuit intgr de forme DIL de 40 pattes comme le montre la figure
suivante :

Le 8086 (dvelopp en 1978) est le premier microprocesseur de type x86.Il est


quip d'un bus de donnes de 16 bits et un bus dadresses de 20 bits et fonctionne
des frquences diverses selon plusieurs variantes: 5, 8 ou 10 MHz.

III / Architecture interne du 8086 :


Il existe deux units internes distinctes: l'UE (Unit d'Excution) et l'UIB (Unit
d'Interfaage avec le Bus). Le rle de l'UIB est de rcuprer et stocker les
informations traiter, et d'tablir les transmissions avec les bus du systme. L'UE
excute les instructions qui lui sont transmises par l'UIB.
Pendant que l'UE excute les informations qui lui sont transmises, l'instruction
suivante est charge dans l'UIB. Les instructions qui suivront sont places dans
une file d'attente. Lorsque l'UE a fini de traiter une instruction l'UIB lui transmet
instantanment l'instruction suivante, et charge la troisime instruction en vue de la
transmettre l'UE. De cette faon, l'UE est continuellement en activit.

Donc en conclusion on peut dire que le 8086/8088 se compose


essentiellement de deux units : la BIU qui fournit linterface physique entre le
microprocesseur
et
le
monde
extrieur
et
lEU
qui
comporte
essentiellement lUAL de 16 bits qui manipule les registre gnraux de 16 bits aussi .
Remarque :
La file d'attente d'instructions contient des informations qui attendent d'tre traites
par l'UE. elle est parfois appele capacit de traitement. Le 8086 est capable de
mmoriser jusqu' six octets.

IV / Les registres du 8086/8088 :


IV-1 / Introduction :

Un registre est une petite partie de mmoire intgre au microprocesseur, dans le


but de recevoir des informations spcifiques, notamment des adresses et des
donnes stockes durant l'excution d'un programme. Il existe plusieurs types de
registres. Certains d'entre eux sont affects des oprations d'ordre gnral et sont
accessibles au programmeur tout moment. Nous disons alors qu'il s'agit de
registres gnraux. D'autres registres ont des rles bien plus spcifiques et ne
peuvent pas servir un usage non spcialis.
IV-2 / Les registres gnraux :

Les registres gnraux peuvent tre utiliss dans toutes les oprations arithmtiques
et logiques. Chaque registre est une grandeur de 16 bits mais en ralit divis en
deux registres distincts de 8 bits.
Le programmeur dispose de 8 registres internes de 16 bits quon peut diviser en
deux groupes :
registres de donnes : form par 4 registres de 16 bits (AX,BX,CX,et DX)
chaque registre peut tre divis en deux registres de 8 bits
(AH,AL,BH,BL,CH,CL,DH et DL )
- groupe de pointeur et indexe : form de 4 registres de 16 bits (SI, DI, SP, BP) et
font gnralement rfrence un emplacement en mmoire.
Registres de donnes :

Registres de pointeur et indexe :

IV 2 1 / registres de donnes :
Registre AX : (Accumulateur)

Toutes les oprations de transferts de donnes avec les entres sorties ainsi que le
traitement des chanes de caractres se font dans ce registre, de mme les
oprations arithmtiques et logiques.
Les conversions en BCD du rsultat dune opration arithmtique (addition,
soustraction, multiplication et la division) se font dans ce registre.
Registre BX : (registre de base)

Il est utilis pour ladressage de donnes dans une zone mmoire diffrente de la
zone code : en gnral il contient une adresse de dcalage par rapport une
adresse de rfrence. ). (Par exemple, l'adresse de dbut d'un tableau). De plus il
peut servir pour la conversion dun code un autre.
Registre CX : (Le compteur)

Lors de lexcution dune boucle on a souvent recours un compteur de boucles


pour compter le nombre ditrations, le registre CX a t fait pour servir comme
compteur lors des instructions de boucle.
Remarque :
Le registre CL sert en tant que compteur pour les oprations de dcalage et
de rotation, dans ce cas il va compter le nombre de dcalages (rotation) de bits
droite ou gauche.
Registre DX :

On utilise le registre DX pour les oprations de multiplication et de division mais


surtout pour contenir le numro dun port dentre/sortie pour adresser les
interfaces dE/S.

IV 2 2 / Groupe de pointeur et indexe :

Ces registres sont plus spcialement adapts au traitement des lments dans
la mmoire. Ils sont en gnral munis de proprits d'incrmentation et de
dcrmentation.
Un cas particulier de pointeur est le pointeur de pile (Stack Pointer : SP). Ce registre
permet de pointer la pile pour stocker des donnes ou des adresses selon le principe
du "Dernier Entr Premier Sorti" ou "LIFO" (Last In First Out).
Lidexe SI : (source indexe) :

Il permet de pointer la mmoire il forme en gnral un dcalage (un offset) par


rapport une base fixe (le registre DS), il sert aussi pour les instructions de chane
de caractres, en effet il pointe sur le caractre source
Lindexe DI : (Destination indexe) :

Il permet aussi de pointer la mmoire il prsente un dcalage par rapport une base
fixe (DS ou ES), il sert aussi pour les instructions de chane de caractres, il pointe
alors sur la destination
Les pointeurs SP et BP : ( Stack pointer et base pointer )

Ils pointent sur la zone pile (une zone mmoire qui stocke linformation avec le
principe filo ), ils prsentent un dcalage par rapport la base (le registre SS). Pour
le registre BP il a un rle proche de celui de BX, mais il est gnralement utilis avec
le segment de pile.
IV 2- 3 / Les registres segment:

Le 8086 a quatre registres segments de 16 bits chacun : CS (code segment,


DS (Data segment), ES (Extra segment) et SS (stack segment), ces registres sont
chargs de slectionner les diffrents segments de la mmoire en pointant sur le
dbut de chacun dentre eux. Chaque segment de mmoire ne peut excder les
65535 octets.
Le registre CS (code segment) :

Il pointe sur le segment qui contient les codes des instructions du programme en
cours.

Remarque :
Si la taille du programme dpasse les 65535 octets alors on peut diviser le code sur
plusieurs segments (chacun ne dpasse pas les 65535 octets) et pour basculer
dune partie une autre du programme il suffit de changer la valeur du registre CS et
de cette manire on rsout le problme des programmes qui ont une taille suprieure
65535 octets.
Le registre DS (Data segment) :

Le registre segment de donnes pointe sur le segment des variables globales


du programme, bien videmment la taille ne peut excder 65535 octets (si on a
des donnes qui dpassent cette limite, on utilise la mme astuce cite dans la
remarque prcdente mais dans ce cas on change la valeur de DS).
Le registre ES (Extra segment) :

Le registre de donnes supplmentaires ES est utilis par le microprocesseur


lorsque laccs aux autres registres est devenu difficile ou impossible pour modifier
des donnes, de mme ce segment est utilis pour le stockage des chanes de
caractres.
Le segment SS (Stack segment) :

Le registre SS pointe sur la pile : la pile est une zone mmoire ou on peut
sauvegarder les registres ou les adresses ou les donnes pour les rcuprer aprs
lexcution dun sous programme ou lexcution dun programme dinterruption, en
gnral il est conseille de ne pas changer le contenu de ce registre car on risque de
perdre des informations trs importantes (exemple les passages darguments
entre le programme principal et le sous programme)
IV-2-4 / Le registre IP : (Le compteur de programme) :

Instruction Pointer ou Compteur de Programme, contient ladresse de lemplacement


mmoire o se situe la prochaine instruction excuter. Autrement dit, il doit indiquer
au processeur la prochaine instruction excuter. Le registre IP est constamment
modifi aprs l'excution de chaque instruction afin qu'il pointe sur l'instruction
suivante.

II-2-5 : Le registre dtat (Flag) :

Le registre d'tat FLAG sert contenir l'tat de certaines oprations effectues par le
processeur. Par exemple, quand le rsultat d'une opration est trop grand pour tre
contenu dans le registre cible (celui qui doit contenir le rsultat de lopration), un bit
spcifique du registre d'tat (le bit OF) est mis 1 pour indiquer le dbordement.
Remarque : Drapeaux (flags)
Les drapeaux sont des indicateurs qui annoncent une condition particulire
suite une opration arithmtique ou logique.
Le registre dtat du 8086 est form par les bits suivants :

Remarque :
X : bit non utilise.
CF (Carry Flag) :

Retenue : cet indicateur et mis 1 lorsque il y a une retenue du rsultat


8 ou 16 bits. Il intervient dans les oprations dadditions (retenue) et de
soustractions (borrow) sur des entiers naturels. Il est positionn en particulier par
les instructions ADD, SUB et CMP (Comparaison entre deux valeurs).
CF = 1 sil y a une retenue aprs laddition ou la soustraction du bit de poids fort des
oprandes. Exemples (sur 8 bits pour simplifier) :

PF (Parity Flag) :

Parit : si le rsultat de lopration contient un nombre pair de 1 cet indicateur est


mis 1, sinon zro.
AF (Auxiliary Carry) :

Demie retenue : Ce bit est gal 1 si on a une retenue du quarter de poids


faible dans le quarter de poids plus fort.
ZF (Zero Flag) :

Zro : Cet indicateur est mis 1 quand le rsultat dune opration est gal
zro. Lorsque lon vient deffectuer une soustraction (ou une comparaison), ZF=1
indique que les deux oprandes taient gaux. Sinon, ZF est positionn 0.
SF (Sign Flag) :

SF est positionn 1 si le bit de poids fort du rsultat dune addition ou soustraction


est 1 ; sinon SF=0. SF est utile lorsque lon manipule des entiers signs, car le bit de
poids fort donne alors le signe du rsultat. Exemples (sur 8 bits) :

OF (Overflow Flag) :

Dbordement : si on a un dbordement arithmtique ce bit est mis 1.c a d le


rsultat dune opration excde la capacit de loprande (registre ou case
mmoire), sinon il est 0.
DF (Direction Flag) :

Auto Incrmentation/Dcrmentation : utilise pendant les instructions de chane de


caractres pour auto incrment ou auto dcrmenter le SI et le DI.
IF(Interrupt Flag) :

Masque dinterruption : pour masquer les interruptions venant de lextrieur ce bit


est mis 0, dans le cas contraire le microprocesseur reconnat linterruption
de lextrieur.
TF (Trap Flag) :

Pige : pour que le microprocesseur excute le programme en mode pas pas.

V / Gestion de la mmoire :
V 1 / Introduction :

Lespace mmoire adressable (1 mga = 220 bits du bus dadresse) du 8086/8088


est divis en quatre segment logiques allant jusqu' 64 KOctets chacun. Laccs
ces espaces est direct et simultan, or Le compteur de programme est de 16 bits
donc la possibilit dadressage est de 2 16 = 64 Ko (Ce qui ne couvre pas la totalit de
la mmoire), alors on utilise deux registres pour indiquer une adresse au processeur,
Chaque segment dbute l'endroit spcifi par le registre
segment. Le
dplacement (offset) lintrieur de chaque segment se fait par un registre de
dcalage qui permet de trouver une information l'intrieur du segment. Exemple la
paire de registre CS:IP : pointe sur le code dune instruction (CS registre segment et
IP Dplacement)

V 2 / Adresse physique (Segmentation de la mmoire) :

Les donnes sont regroupes dans une zone mmoire nomme segment de
donnes, tandis que les instructions sont places dans un segment dinstructions
(de mme pour le segment pile et segment de donnes supplmentaires). Ce
partage se fonde sur la notion plus gnrale de segment de mmoire, qui est la
base du mcanisme de gestion des adresses par les processeurs 80x86. On a vu
aussi que le registre IP, qui stocke ladresse dune instruction, fait lui aussi 16 bits.

Or, avec 16 bits il nest possible dadresser que 2 16 = 64 Kilo octets. Le bus
dadresses du 8086 possde 20 bits. Cette adresse de 20 bits est forme par la
juxtaposition dun registre segment (16 bits de poids fort) et dun dplacement (offset,
16 bits de poids faible). Adresse physique= Base * 16+ offset
Le schma de la figure suivante illustre la formation dune adresse 20 bits partir du
segment et du dplacement sur 16 bits :

Remarque :
On appellera segment de mmoire une zone mmoire adressable avec une valeur
fixe du segment (les 16 bit de poids fort). Un segment a donc une taille maximale
de 64 Ko.

V-3 / Implmentation de la pile :

Le pointeur de pile (en combinaison avec le segment de pile SS) pointe vers le
dessus de la pile (TOS : top of stack) en mmoire. Une pile est un ensemble de
donnes places en mmoire de manire ce que seulement la donne du "dessus"
soit disponible un instant donn. Quand un processeur excute une instruction, il
est possible qu'il soit interrompu par une "Interruption" (cest--dire un appel au
processeur qui est prioritaire aux instructions du programme qu'il traite). Il doit alors
arrter de s'occuper de l'instruction qu'il traite prsentement pour s'occuper de
l'interruption. Quand l'interruption sera traite, il retournera l'instruction
qu'il traitait quand il a t interrompu. Mais pour cela, il doit se rappeler de cette
instruction ainsi que de l'tat de certains registres au moment o il traitait l'instruction.
Donc pour ne pas les perdre, il les placera temporairement dans une pile ( l'intrieur
de la mmoire RAM par exemple) et pourra les rcuprer une fois l'interruption

traite. Le pointeur de pile (SP) donne donc l'adresse en mmoire de cette pile
temporaire.
Les piles offrent un nouveau moyen daccder des donnes en mmoire
principale, qui est trs utilis pour stocker temporairement des valeurs.
Le schma suivant montre comment une valeur est stocker dans la pile (pushed) et
comment elle est rcupre (poped) :

V 4 / Organisation de la mmoire :
V 4 1 / Organisation logique :

Logiquement la mmoire est organise de cette manire :

V 4 2 / Organisation physique :

Le microprocesseur 8086 est un processeur 16 bits (bus de donnes de 16 bits), ce


qui lui donne la possibilit daccder en mme temps deux cases mmoires de 8
bits. En effet pour le 8086 la mmoire est organise en deux Banks (un bank pair et
un bank impair chacun de 512 Koctet) comme le montre la figure suivante :

Les bits D0..D7 sont appel partie base alors que les bits D8..D15 sont appel partie
haute. Le 8086 peut charger un octet (8 bits) ou un mot (16 bits) ou un double mot
(32 bits) de la mmoire, en effet pour loctet il suffit de donner ladresse de ce dernier
pour tre charg dans la CPU, pour le mot il suffit de donner ladresse le 8086
cherche loctet du poids faible ladresse donne et loctet du poids le plus fort
ladresse qui suit , mais un problme apparat lorsque on veut accder une case
mmoire impaire tel que 135 par exemple , en effet :
La figure suivante montre comment les cases sont ranges dans les deux banks :

Si on veut accder par exemple loctet (8 bits) dune adresse paire celle ci sera
directement transmise sur les lignes D0D7 mais si on veut accder une adresse
impaire tel que 135 par exemple, donc il faut aussi que la donne serait charger sur
les lignes D0.. D7, or en ralit et en regardant lorganisation de la mmoire par la
figure prcdente on constate que la donne sera transmise sur les lignes D8..D15
(adresse impaire) ce qui va obliger le microprocesseur de changer cette octet du
poids haut au poids faible dune manire automatique.

Si on veut accder un mot : si ladresse est paire on naura pas de problme le pois
faible sera charg sur les lignes D0D7 et le pois fort sera charg sur les lignes
D8D15 donc laccs la mmoire se fait avec un seul cycle .mais si on veut
accder un mot log dans une case impaire tel que 135 par exemple alors il nous
faut deux cycles pour charger la donne en effet lorganisation de la mmoire nous
donne la disposition suivante :

Donc le microprocesseur doit accder la mmoire en deux temps le premier pour


chercher loctet 135 et le deuxime pour chercher loctet haut partir de ladresse
136.de plus il doit permuter ces deux octet pour avoir le poids faible sur les lignes
D0D7 et le poids fort sur les lignes D8D15.
Remarque :
Pour slectionner les banks pair et impair le microprocesseur utilise deux signaux
(BHE et A0 : le premier bit du bus dadresse) comme le montre la figure suivante :

Pour slectionner le bank pair A0=0

Pour slectionner le bank impair BHE = 0

Chap 3
PROGRAMMATION du 80806
I / Introduction :
Lorsque lon doit lire ou crire un programme en langage machine, il est difficile
dutiliser la notation hexadcimale. On crit les programmes laide des instructions
en mnmonique comme MOV, ADD, etc. Les concepteurs de processeurs,
comme Intel, fournissent toujours une documentation avec les codes des
instructions de leurs processeurs, et les symboles correspondantes.
Lopration dassemblage traduit chaque instruction du programme source en une
instruction machine.
Remarque 3 :
Lassembleur est utilis pour tre plus prs de la machine, pour savoir exactement
les instructions gnres (pour contrler ou optimiser une opration) On
retrouve l'assembleur dans :

- la programmation des systmes de base des machines (le pilotage du clavier, de


l'cran, etc...),
- certaines parties du systme d'exploitation,
- le pilotage de nouveaux priphriques (imprimantes, scanners, etc..
- l'accs aux ressources du systme,
Lavantage donc de lassembleur est de gnrer des programmes efficaces et
rapides ( l'excution) par contre ses inconvnients : dveloppement et mise au point
long.

II / Le fichier source (code source) :


Comme tout programme, un programme crit en assembleur (programme
source) comprend des dfinitions, des donnes et des instructions, qui
scrivent chacune sur une ligne de texte.
Les donnes sont dclares par des directives, mots clefs spciaux que comprend
lassembleur (donc ils sont destins lassembleur. Les instructions (sont
destines au microprocesseur)
II 1 / Les instructions :

La syntaxe des instruction est comme suit :


{Label :} Mnmonique {oprande} { ; commentaire}
- Le champ oprande est un champ optionnel selon linstruction (parfois
linstruction ncessite une oprande et parfois non).
- Le champ commentaire : champ sans signification syntaxique et smantique
pour lassembleur , il est optionnel
mais trs intressant lorsque on
programme en assembleur, en effet les instructions en assembleur sont des
instructions lmentaires donc dans un programme le nombre dinstructions et assez
lev (par exemple pour utiliser des fonctions tels que COS ou SIN il faut
raliser a en utilisant des oprations arithmtiques et logiques de base) donc
contrairement au langage volu de programmation dans les programmes
source on va trouver plus dinstructions. Ce qui va rendre la comprhension des
programmes assez dlicate et difficile. Pour cette raison lorsquon programme en
assembleur il vaut mieux mettre des commentaires pour que le programme soit
lisible pour les utilisateurs.
- Le champ Label (tiquette) est destin pour marquer une ligne qui sera la cible
dune instruction de saut ou de branchement. Une label peut tre forme par 31
caractre alphanumrique ({A.. Z} {a.. z} {0.. 9} {.?@_$}) au maximum .Les noms des

registres ainsi que la reprsentation mnmonique des instructions et les directives ne


peuvent tre utilises comme Label. Le champ Label doit se terminer par :
et ne peut commencer par un chiffre. De mme il ny a pas de distinction
entre minuscules et majuscules.
Exemple :
ET1 : MOV AX , 500H ; mettre la valeur 500 dans le registre AX
II-2 / Les directives :

Une directive est une information que le programmeur fournit au compilateur. Elle
nest pas transforme en une instruction en langage machine. Les directives sont
des dclarations qui vont guider lassembleur.
Une directive est utilise par exemple pour crer de l'espace mmoire pour des
variables, pour dfinir des constantes, etc
Pour dclarer une directive il faut utiliser la syntaxe suivante :
{Nom} Directive {oprande} { ; commentaire}

Le champ oprande dpend de la directive

Le champ commentaire a les mmes proprits vues dans le paragraphe


prcdent.

Le champ Nom indique le nom des variables : cest un champ optionnel (selon
la directive).

II 3 /Exemple de directives :
III- 3 1 / Les directives de donnes :
III 3- 1 1 / EQU :

Syntaxe :

Nom EQU Expression

Exemples :
VAL
ET1

EQU
EQU

50
; assigne la valeur 50 au nom VAL
VAL* 5 + 1 ; assigne une expression calculer a VAL

III 3- 1 2 / DB/DW/DD/DF/DP/DQ/DT:

Ces directives sont utilises pour dclarer les variables : Lassembleur attribue
chaque variable une adresse. Dans le programme, on repre les variables grce
leurs noms. Les noms des variables sont composs d'une suite de 31 caractres au
maximum, commenant obligatoirement par une lettre. Le nom peut comporter des
majuscules, des minuscules, des chiffres, plus les caractres @, et _. Lors de la
dclaration d'une variable, on peut lui affecter une valeur initiale.

a / DB (Define byte): dfinit une variable de 8 bits : c a d elle rserve un espace


mmoire dun octet : donc les valeurs quon peut stocker pour cette directive sont
comprises entre 0 et 255 ( pour les nombres non signs ) et de -128 jusqu' 127 pour
les nombres signs .
Syntaxe : Nom DB Expression
Exemple :
Vil
Tab

DB 12H ; Dfinit une variable (un octet) de valeur Initiale 12.


DB 18H, 15H, 13H ; dfinit un tableau de 3 cases
;(3 octet) Qui dmarre partir de ladresse TAB.
Mess DB ISET ; dfinit aussi un tableau mais les valeurs de chaque case
; nest autre que le code ascii de chaque lettre.
Name DB ? ; dfinit une variable 8 bits de valeur initiale quelconque.

b / DW ( define word) : dfinit une variable de 16 bits : c a d elle rserve un espace


mmoire dun mot : donc les valeurs quon peut stocker pour cette directive sont
comprises entre 0 et 65535 ( pour les nombres non signs ) et de -32768 jusqu'
32767 pour les nombres signs .
Syntaxe : Nom DW Expression
Exemple :
TT1 DW
500H ; rserve deux cases mmoire (un mot) a partir de
ladresse TT1.
TAB1 DW
10H,11H,14H ; rserve u tableau de 6 cases chaque valeur sera
mise sur deux cases
YY
DW
?
; rserve un mot dans la mmoire de valeur initial
quelconque.

c / DD : (Define Double) : rserve un espace mmoire de 32 bits ( 4 cases


mmoire ou 4 octets ) :
Syntaxe : nom

DD expression

Exemple :
ff DD

15500000H

e/ Directive dup
Lorsque l'on veut dclarer un tableau de n cases, toutes initialises la mme
valeur, on utilise la directive dup:
tab DB 100 dup (15) ; 100 octets valant 15
y DW 10 dup (?) ; 10 mots de 16 bits non initialises

f/ Les direcitive Word PTR et Byte PTR :


Dans certains cas, ladressage indirect est ambigu. Par exemple, si lon
crit :
MOV [BX], 0 ;

range 0 a ladresse spcifie par BX

Lassembleur ne sait pas si linstruction concerne 1, 2 ou 4 octets Conscutifs. Afin


de lever lambigut, on doit utiliser une directive spcifiant la taille de la donne
transfrer :
MOV byte ptr [BX], val ; concerne 1 octet
MOV word ptr [BX], val ; concerne 1 mot de 2 octets

IV / Structure dun programme source :

Les directives de procdure :


Dclaration dune procdure
Lassembleur possde quelques directives facilitant la dclaration de
procdures. On dclare une procdure dans le segment dinstruction comme suit :
Calcul
Calcul

PROC near
...
RET
ENDP

; procedure nomm Calcul


; instructions
; dernire instruction
; fin de la procdure

Le mot clef PROC commence la dfinition dune procdure, near indiquant quil sagit
dune procdure situe dans le mme segment dinstructions que le programme
appelant.
Lappel scrit simplement : CALL Calcul

VI / Les modes d'adressage du 8086:


Les instructions et leurs oprandes (paramtres) sont stockes en mmoire
principale. La taille totale dune instruction (nombre de bits ncessaires pour la
reprsenter en mmoire) dpend du type dinstruction et aussi du type doprande.
Chaque instruction est toujours code sur un nombre entier doctets, afin de faciliter
son dcodage par le processeur.
Une instruction est compose de deux champs :
le code opration, qui indique au processeur quelle instruction raliser.

le champ oprande qui contient la donne, ou la rfrence une donne en


mmoire (son adresse).

Les faons de dsigner les oprandes constituent


les
"modes
d'adressage". Selon la manire dont loprande (la donne) est spcifi, cest dire
selon le mode dadressage de la donne, une instruction sera code par 1, 2, 3 ou 4
octets.
Le microprocesseur 8086possde 7 modes d'adressage :
- Mode d'adressage registre.
- Mode d'adressage immdiat.
- Mode d'adressage direct.
- Mode d'adressage registre indirect.
- Mode d'adressage relatif une base.
- Mode d'adressage direct indexe.
- Mode d'adressage indexe.
VI -1 / Mode dadressage registre :

Ce mode dadressage concerne tout transfert ou toute opration, entre deux


registres de mme taille.
Dans ce mode loprande sera stocke dans un registre interne au microprocesseur.
Exemple :
Mov AX, BX ; cela signifie que loprande stocker dans le registre BX sera
transfr vers le registre AX. Quand on utilise ladressage registre, le
microprocesseur effectue toutes les oprations dune faon interne. Donc dans ce
mode il ny a pas dchange avec la mmoire, ce qui augmente la vitesse de
traitement de loprande.

IV -2 / Mode dadressage immdiat :

Dans ce mode dadressage loprande apparat dans linstruction elle- mme,


exemple :
MOV
AX,500H ; cela signifie que la valeur 500H sera stocke immdiatement
dans le registre AX

Remarque :
Pour les instructions telles que :
MOV

AX,-500H ; le signe sera propager dans


;le registre jusqu' remplissage de ce dernier.

Exemple dans notre cas MOV AX,-500H donne AX =1111101100000000B MOV BL,20H donne BL = 11100000B
VI -3 / Mode dadressage direct :

Dans ce mode on spcifie directement ladresse de loprande dans linstruction


.exemple :
MOV AX,adr

La valeur adr est une constante (un dplacement) qui doit tre ajout au contenu du
registre DS pour former ladresse physique de 20 bits.

Remarque :
En gnral le dplacement est ajout par dfaut avec le registre segment DS
pour former ladresse physique de 20 bits, mais il faut signaler
quon peut utiliser ce mode dadressage avec dautres registres segment tel
que ES par exemple , seule la syntaxe en mnmonique de linstruction change et
devient :
MOV

AX, ES : adr

VI -4 / Mode dadressage registre indirect :

Dans ce mode dadressage ladresse de loprande est stocke dans un registre quil
faut bien videmment le charger au pralable par la bonne adresse. Ladresse de
loprande sera stocke dans un registre de base (BX ou BP) ou un indexe (SI ou
DI).

Exemple :
MOV
MOV

BX,offset adr
AX,[BX]

Le contenu de la case mmoire dont ladresse se trouve dans le registre BX


(c.a.d : Adr) est mis dans le registre AX
Remarque:
Le symbole [ ] design ladressage indirect.

VI - 5 / Mode d'adressage relatif une base :

Dans ce mode dadressage Le dplacement est dtermin par soi, le contenu de BX,
soit le contenu de BP, auquel est ventuellement ajout un dcalage sur 8 ou 16 bits
sign. DS et SS sont pris par dfaut.
Exemple :
MOV AX,[BX]+2

Cela signifie que dans le registre AX on va mettre le contenu de la case mmoire


pointe par BX+2

Remarque :
Les syntaxes suivantes sont identiques :
MOV AX,[BX+2] MOV AX,[BX]+2
MOV AX,2[BX]

VI - 6 / Mode d'adressage direct indexe :

Dans ce mode dadressage Le dplacement est dtermin par soi, le contenu de SI,
soit le contenu de DI, auquel est ventuellement ajout un dcalage sur 8 ou 16 bits
sign. DS est pris par dfaut.
Exemple :
MOV DI,2
MOV AL,adr[DI]

VI - 7 / Mode d'adressage base indexe avec dplacement :

Dans ce mode dadressage le dplacement est dtermin par la somme du contenu


du registre BX ou BP et dun des registres dindex SI ou DI, auquel est
ventuellement ajout un dcalage sur 8 ou 16 bits sign. DS et SS sont pris par
dfaut.
Exemple :
MOV AX,[BX][SI]

Cela signifie que dans le registre AX on va charger le contenu de la case mmoire


pointer par BX+SI
De mme dans ce mode on trouve aussi :
MOV AX,[BX][SI+5]

Cela signifie que dans le registre AX on va mtre le contenu de la case mmoire


pointer BX+SI+5
MOV SI,20
MOV BX,1100
MOV AX,[BX][SI+5]

Remarque :
Les syntaxes suivantes ont la mme quivalence :
MOV AX,[BX][DI+4] MOV AX,[BX+DI+4] MOV AX,[BX+4+DI] MOV AX,[BX+4][DI]

LE JEU DINSTRUCTIONS DU 8086/8088


I / introduction :
On peut diviser les instructions du 8086/88 en 6 groupes comme suit :

Instructions de transfert de donnes.

Instructions arithmtiques.

Instructions de bits (logiques).

Instructions de sauts de programme.

Instructions de chane de caractres.

Instructions de contrle de processus.

Instructions dinterruptions.

II / Les instructions de transfert de donnes :


Ils sont diviss en 4 sous- groupes comme le montre le tableau suivant :

II 1 / Les instructions dusage gnral :


II 1 1 / MOV :

Elle permet de transfrer les donnes (un octet ou un mot) dun registre un
autre registre ou dun registre une case mmoire, sa syntaxe est comme suit :
Exemples :
MOV destination,
MOV
AX, BX
16 Bits
MOV
AH, CL
bits
MOV
AX, Val1
MOV
Val2, AL
Dadresse Val2

source
; Transfert dun registre de 16 bits vers un registre de
;

Transfert dun registre de 8 bits vers un registre de 8

; Transfert du contenu dune case mmoire 16 bits vers AX


; Transfert du contenu du AL vers une case mmoire

Remarques :

MOV

Il est strictement interdit de transfrer le contenu dune case mmoire vers une
autre case mmoire comme suit
Val1, Val2

Pour remdier se problme on va effectuer cette opration sur deux tapes :


MOV AL, Val2
MOV Val1, AL

MOV

On na pas le droit aussi de transfrer un registre segment vers un autre registre


segment sans passer par un autre registre :
DS, ES

On va passer comme la premire instruction :


MOV
MOV

AX, ES
DS, DS

Le CS nest jamais utilis comme registre destination.

II 1 2 / PUSH :
Elle permet dempiler les registres du CPU sur le haut de la pile
Syntaxe : PUSH

Exemple :

SOURCE

II 1 3 / POP :
Elle permet de dpiler les registres du CPU sur le haut de la pile
Syntaxe : POP

Exemple :

destination

II 1 4 / PUSHA :
Cette instruction permet dempiler la totalit des registres internes du
microprocesseur sur la pile.
II 1 5 / POPA :
Cette instruction permet de dpiler la totalit des registres internes du
microprocesseur sur la pile.
II 1 6 / XCHG :
Elle permet de commuter la source avec la destination comme suit :

II 1 7 / XLAT :
Cette instruction est utilise pour convertir des donnes dun code un autre, en
effet elle permet de placer dans laccumulateur AL le contenu de la case mmoire
adresse en adressage base+dcalage (8 bits), la base tant le registre BX et le
dcalage tant AL lui mme dans le segment DS
(AL)<--------[ (BX) + (AL) ]

Syntaxe : XLAT tab_source


Exemple :

conversion du code binaire 4 bits en un digit hexa cod en ASCII


Tab db
0123456789ABCDEF
MOV AL,1110B
; chargement de la valeur convertir (07) MOV BX,
OFFSET TAB
; point sur le tableau

XLAT

; Al est charg par le code ASCII de E

II 2 / les instructions dentres sorties :


II 2 1 / IN / OUT:

Elle permet de rcuprer des donnes dun port (donc de la priphrie) ou restituer
des donnes un port, dans les deux cas sil sagit denvoyer ou de recevoir un octet
on utilise laccumulateur AL, sil sagit denvoyer ou de recevoir un mot on utilise
laccumulateur AX.
Syntaxe :
IN ACCUMULATEUR, DX
OUT DX, ACCUMULATEUR

Remarque :

DX : contient ladresse du port.


ACCUMULATEUR : contient la donne ( recevoir ou emmtre).
II 3 / Les instructions de transfert dadresses :
II 3 1 / LEA (Load Effective Address):

Elle transfert ladresse offset (dcalage) dune oprande mmoire dans un registre
de 16 bits (pointeur ou index). Cette commande a le mme rle que linstruction
MOV avec offset mais elle est plus puissante car on peut utiliser avec elle
toute technique dadressage.
Exemple :

LEA BX, TAB_VAL (cest quivalent MOV BX, offset TAB_VAL)


II 3 2 / LDS / LES :

Cette instruction permet de charger le segment et loffset dune adresse


Exemple :

Au lieu de faire :
MOV
MOV
MOV

BX, offset tab_val


AX , Seg tab_val
DS , AX

On remplace ces trois instructions par une seule :


LDS BX , tab_val ;elle
charge
automatiquement loffset de tab_val dans
le registre BX
;et le segment dans le registre DS .

Remarque :

Pour linstruction LES : le segment est ES.

II 4 / Les instructions dindicateur :


II 4 1 / LAHF / SAHF :

LAHF : Load AH from Flags : place loctet de poids faible du registre dtat (FLAGS)
dans le registre AH comme suit :

SAHF : Store AH into Flags : Place le contenu de AH dans loctet de poids faible du
registre dtat (FLAGS).
II 4 2 / PUSHF / POPF:

PUSHF : Permet dempiler la totalit du registre dtat (FLAGS)


POPF : Permet de dpiler le registre dtat (FLAGS).

III / Instructions arithmtiques :


Les instructions arithmtiques peuvent manipuler quatre types de nombres :

Les nombres binaires non signs

Les nombres binaires signs.

Les nombres dcimaux cods binaires (DCB), non signs.

Les nombres DCB non condenss, non signs.

Les instructions arithmtiques sont divises en quatre sous-groupes comme le


montre le tableau suivant :

III 1 / Addition :
III 1 1 / ADD: (Addition)
Syntaxe :

ADD

Destination, source

Elle permet dadditionner le contenu de la source (octet ou un mot) avec celui de la


destination le rsultat est mis dans la destination
Destination <---------- Destination

source

Exemples :
ADD AX, BX

; AX = AX + BX (addition sur 16 bits) ADD AL,BH


; AL = AL + BH (addition sur 8 bits )
ADD AL, [SI] ; AL = AL + le contenu de la case mmoire
; point par SI
ADD [DI], AL ; le contenu de la case mmoire point par DI
; Est additionne avec AL, le rsultat est mis
; dans la case mmoire point par DI

Remarques :

Ici on a presque les mmes restrictions de linstruction MOV c.a.d on na pas le droit
dadditionner deux cases mmoires sans utiliser un registre de donnes.

Exemples :
ADD Tab1 , Tab2

sera remplac par :


MOV AX , Tab2
ADD Tab1 , AX

De mme une valeur immdiate ne peut tre une destination.

III 1 2 / ADC : (Addition avec retenue)


Syntaxe :

ADC

Destination, source

Elle permet dadditionner le contenu de la source (octet ou un mot) avec celui de la


destination et la retenue (CF) le rsultat est mis dans la destination
Destination

<------------

Destination

source + retenue

Exemples :
ADC
ADC
ADC
ADC

AX,BX
AL,BH
AL,[SI]
[DI],AL

;
;
;
;
;
;

AX = AX + BX + CF(addition sur 16 bits )


AL = AL + BH + CF(addition sur 8 bits )
AL = AL + le contenu de la case mmoire point par SI + CF
le contenu de la case mmoire point par DI
est additionn avec AL + CF , le rsultat est
mis dans la case mmoire point par DI

Remarque :

Les restrictions de linstruction ADD sont valables pour linstruction ADC.


III 1 3 / INC : (Incrmentation)
Syntaxe :

INC

Destination

Elle permet dincrmenter le contenu de la destination


Destination <----------

Destination

Exemples :
INC AX
; AX = AX + 1 (incrmentation sur 16 bits).
INC AL
; AL = AL +1 (incrmentation sur 8 bits).
INC [SI]
; [SI] = [SI] + 1 le contenu de la case mmoire point
sera incrmenter

par SI

Remarque :

On ne peut pas incrmenter une valeur immdiate.


III 1 4 / AAA / DAA : ( ASCII / DECIMAL Adjust for Addition )

Laddition de deux nombres BCD gnre parfois un rsultat qui nest pas un nombre
en BCD dou il faut faire des corrections sur ces nombres pour avoir un rsultat

cohrent. Cette instruction examine le quarte bas de AL et vrifie sil est conforme ou
non :
-

Si oui (elle met AF et CF zro pour information) efface la quarter haut de AL

Si non :

Elle ajoute 6 AL

Ajoute 1 AH

Efface le quarter haut de AL

Met AF et CF 1 (pour information)

Exemples : on veut faire laddition en BCD de 73 + 88

On remarque que ni 1111 ni 1011 est un nombre BCD donc on va ajouter 6


au premier quarte dou lopration devient :

Loctet le plus haut :

dou les rsultat 163

III 2 / Soustraction :
III 2 1 / SUB : (Soustraction)
Syntaxe :

SUB

Destination, source

Elle permet de soustraire la destination de la source (octet ou un mot) le rsultat est


mis dans la destination
Destination <---------

Destination

--

source

Exemples :
SUB AX,BX
SUB AL,BH
SUB AL,[SI]
SUB [DI],AL

;
;
;
;
;
;

AX = AX - BX (Soustraction sur 16 bits )


AL = AL - BH ( Soustraction sur 8 bits )
AL = AL - le contenu de la case mmoire point par SI
le contenu de la case mmoire point par DI
est soustraite de AL , le rsultat est mis
dans la case mmoire point par DI

Remarques :

On a les mmes restrictions de linstruction ADD.

III 2 2 / SBB : (Soustraction avec retenue)


Syntaxe :

SBB

Destination, source

Elle permet de soustraire la destination de la source et la retenue (octet ou un


mot) le rsultat est mis dans la destination
Destination <--------

Destination

--

source -- retenue

Exemples :
SBB AX,BX
SBB AL,BH
SBB AL,[SI]

;
;
;
;
;
;
;

SBB [DI],AL

AX = AX BX - CF (Soustraction sur 16 bits )


AL = AL - BH - CF( Soustraction sur 8 bits )
AL = AL - le contenu de la case mmoire
point par SI - CF
le contenu de la case mmoire point par DI
est soustraite avec AL - CF, le rsultat est
mis dans la case mmoire point par DI

Remarques :

On a les mmes restrictions de linstruction ADD.

III 2 3 / DEC : (Dcrmentation)


Syntaxe :

DEC

Destination

Elle permet de dcrmenter le contenu de la destination


Destination

<----------- Destination

Exemples :
DEC AX
DEC AL
DEC [SI]

;
;
;
;

AX = AX - 1 (dcrmentation sur 16 bits).


AL = AL -1 (dcrmentation sur 8 bits).
[SI] = [SI] - 1 le contenu de la case mmoire
point par SI sera dcrmenter

Remarque :

On ne peut pas dcrmenter une valeur immdiate.

III 2 4 / NEG : (Ngatif)


Syntaxe :

NEG

Destination

Elle soustrait loprande destination (octet ou mot) de 0 le rsultat est stocker


dans la destination, donc avec cette opration on ralise le complment deux dun
nombre
Destination

<----------- 0 - Destination

Exemples :
NEC AX
NEC AL
NEC [SI]

; AX = 0 - AX
; AL = 0 - AL
; [SI] = 0 - [SI]

Remarque :

Les indicateurs affects par cette opration sont : AF, CF, OF, PF, SF, ZF
III 2 5 / CMP : (Comparaison)
Syntaxe :

CMP

Destination

, Source

Elle soustrait la source de la destination , qui peut tre un octet ou un mot , le rsultat
nest pas mis dans la destination , en effet cette instruction touche uniquement les
indicateurs pour tre tester avec une autre instruction ultrieure de saut
conditionnel
Les indicateurs susceptibles dtre touch sont : AF, CF, OF, PF, SF, ZF
Donc cette instruction va nous permettre de comparer deux nombres comme le
montre le tableau suivant :

III 2 6 / AAS / DAS: ( ASCII / DECIMAL Adjust for Substraction )

Elle est identique linstruction AAA/DAA mais lajustement se fait en BCD pour la
soustraction.
III 3 / La multiplication :
III 3 1 / MUL : (Multiplication pour les nombres non signs)

MUL effectue une multiplication non signe de l oprande source avec


laccumulateur :
Syntaxe : MUL

Source

-Si la source est un octet alors elle sera multiplie par laccumulateur AL le rsultat
sur 16 bits sera stock dans le registre AX.

Si la source est un mot alors elle sera multiplie avec laccumulateur AX le


rsultat de 32 bits sera stock dans la paire des registres AX et DX

Remarque :

Cette multiplication traite les donnes en tant que nombres non signs
Donc on aura :
(AX)
(AX)(DX)

<------------<------------

(AL) X Source (octet)


(AX) X Source (mots)

En conclusion :

III 3 2 / IMUL : (Multiplication pour les nombres signs)

MUL effectue une multiplication signe de l oprande source avec laccumulateur :


Syntaxe :

IMUL

Source

Si la source est un octet alors elle sera multiplieepar laccumulateur

AL le rsultat sur 16 bits sera stock dans le registre AX .

Si la source est un mot alors elle sera multipli avec laccumulateur AX le


rsultat de 32 bits sera stock dans la paire des registres AX et DX

Remarque :

Cette multiplication traite les donnes en tant que nombres signs


III 3 3 / AAM: (ASCII Adjust for Multiplication)

Comme AAA et AAS cette instruction va nous permettre de corriger le rsultat dune
multiplication de deux nombres en BCD, pour corriger le rsultat de linstruction AAM
divise AL par 10.
Exemple :
MOV AL , 6
MOV DL , 8
MUL DL
AAM

Si on dcortique cette instruction on aura :

III 4 / La division :
III 4 1 / DIV : (Division des nombres non signs)
Syntaxe :

DIV

Source

Elle effectue une division non signe de laccumulateur par loprande source :
Exemples :

Si loprande est un octet : alors on rcupre le quotient dans le registre AL et le


reste dans le registre AH.

Si loprande est un mot : alors on rcupre le quotient dans le registre AX et le reste


dans le registre DX

A/
MOV
MOV
MOV
DIV

AH,00h
AL,33H
DL,25H
DL
; Cela implique que AH=

et

AL =

B/
MOV AX,500H
MOV CX,200H
DIV CX
;Cela implique que

AX=

et

AL =

III 4 2 / IDIV : (Division des nombres signs )


Syntaxe :

IDIV

Source

Elle effectue une division signe de laccumulateur par loprande source :

Si loprande est un octet : alors on rcupre le quotient dans le registre AL et le


reste dans le registre AH.

Si loprande est un mot : alors on rcupre le quotient dans le registre AX et le reste


dans le registre DX

Exemples:

A/
MOV AH,00h
MOV AL,-33H
MOV DL,25H
IDIV DL ;

Cela implique que AH=

et

AL =

Cela implique que AX=

et

AL =

B/
MOV AX,-500H
MOV CX,200H
IDIV CX
;

III 4 3 / AAD : (ASCII Adjust for Division )

Pour corriger le rsultat elle va multiplier le contenu de AH par 10 et lajoute celui


de AL
Remarque :

Pour cette instruction il faut faire lajustement avant linstruction de division.


III 4 4 / CBW (convert byte to word)

Cette instruction permet de doubler la taille de loprande sign


Octet ------------>

Mots

Remarque :

CBW reproduit le bit 7 (bits de signe) de AL dans AH jusqu' remplissage de ce


dernier.
Exemple :
MOV AL, +96
CBW

; AL=0110 0000
; AH=0000 0000 et AL=0110 0000

III 4 5 / CWD (convert Word to Double)

Cette instruction permet de doubler la taille de loprande sign


Word

-------- >

Double

Remarque :

CWD reproduit le bit 15 (bits de signe) de AX dans DX jusqu' remplissage de ce


dernier.

Exemple :
MOV
CWD

AX, +260

; AX=0000 0001 0000 0100


; DX=0000H, AX=0104H

IV / Les instructions logiques ( de bits ) :


Ils sont diviss en trois sous-groupes comme le montre le tableau suivant :

IV 1 / Les instructions logiques :


IV 1 1 / NOT : (Ngation)

Elle ralise la complmentation 1 dun nombre


Syntaxe :

NOT

Destination

Exemple :
MOV AX, 500
NOT AX

; AX = 0000 0101 0000 0000


; AX = 1111 1010 1111 1111

IV 1 2 / AND : ( Et logique )
Syntaxe :

AND

Destination, source

Elle permet de faire un ET logique entre la destination et la source (octet ou un mot)


le rsultat est mis dans la destination
Destination

<----------

Destination

source

Exemples :
MOV AX , 503H
AND AX , 0201H
AND AX,BX
AND AL,BH
AND AL,[SI]

;
;
;
;
;
;
;
;
;
;
;

AND [DI],AL

AX = 0000 0101 0000 0011


0000 0101 0000 0011
AND 0000 0010 0000 0001
= 0000 0000 0000 0001
AX = AX . BX (Et logique entre AX et BX)
AL = AL . BH (ET logique sur 8 bits)
AL = AL AND le contenu de la case mmoire
point par SI
ET logique entre la case mmoire point par
DI et AL , le rsultat est mis dans la case
mmoire point par DI

IV 1 3 / OR : (OU logique )
Syntaxe :

OR

Destination, source

Elle permet de faire un OU logique entre la destination et la source (octet ou un mot)


le rsultat est mis dans la destination
Destination

<----------- Destination

source

Exemples :
MOV AX , 503H
OR AX , 0201H

;
;
;
;
;
;
;
;
;
;
;

OR AX,BX
OR AL,BH
OR AL,[SI]
OR [DI],AL

AX = 0000 0101 0000 0011


0000 0101 0000 0011
OR
0000 0010 0000 0001
=
0000 0111 0000 0011
AX = AX + BX ( OU logique entre AX et BX )
AL = AL + BH ( OU logique sur 8 bits )
AL = AL OU le contenu de la case mmoire
point par SI
OR logique entre la case mmoire point par
DI et AL, le rsultat est mis dans la case
mmoire point par DI

IV 1 4 / XOR : ( OU exclusif )
Syntaxe :

XOR

Destination, source

Elle permet de faire un OU exclusif logique entre la destination et la source (octet ou


un mot) le rsultat est mis dans la destination
Destination

<------------ Destination

source

Exemples :
MOV AX , 503H
XOR AX , 0201H
XOR AX,BX
XOR AL,BH
XOR AL,[SI]
XOR [DI],AL

;
;
;
;
;
;
;
;
;
;
;

AX = 0000 0101 0000 0011


0000 0101 0000 0011
XOR
0000 0010 0000 0001
=
0000 0011 0000 0010
AX = AX + BX (OU exclusif entre AX et BX )
AL = AL + BH ( OU exclusif sur 8 bits )
AL = AL OU exclusif le contenu de la case
Mmoire point par SI
XOR logique entre la case mmoire point par
DI et AL, le rsultat est mis dans la case
mmoire point par DI

IV 1 5 / TEST :
Syntaxe :

TEST

Destination, source

Elle permet de faire un ET logique entre la destination et la source (octet ou un mot)


mais la destination ne sera pas touche en effet cette instruction ne touche que les
indicateurs.
Exemples :
MOV AX, 503H
TEST AX, 0201H

; AX = 0000 0101 0000 0011


; 0000 0101 0000 0011

Elle va effectuer un ET logique entre le premier nombre et le second sans toucher les
deux mais elle va affecter uniquement les indicateurs (Flags)
IV 2 / Les instructions de dcalages :

SHL : dcalage logique gauche :

SHR : dcalage logique droite :

SAL : dcalage arithmtique gauche :

SAR : dcalage arithmtique gauche :

IV 3 / Les instructions de rotations :

ROL : Rotation gauche :

RCL : Rotation a travers la retenue gauche :

ROR : Rotation droite :

RCR : Rotation travers la retenue droite :

Syntaxe des instructions de rotation et de dcalage :

ROR

destination, compteur

Exemple :
ROR AX,1
ROL AL,1

Si on veut faire quatre rotations de suite on a deux solutions :


ROR
ROR
ROR
ROR

AL,1
AL,1
AL,1
AL,1

Ou encore :
MOV CL,4
ROR AL,CL

Remarque :

Les instructions de rotations et de dcalages logiques ne tiennent pas compte du bit


de signe donc elles travaillent avec les nombres non signs.
Les instructions de rotations et de dcalages arithmtiques prservent le bit de signe
donc elles sont rserves aux nombres signs.

V / Instructions de sauts de programme :


Elles permettent de faire des sauts dans lexcution dun programme (rupture de
squence)
Remarque :

Ces instructions naffectent pas les Flags. Dans cette catgorie on trouve toutes les
instructions de branchement, de boucle et dinterruption aprs un branchement, le
tableau suivant donne ces instructions :

V-1 / Branchement inconditionnel


V-1-1 / CALL : notion de procdure :

La notion de procdure en assembleur correspond celle de fonction en langage C,


ou de sous-programme dans dautres langages.

La procdure est nomme calcul. Aprs linstruction B, le processeur passe


linstruction C de la procdure, puis continue jusqu rencontrer RET et revient
linstruction D.
Une procdure est une suite dinstructions effectuant une action prcise, qui sont
regroupes par commodit et pour viter davoir les crire plusieurs reprises
dans le programme.
Les procdures sont repres par ladresse de leur premire instruction, laquelle
on associe une tiquette en assembleur.
Lexcution dune procdure est dclenche par un programme appelant. Une
procdure peut elle-mme appeler une autre procdure, et ainsi de suite.
Instructions CALL et RET
Lappel dune procdure est effectu par linstruction CALL.
CALL adresse_debut_procedure
Ladresse est sur 16 bits, la procdure est donc dans le mme segment
dinstructions. CALL est une nouvelle instruction de branchement
inconditionnel. La fin dune procdure est marque par linstruction RET :
V-1-2 / RET :

RET ne prend pas dargument ; le processeur passe linstruction place


immdiatement aprs le CALL.
RET est aussi une instruction de branchement : le registre IP est modifi pour revenir
la valeur quil avait avant lappel par CALL. Comment le processeur retrouve-t-il
cette valeur ? Le problme est compliqu par le fait que lon peut avoir un nombre
quelconque dappels imbriqus, comme sur la figure suivante :

Ladresse de retour, utilise par RET, est en fait sauvegarde sur la pile par
linstruction CALL. Lorsque le processeur excute linstruction RET, il dpile ladresse
sur la pile (comme POP), et la range dans IP.
Linstruction CALL effectue donc les oprations :

Empiler la valeur de IP. A ce moment, IP pointe sur linstruction qui suit le CALL.

Placer dans IP ladresse de la premire instruction de la procdure (donne en


argument).

Et linstruction RET :

Dpiler une valeur et la ranger dans IP.

Remarque 1 :

Si la procdure appartient au mme segment que le programme principal elle


est dite de type NEAR sinon elle est dite de type FAR, la diffrence entre eux cest
que dans le premier cas le processeur doit empiler une seule valeur dans la pile cest
le registre IP mais dans le deuxime cas il faut empiler le registre IP ainsi que le
registre segment CS et bien sur il les dpiler pendant le retour de la procdure.
Remarque 2 : Passage de paramtres

En gnral, une procdure effectue un traitement sur des donnes

(paramtres) qui sont fournies par le programme appelant, et produit un rsultat qui
est transmis ce programme. Plusieurs stratgies peuvent tre employes :
1. Passage par registre : les valeurs des paramtres sont contenues dans des
registres du processeur. Cest une mthode simple, mais qui ne convient que si le
nombre de paramtres est petit (il y a peu de registres).
2. Passage par la pile : les valeurs des paramtres sont empiles. La
procdure lit la pile.
Exemple avec passage par registre

On va crire une procdure SOMME qui calcule la somme de 2 nombres naturels


de 16 bits.
Convenons que les entiers sont passs par les registres AX et BX, et que le rsultat
sera plac dans le registre AX.
La procdure scrit alors trs simplement : SOMME PROC NEAR
ADD AX, BX
RET SOMME ENDP

; AX <- AX + BX

et son appel, par exemple pour ajouter 6 la variable Truc :


MOV AX, 6
MOV BX, Truc
CALL SOMME
MOV Truc, AX

Exemple avec passage par la pile


Cette technique met en uvre un nouveau registre, BP (Base Pointer), qui permet
de lire des valeurs sur la pile sans les dpiler ni modifier SP. Le registre BP permet
un mode dadressage indirect spcial, de la forme :
MOV AX, [BP+6]

Cette instruction charge le contenu du mot mmoire dadresse BP+6 dans


AX. Ainsi, on lira le sommet de la pile avec :
MOV BP, SP
MOV AX, [BP]

; BP pointe sur le sommet


; lit sans dpiler

Et le mot suivant avec :


MOV AX, [BP+2]

; 2 car 2 octets par mot de pile.

Lappel de la procdure SOMME2 avec passage par la pile est :


PUSH 6
PUSH Truc
CALL SOMME2

La procdure SOMME2 va lire la pile pour obtenir la valeur des paramtres. Pour
cela, il faut bien comprendre quel est le contenu de la pile aprs le CALL :

Le sommet de la pile contient ladresse de retour (ancienne valeur de IP


empile par CALL). Chaque lment de la pile occupe deux octets. La procdure
SOMME2 scrit donc :
SOMME2 PROC near
MOV BP, SP
MOV AX, [BP+2]
ADD AX, [BP+4]
RET
SOMME2 ENDP

;
;
;
;

AX <- arg1 + arg2


adresse sommet pile
charge argument 1
ajoute argument 2

La valeur de retour est laisse dans AX.


La solution avec passage par la pile parait plus lourde sur cet exemple simple.
Cependant, elle est beaucoup plus souple dans le cas gnral que le passage par
registre. Il est trs facile par exemple dajouter deux paramtres supplmentaires sur
la pile. Une procdure bien crite modifie le moins de registres possible. En gnral,
laccumulateur est utilis pour transmettre le rsultat et est donc modifi. Les autres
registres utiliss par la procdure seront normalement sauvegards sur la pile. Voici
une autre version de SOMME2 qui ne modifie pas la valeur contenue par BP avant
lappel :
SOMME2 PROC near
PUSH BP
MOV BP, SP
MOV AX, [BP+4]
ADD AX, [BP+6]
POP BP
RET
SOMME2 ENDP

;
;
;
;
;
;

AX <- arg1 + arg2


sauvegarde BP
adresse sommet pile
charge argument 1
ajoute argument 2
restaure ancien BP

Noter que les index des arguments (BP+4 et BP+6) sont modifis car on a ajout
une valeur au sommet de la pile.
V-1-3 / JMP : (Saut inconditionnel)

Syntaxe :
JMP cible

Si le JMP est de type NEAR alors IP = IP + Dplacement

Si le JMP est de type FAR alors CS et IP sont remplac par les nouvelles valeurs
obtenues partir de linstruction.
JMP transfert, sans condition, la commande lemplacement de destination.
Loprande Cible peut tre obtenu partir de linstruction elle- mme (JMP direct) ou
partir de la mmoire ou partir dun registre indiqu par linstruction.
V-2 saut conditionnel :
V-2-1 / JC : (Si retenue)

Si CF=1 alors IP = IP + dplacement


V-2-2 / JE/JZ :(Si gal/Si zro)

Si ZF=1 alors IP = IP + dplacement


V-2-3 / JNC :(Si pas de retenue)

Si CF=0 alors IP = IP + dplacement


V-2-4 / JNE/JNZ :(Si non gal / Non zro)
Si ZF=0 alors IP = IP + dplacement
V-2-5 / JNO :(Si pas de dbordement)
Si OF=0 alors IP = IP + dplacement
V-2-6 / JNP/JPO :(Si pas de parit/ Si parit impaire)
Si PF=0 alors IP = IP + dplacement
V-2-7 / JNS :(Si pas de signe)
Si SF=0 alors IP = IP + dplacement
V-2-8 / JO :(Si dbordement)
Si OF=0 alors IP = IP + dplacement
V-2-9 / JP/JPE:(Si parit / Si parit paire)
Si PF=1 alors IP = IP + dplacement
V-2-10 / JS :(Si signe (ngatif))
Si SF=1 alors IP = IP + dplacement

V-3 / Les instructions de boucle :


V-3-1 /LOOP : (boucle) :

Elle dcrmente le contenu de CX de 1.


Si CX est diffrente de zro alors IP = IP + dplacement
Si CX = 0 linstruction suivante est excute.

Lexcution de linstruction MOV BX, AX sera faite aprs lexcution de la boucle 5


fois.
V-3-2 / LOOPE / LOOPZ : (boucle si gale ou si gale zro) : Le registre CX est
dcrmenter de 1 automatiquement
Si CX est diffrent de zro et ZF=1 alors IP = IP + dplacement

V-3-3 / LOOPNE / LOOPNZ : (boucle si gale ou si gale zro) : Le registre CX est


dcrmenter de 1 automatiquement
Si CX est diffrent de zro et ZF=0 alors IP = IP + dplacement
Exemple :

VI / Les instructions de chanes de caractres :


Les instructions de chanes des caractres sont au nombre de 14 comme le montre
le tableau suivant :

Elles permettent de travailler sur des blocs doctets ou de mots allant jusqu' 64
Koctet.
Remarque :

Ces blocs peuvent tre des valeurs numriques ou alphanumriques.

VI -1 / Les prfixes de rptitions :


VI-1-1 / REP :

Ces instructions sont utilises avec les instructions de chanes de caractres pour
assurer la rptition de linstruction si on veut appliquer linstruction sur un ensemble
dinformations.
REP dcrment automatiquement CX est test est ce quil est gal zro ou non. Si
CX = 0 REP sarrt
VI-1-2 / REPE / REPZ :
Pour REPE/REPZ : cest la mme chose que REP c'est--dire elle dcrment
automatiquement le registre CX mais elle peut sortir de la boucle si ZF<>0
VI-1-2 / REPNE / REPNZ :
Pour REPNE/REPNZ : cest la mme chose que REP c'est--dire elle dcrment
automatiquement le registre CX mais elle peut sortir de la boucle si ZF=0
VI-2/ Les instructions MOVE-STRING :
Elle dplace un lment du segment de donnes point par
DS : SI vers le segment Extra point par ES : DI
Remarque :

Si llment transfrer est un octet on utilise : MOVB Si llment transfrer est


un Mot on utilise : MOVW
Mais dans les deux cas on nutilise que doprande.
SI et DI sont ensuite incrments de 1 (si DF=0) ou dcrments de 1 (si DF=1)
dune manire automatique.
Exemple :
Donnee SEGMENT
Mess_Sour db bonjour iset de nabeul
; message source
Donnee ENDS
Extra SEGMENT
Mes_Des db 22 dup (0)
; message destination
Extra ENDS
Code SEGMENT
Assume CS : Code, DS : Donnee, ES : extra
PROG PROC
MOV AX,Donnee MOV DS, AX MOV AX,Extra MOV ES, AX
LEA SI, Mess_Sour
; point le message source
LEA DI, Mess_Des
; point le message destination
MOV CX, 22
; nombre de caractre transfrer
CLD
; incrmentation automatique du SI et DI

REP MOVSB
4C00H

; transfert avec le prfixe REP MOV AX,


; Retour au DOS

INT 21H
PROG ENDP
CODE ENDS
END PROG

VI-3/ Les instructions COMPARE-STRING :

Comparaison de chane : elle soustrait loctet ou mot de destination (point par


DI) de loctet ou mot source (point par SI).CMPS affecte les indicateurs mais
ne change pas les oprandes.
Si CMPS est utilis avec le prfixe de rptition REPE/REPZ, elle est interprte
comme comparer tant que la chane nest pas finie (CX <>0) et que les lments
comparer ne sont pas gaux (ZF=1)
Si CMPS est utilis avec le prfixe de rptition REPNE/REPNZ, elle est interprte
comme comparer tant que la chane nest pas finie (CX <>0) et que les lments
comparer ne sont pas gaux (ZF=0)
Remarque :

On ne peut pas utilis le prfixe REP avec linstruction CMPS car cela revient
comparer uniquement les deux derniers lments des deux chanes.
Exemple :

trouver le premier caractre diffrent entre les deux chanes.


Donnee SEGMENT
Mess_1 db bonjour iset de nabeul Mess_2 db bonsoir iset de nabeul
Donnee ENDS
Code SEGMENT
Assume CS : Code, DS : Donnee
PROG PROC
MOV AX,Donnee
MOV DS, AX
LEA SI, Mess_Sour
; point le message source
LEA DI, Mess_Des
; point le message destination
MO V CX, 22
; nombre de caractre comparer
CLD
; incrmentation automatique du SI et DI
REP CMPSB
; transfert avec le prfixe REP
JCXZ
Tito ; les deux chanes sont identiques
MOV al, [SI-1]
; on met dans AL le caractre
; Diffrent
Tito : MOV AX, 4C00H
; Retour au DOS INT 21H
PROG ENDP
CODE ENDS
END PROG

VI4 / Les instructions SCAN STRING :

Syntaxe :
SCAS chaine_destination
SCASB

SCASW

SCAS soustrait llment de la chane de destination (octet ou mot) adress par DI


dans le segment extra du contenu de AL (un octet) ou de AX (un mot) et agit sur
les indicateurs. Ni la chane destination ni laccumulateur ne change de valeur.
Exemple :

recherche de la lettre a dans une chane. EXTRA SEGMENT


Mess_Des db bonjour iset de nabeul EXTRA ENDS
Code SEGMENT
Assume CS : Code, ES : EXTRA
PROG PROC MOV AX, EXTRA MOV ES, AX
LEA DI, Mess_Des
; point le message destination
MOV CX, 22
; nombre de caractre comparer
CLD
; incrmentation automatique du DI
MOV AL,a
REPNZ SCASB
; transfert avec le prfixe REP
JCXZ
Tito ; les deux chanes sont identiques
Call oui_le_a_existe
; on met dans AL le caractre
; Diffrent
Tito : MOV AX, 4C00H
; Retour au DOS INT 21H
PROG ENDP
CODE ENDS
END PROG

VI-5 / Les instructions LOAD STRING (LODS) et STORE STRING (STOS) :


VI-4-1 / LODS :

Syntaxe :
LODS chaine_source
LODSB
LODSW

LODS transfert llment de chane (octet ou mot) adress par SI au registre AL ou


AX et remet jour SI pour quil pointe vers llment suivant de la chane.
VI-4-2 / STOS :
Syntaxe :
STOS chaine_destination
STOSB
STOSW

STOS transfert un octet ou un mot du registre AL ou AX vers llment de chane


adress par DI et modifie DI pour quil pointe vers lemplacement suivant de la
chane.
Exemple :

transfert dune chane source vers une chane destination en utilisant LODS et
STOS.
Donnee SEGMENT
Mess_Sour db bonjour iset de nabeul

; message source

Donnee ENDS
Extra SEGMENT
Mes_Des db 22 dup (0)
; message destination
Extra ENDS
Code SEGMENT
Assume CS : Code, DS : Donnee, ES : extra
PROG PROC
MOV AX,Donnee
MOV DS, AX
MOV AX,Extra
MOV ES, AX
LEA SI, Mess_Sour
; point le message source
LEA DI, Mess_Des
; point le message destination
MOV CX, 22
; nombre de caractre transfrer
CLD
; incrmentation automatique du SI et DI
DEBUT :
LODSB
; transfert avec le prfixe REP STOSB
LOOP DEBUT
MOV AX, 4C00H
; Retour au DOS INT 21H
PROG ENDP
CODE ENDS
END PROG

VII / Les instructions de commande du processeur :


Ces instructions agissent sur le processeur et ses indicateurs (Flags) ils sont en
nombre de 12 comme le montre le tableau suivant

VII-1 / Indicateurs :
VII-1-1/ STD :
Met CF 1 ; les registres dindexation SI et/ou DI sont alors automatiquement
dcrmenter par les instructions de chane de caractre.

VII-1-2 / STI :
Met IF 1, permettant ainsi au CPU de reconnatre des demandes dinterruption
masquables apparaissant sur la ligne dentre INTR.
VII-2 / Synchronisation :
VII-2-1 / HALT :
Maintient le processeur dans un tat dattente dun RESET ou dune interruption
externe non masquable ou masquable (avec IF=1).
VII-2-2 / WAIT :
Met le CPU en tat dattente tant que sa ligne de TEST nest pas active. En effet
toutes les cinq priodes dhorloge le CPU vrifie est ce que cette entre est active ou
non, si elle est active le processus excute linstruction suivante WAIT.
VII-2-3 / ESC :
Linstruction Escape fournit un mcanisme par lequel des coprocesseurs peuvent
recevoir leurs instructions partir de la suite dinstructions du 8086.
VII-2-4 / LOCK :
Elle utilise dans les systmes Multiprocesseur en effet elle permet le verrouillage du
bus vis--vis des autres processeurs.
VII-3 Sans opration :
VII-3-1 / NOP (No operation) :
Le CPU ne fait rien on peut sen servir pour crer des temporisations.
Exemple :
Tempo : MOV CX, 7FFFH
Temp1: PUSH CX
MOV CX,7FFFH
Temp2: NOP NOP NOP NOP
LOOP Temp2
POP CX
LOOP Temp1
RET

; Effectuer une temporisation


; avec deux boucles imbriqus

LES INTERRUPTIONS
I / Introduction :

Un systme base de microprocesseur peut comporter plusieurs priphriques


tels que : un Ecran, une souris, une imprimante, un disque dure, un CNA
(convertisseur numrique analogique), un CAN etc ..
Pour dialoguer avec ces priphriques le microprocesseur a trois faons de
communiquer avec ces derniers :
- En questionnant de faon continue le priphrique pour vrifier que des donnes
peuvent tre lues ou crites (Polling).
- En linterrompant lorsquun priphrique est prt lire ou crire des donnes
(interruption)
- En tablissant une communication directe entre deux priphriques (DMA :
Direct memory acces).
I-1/ Le polling :

Bien que le polling soit une faon simple daccder un priphrique , le dbit des
donnes dans un priphrique est parfois beaucoup plus lent que la vitesse de
fonctionnement dun processeur , et le polling peut donc tre trs inefficace . On lui
prfre en gnral la mthode par interruptions.
I-2 / Le DMA :

En cas de transfert de donnes de grande quantit entre deux priphriques, il


peut tre plus efficace de laisser communiquer entre eux les deux priphriques
plutt que de solliciter le processeur. Ce type de communication avec les
entres/sorties sappelle gestion de transfert par DMA, Le processeur indique au
contrleur de DMA quels sont les priphriques qui doivent communiquer, le
nombre et ventuellement ladresse des donnes transfrer, puis il initie le
transfert. Le processeur nest pas sollicit durant le transfert, et une interruption
signale au processeur la fin du transfert.
I-3 / Linterruption :

Il arrive frquemment quun priphrique ou un programme ncessite une


intervention du microprocesseur cet effet il est possible de linterrompre
quelques instants, celui-ci va effectuer linstruction demande, est excuter, une fois
quelle rend le travail initial.
Ce mode d'change est principalement bas sur l'initiative du priphrique.
Grce ce mcanisme d'interruption, le dispositif priphrique prend l'initiative de
l'change.
Une interruption est un vnement qui provoque l'arrt du programme en cours et
provoque le branchement du microprocesseur un sous- programme particulier
dit de "traitement de l'interruption".

Remarque 1 : (ordre de priorit)

Lorsque un priphrique reoit des donnes pour le processeur, il envoie au


processeur un signal dinterruption. Si celui-ci peut tre interrompu ( condition
quil ne soit pas en train de communiquer avec un priphrique de plus haute
priorit) , il stoppe la tche en cours , sauve son tat ( ces registres) en mmoire
(la zone pile ) et appelle la routine correspondant au numro dinterruption .
Remarque 2 : (plusieurs interruptions):

Le fonctionnement des priphriques se fait en gnral dune manire asynchrone,


donc plusieurs interruptions peuvent tre dclenches en mme temps, il existe
souvent un contrleur dinterruptions destin grer les conflits entre interruptions

II / Interruption matriel et logiciel :


II 1 / Interruption Matriel :
II-1-1 / Introduction

Une interruption est signale au processeur par un signal lectrique sur une borne
spciale. Lors de la rception de ce signal, le processeur traite linterruption ds la
fin de linstruction quil tait en train dexcuter. Le traitement de linterruption
consiste soit :
lignorer et passer normalement linstruction suivante : cest possible
uniquement pour certaines interruptions, nommes interruptions masquables.
Il est en effet parfois ncessaire de pouvoir ignorer les interruptions pendant
un certains temps, pour effectuer des traitements trs urgents par exemple.
Lorsque le traitement est termin, le processeur dmasque les interruptions et
les prend alors en compte.
- excuter un traitant dinterruption (interrupt handler). Un traitant dinterruption
est un programme qui est appel automatiquement lorsquune interruption
survient. Ladresse de dbut du traitant est donne par la table des vecteurs
dinterruptions (voir paragraphe suivant ) . Lorsque le (programme dinterruption)
traitant a effectu son travail, il excute linstruction spciale IRET qui permet de
reprendre lexcution lendroit o elle avait t interrompue.
II-1-2 / Cas du processeur 8086 :

Le microprocesseur
INTR, NMI, et RESET

8086

possde

trois

lignes

principales dinterruption :

Ces trois entres permettent larrive dune demande (interruption externe) extrieur.
Remarque : Contrleur dinterruptions dans un PC

Lordinateur est reli plusieurs priphriques, mais nous venons de voir quil ny
avait quun seul signal de demande dinterruption, INTR. Le contrleur dinterruptions
est un circuit spcial, extrieur au processeur, dont le rle est de distribuer et de
mettre en attente les demandes dinterruptions provenant des diffrents
priphriques.

Le contrleur dinterruptions (PIC : Programmable Interruption Controler)


La figure prcdente indique les connexions entre le microprocesseur et le
contrleur dinterruptions.
Le contrleur est reli aux interfaces grant les priphriques par les bornes IRQ
(InteRrupt reQuest). Il gre les demandes dinterruption envoyes par les
priphriques, de faon les envoyer une par une au processeur (via INTR). Il est
possible de programmer le contrleur pour affecter des priorits diffrentes chaque
priphrique. Avant denvoyer linterruption suivante, le contrleur attend davoir reu
le signal INTA, indiquant que le processeur a bien trait linterruption en cours.
A / NMI : (No masquable interrupt )
Une interruption est dite non masquable signifie quelle doit toujours tre reconnue
par le microprocesseur ds que le signal lectrique a t dclench.
Remarque :

La reconnaissance de linterruption NMI est gnralement la fin du cycle de


linstruction en cours, or les instructions du 8086 peuvent exiger un temps
dexcution plus ou moins long selon le nombre de cycles machines (comme
linstruction de multiplication) donc le temps de rponse va dpendre de
linstruction en cours. Ce temps est appel temps de prise en charge de
linterruption.
Pendant la demande dune interruption NMI tous les indicateurs sont empils pour
sauvegarder leurs valeurs en cours, puis lindicateur IF (indicateur dautorisation
dinterruption : Interruption Flag) est mis zro (ce qui interdit toute arrive de
demande dinterruption sur la ligne INTR. Ensuite lindicateur TF est mis zro (Trap
Flag : indicateur pas pas), puis le microprocesseur empile les registres CS et IP
dans la pile. Enfin le microprocesseur charge le registre IP avec la valeur 16 bits
qui se trouve ladresse mmoire 00008H dans le vecteur dinterruption (voir figure
suivante), et le registre CS sera ensuite charg avec la valeur de 16 bits situe
ladresse 0000AH, donc le microprocesseur maintenant pointe sur le programme
dinterruption quil va excuter puis revenir son programme principal.
Remarque : (Le vecteur dinterruption)

Nommer aussi table dinterruption, il contient toujours les adresses des


programmes dinterruptions aux quels le microprocesseur doit se brancher. Le
microprocesseur se branche toujours ladresse 4 * n et 4 * n +1 pour chercher le
contenu sur 16 bits du CS Si on demande linterruption INT n.

Droulement dune interruption externe masquable (exemple dans un PC) :


Reprenons les diffrents vnements lis la rception dune interruption
masquable :
1. Un signal INT est mis par un priphrique (ou par linterface grant celui- ci).
2. Le contrleur dinterruptions reoit ce signal sur une de ses bornes IRQi. Ds que
cela est possible (suivant les autres interruptions en attente de traitement), le
contrleur envoie un signal sur sa borne INT.
3. Le microprocesseur prend en compte le signal sur sa borne INTR aprs avoir
achev lexcution de linstruction en cours (ce qui peut prendre quelques

cycles dhorloge). Si lindicateur IF=0, le signal est ignor, sinon, la demande


dinterruption est accepte.
4. Si la demande est accepte, le microprocesseur met sa sortie INTA au niveau 0
pendant 2 cycles dhorloge, pour indiquer au contrleur quil prend en compte sa
demande.
5. En rponse, le contrleur dinterruption place le numro de linterruption associ
la borne IRQi sur le bus de donnes.
6. Le processeur lit le numro de linterruption sur le bus de donnes et lutilise pour
trouver le vecteur dinterruption. Ensuite, tout se passe comme pour un appel
systme cest dire que le processeur :
(a) sauvegarde les indicateurs du registre dtat sur la pile ;
(b) met lindicateur IF 0 (masque les interruptions suivantes) ;
(c) sauvegarde CS et IP sur la pile ;
(d) cherche dans la table des vecteurs dinterruptions ladresse du traitant
dinterruption, quil charge dans CS:IP.
7. La procdure traitant linterruption se droule. Pendant ce temps, les interruptions
sont masques (IF=0). Si le traitement est long, on peut dans certains cas rautoriser les interruptions avec linstruction STI.
8. La procdure se termine par linstruction IRET, qui restaure CS, IP et les
indicateurs partir de la pile, ce qui permet de reprendre le programme qui avait t
interrompu.
II 2 / Interruption logiciel :

Les interruptions logicielles sont semblables aux interruptions matrielles.


L'unique diffrence rside dans le fait que les interruptions logicielles sont
mises par des programmes. Les cinq premires interruptions sont dfinies par Intel.
Les autres interruptions sont dfinies par le DOS et le BIOS. Ces interruptions ont
une fonction dfinie, par exemple la lecture et l'criture sur le disque, l'criture des
donnes l'cran, etc. Contrairement lentre INTR du microprocesseur,
linterruption logicielle ne peut tre ni invalid ni masque.
Exemple dinterruption software :

Fonctions BIOS :
Int 1Ah, Fct 02h Date et heure : Lecture de l'horloge temps rel BIOS (> AT) : Cette
fonction permet de lire l'heure de l'horloge temps rel alimente par batterie. Comme

ce type d'horloge n'existe que sur les AT, seul ce modle de PC soutient cette
fonction.
Entre :
AH

= 02h

Sortie :
Flag Carry =0 : Tout va bien, dans ce cas
CH = Heures
CL = Minutes
DH = Secondes
Flag Carry =1 : La batterie de l'horloge est dcharge

Remarques :
-

Toutes les indications sont fournies en format BCD.

Le contenu des registres BX, SI, DI, BP et des registres de segment


n'est pas modifi par cette fonction. Le contenu de tous les autres registres peut
avoir t modifi.
Fonction DOS :Int 21h, Fct 06h

Entre/sortie directe de caractre :

Cette fonction permet de sortir des caractres sur le priphrique de sortie standard
ou de les lire sur le priphrique d'entre standard. Le caractre reu ou crit
chaque fois n'est pas examin par le systme d'exploitation. Rien de particulier
ne se produit donc lorsqu'un caractre Ctrl-C apparat. Comme l'entre et la sortie
standard peuvent tre rediriges sur d'autres priphriques ou vers un fichier, les
caractres sortis ne doivent pas ncessairement apparatre sur l'cran ni les
caractres lus provenir obligatoirement du clavier. Toutefois, lorsque l'accs se fait
sur un fichier, il est impossible pour le programme d'appel de dtecter si tous les
caractres de ce fichier ont dj t lus ou bien si le support (disquette, disque dur)
sur lequel figure ce fichier est dj plein. Pour l'entre d'un caractre, la fonction
n'attend pas qu'un caractre soit prt mais revient immdiatement au programme
d'appel dans tous les cas.
Entre :
AH = 06h
DL = 0 - 254 : Sortir ce caractre
DL = 255 : Lire un caractre Sortie :
Pour la sortie de caractres : aucune
Pour l'entre de caractres :
Flag Zro =1 : aucun caractre n'est prt
Flag Zro =0 : Le caractre entr figure dans le registre AL

Remarques :

Lorsque des codes tendus sont lus, le code 0 est tout d'abord
renvoy dans le registre AL. La fonction doit tre appele nouveau pour lire le code
tendu lui-mme.
- Le caractre de code ASCII 255 ne peut tre sorti l'aide de cette fonction puisqu'il
est interprt comme d'entre d'un caractre.
- Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre
de flags n'est pas modifi par cette fonction.
Exemple de programme : lecture et affichage dun caractre sur
lcran :
CODE SEGMENT ASSSUME CS :CODE PROG PROC
DEBUT :
MOV AH,06H
; prparer linterruption de lecture dun
MOV DL,255
; caractre
INT 21H
JZ DEBUT
; si le bit ZF = 0 => aucune touche nest
appuye
MOV DL,AL
; afficher le caractre appuyer .
INT 21H
MOV AX,4C00H
; retour au DOS
INT 21H PROG ENDP
CODE ENDS
END PROG

Int 21h, Fct 09h

Sortie d'une chane de caractres

Cette fonction permet de sortir une chane de caractres sur le


priphrique de sortie standard. Comme ce priphrique standard peut tre redirig
sur un autre priphrique ou vers un fichier, il n'y a aucune garantie que la
chane de caractres apparaisse sur l'cran. Si la sortie est redirige sur un fichier, le
programme d'appel n'a aucune possibilit de dtecter si le support (disquette, disque
dur) sur lequel figure le fichier est dj plein, autrement dit s'il est encore
possible d'crire la chane de caractres dans le fichier.
Entre :
AH = 09h
DS = Adresse de segment de la chane de caractres DX
de la chane de caractres
Sortie : Aucune
Exemple : affichage dun message sur lcran :

= Adresse d'offset

DONNEE SEGEMENT
MESSAGE
DB BONJOUR ISET DE NABEUL $,13,10
DONNEE ENDS
CODE SEGMENT
ASSUME
CS : CODE , DS : DONNEE
PROG PROC
MOV AX , DONNEE MOV DS , AX
LEA DX , MESSAGE
; Point le message par DX MOV AH , 09H
INT 21H
; afficher le message
MOV AX,4C00H
; Retour au DOS
INT 21H
PROG ENDP CODE ENDS END PROG

Remarques :

La chane de caractres doit tre stocke dans la mmoire sous forme


d'une squence d'octets correspondant aux codes ASCII des caractres composant
la chane. La fin de la chane de caractres doit tre signale au DOS l'aide d'un
caractre "$" (code ASCII 36).
- Si la chane de caractres contient des codes de commande comme
Backspace, Carriage Return ou Line Feed, ceux-ci seront traits comme tels.
- Seul le contenu du registre AL est modifi par l'appel de cette fonction. Exemple de
programme utilisons les interruptions : affichage de lheure dun PC :
;
***************************************************************************
*****
;
***************************************************************************
*****
;****************** Programme affichage de lheur du PC
*************************
;
***************************************************************************
*****
;
***************************************************************************
*****
code segment assume cs:code
;*********************** programme principal
************************************
prog proc debut: mov ah,02
int 1aH
; interruption qui permet de lire lheur du PC
mov bl,ch
; ch = heure
call affiche
; afficher les heurs
mov bl,cl
; cl=minute
call affiche
; afficher les minutes
mov bl,dh
; dh=seconde
call affiche
; afficher les secondes
prog endp
; fin de la procdure principale
mov dl,13
; retour chariot
mov ah,06
int 21h
jmp debut
affiche proc
; procdure daffichage dun nombre BCD
mov dl,bl

and dl,0f0h
ror dl,1
ror dl,1
ror dl,1
ror dl,1
add dl,30h
mov ah,06
int 21h
mov dl,bl
and dl,0fh
add dl,30h
mov ah,06
int 21h
mov dl,':'
mov ah,06
int 21h ret
affiche endp
code ends
end prog

; masquer pour avoir les dizaines


; faire une rotation

; ajouter 30H pour avoir le code ASCII correct


; du chiffre a afficher

Fonctions Gestionnaire de souris


Int 33h, Fct 00h Rinitialisation du driver de souris Initialise le driver de souris et
enclenche ainsi le test de la souris. Entre :
AX

= 0000h

Sortie :
AX

= FFFFh : dans ce cas, un driver de souris est install

BX

= Nombre de boutons de la Souris ( partir de 1.0)

AX

= 0000h : erreur, aucun driver de souris n'est install

Remarques :

L'appel de cette fonction agit sur toute une srie de paramtres de la souris
qui peuvent tre fixs l'aide des diffrentes fonctions de la souris :
- Le curseur de la souris est plac au centre de l'cran puis cach. Il apparatra
dsormais en mode graphique sous forme d'une flche, alors qu'il sera reprsent
en mode de texte sous forme d'une case de texte en inversion vido. Le curseur de
la souris est systmatiquement affich dans la page 0 de l'cran, indpendamment
du mode. La zone de dplacement slectionne est la totalit de l'cran.
- Les gestionnaires d'vnements installs par un programme. Ils sont
dsactivs.
Int 33h, Fct 01h

Afficher le curseur de la souris sur l'cran

Aprs appel de cette fonction, le curseur de la souris devient visible sur l'cran et suit
dsormais les dplacements de la souris sur l'cran.

Entre :
AX

= 0001h

Sortie :
Aucune
Remarques :

L'appel de cette fonction entrane l'incrmentation d'un compteur interne,


en fonction duquel le curseur de la souris est ou non affich sur l'cran. Si ce
compteur contient la valeur 0, le curseur de la souris sera affich sur l'cran, alors
que la valeur -1 a pour effet de le faire disparatre de l'cran. Lorsque la fonction 00h
(Reset) est appele, ce compteur est tout d'abord fix sur -1, pour prendre ensuite la
valeur 0 lors du premier appel de cette fonction, ce qui se traduit par la rapparition
du curseur sur l'cran.
Int 33h, Fct 03h

Lire la position de la souris et l'tat des boutons de la souris :

L'appel de cette fonction fournit la position actuelle de la souris et l'tat des


diffrents boutons de la souris.
Entre :
AX

= 0003h

Sortie :
BX
Signification

= Etat des boutons de la Souris ( partir de 1.0) Bit

1 = bouton gauche de la souris appuy

1 = bouton droit de la souris appuy

1 = bouton central de la souris appuy

3-15

Aucune (0)

CX
= Position horizontale de la Souris ( partir de 1.0) DX =
Position verticale de la souris
Remarques :

Les ordonnes renvoyes dans les registres CX et DX ne se


rapportent pas l'cran physique mais aux positions en points cran dans l'cran
virtuel de la souris.

Si la souris ne possde que deux boutons, les informations fournies sur le


bouton central sont dpourvues de signification

LINTERFACE PARALLELE LE 8255A


I / Introduction :
Le 8255 est un circuit programmable de 40 broches (voir figure 1) dinterface
dentre/sortie parallle qui a t conu pour travailler avec les microprocesseurs de
la famille INTEL. Il est form par trois ports dentres/sorties, chaque port est
de 8 bits qui peuvent tre programms en entre ou en sortie avec trois modes
diffrents (mode zro, mode un et mode deux).

Remarque :

Le port C est divis en deux port C haut et port C bas


Le schma bloque du 8255A est donn par la figure suivante :

Le schma bloc du 8255 montre bien quil est divis en deux groupes :

Groupe A : form par le port A et le port C haut.

Groupe B : form par le port B et le port C bas.

Le registre de donnes (Data buffer Bus) assure la liaison entre le bus de donnes
extrieur et le registre de controle ainsi que les ports dentres/sorties.
La slection du 8255A se fait par lintermdiaire de la pine CS (qui est en gnral
fournie par une logique de dcodage qui permet la slection du 8255A : voir plus loin
les exemples dapplications)
Le bus dadresse du 8255A est form essentiellement par deux pines (A0et A1) qui
permettent de slectionner les ports ainsi que le registre de contrle comme le
montre le tableau suivant :

Plus en dtail ladressage des diffrents ports en entre sortie se fait selon la table
de vrit suivante :

Le 8255 est connect avec le systme base de microprocesseur comme le


montre la figure suivante :

Interfaage avec le bus et mode de fonctionnement du 8255A

II / Programmation du 8255A :
On peut programmer le 8255A selon trois modes :

Mode 0 : Entre/sortie de base.

Mode 1 : Entre sortie chantillonne.

Mode 2 : Bus bidirectionnel.

Le format ainsi que le choix des modes se fait partir du mot de contrle suivant :

II 1 / Le mode 0 du 8255 :

En mode zro les ports du 8255A peuvent tre programms en entre ou en sortie :
8 bits pour le port A , 8 bits pour le port B et le port C est form de deux quartes ( un
quarte haut et un quarte bas ) , donc il y a 16 combinaisons possibles :

Exemple si on veut configurer le port A en sortie , port B en entre , portc haut entre
et port C bas sortie le mot de commande est 93H
Le programme :
MOV AL, 39H
; Mot de commande
MOV DX , adresse_registre_de_commande
OUT DX,AL
; envoi du mot vers le registre de commande

Remarque :

Les sorties sont mmorises dans des bascules D.

Les entres ne sont pas mmorises.

Sur un RESET, tous les ports sont positionns en mode entres et il faut les
reprogrammer, si ncessaire.

Les bascules du port C peuvent tre mises 1 ou 0 individuellement,


lorsque le bit 7 du mot de commande est gal 0 . Le mot de commande devient
alors :

Pour mettre 1 le PC3 par exemple le mot de commande est : 00000111

Pour mettre 0 le PC3 par exemple le mot de commande est : 00000110

II 1 / Exemple dapplication en mode 0 :


Exemple 1 :

On donne le schma de la figure 1,


A/ on veut crire un programme qui permet de faire clignoter les diodes Led . Jusqu
lappui sur SW0
B / On veut crire un programme qui affiche les chiffres de 0 15 sur les 7
segments.
C / On veut crire un programme qui permet de faire clignoter les diodes paires si on
appuie sur SW0 et les diodes impaires si on appuie sur SW1

On suppose que les adresses des ports est comme suit :


Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H

A /Pour faire clignoter les diodes led il faut envoyer une fois 0FH puis effectuer une
temporisation puis envoyer 00H et effectuer une temporisation voici lorganigramme
qui assure ce fonctionnement :

Le programme est le suivant :


Donnee SEGMENT
PortA EQU
300H
PortC EQU
300H
Reg_com EQU
306H
Mot_com EQU
91H
Masque_SW0 EQU 01H
Diode_allume
EQU 0FH
Diode_etainte EQU
00H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
; pointer le data segment
MOV DS,AX
MOV AL,Mot_com
; configurer les ports en sorties
OUT Reg_com,AL
Debut: MOV AL,Diode_allume
; D3D2D1D0 = FH led allum
OUT PortA,AL
CALL Tempo
; temporisation
MOV AL,Diode_etainte
; D3D2D1D0 = 0H led etainte
OUT PortA,AL
CALL Tempo
; temporisation
IN AL,PortC
; Lecture du portC
AND AL,01H
; verifier sil a appui sur SW0
CMP AL,01H

JNZ Debut
MOV AX,4C00H
INT 21H
Prog endp
Tempo: MOV CX,7FFFH
Temp1: PUSh CX
MOV CX,7FFFH
Temp2: NOP
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET Code
ends
End prog

; Effectuer une temporisation


; avec deux boucles imbriqus

B / Programme qui affiche les chiffres de 0 15 sur le 7 segment : Lorganigramme


du programme est donn par la figure suivante :

Le programme qui ralise cette opration :

Donnee SEGMENT
PortA EQU 300H
PortB EQU 302H
Reg_com EQU 306H
Mot_com EQU 91H
Masque_SW0 EQU 01H
Diode_allume EQU 0FH
Diode_eteinte EQU 00H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
; pointer le data segment
MOV DS,AX
MOV AL,Mot_com
; configurer les ports (A :S )
OUT Reg_com,AL
XOR BX,BX
DEBUT: MOV AX,BX
AAA
; sparer les units et les dizaines
OR AL,AH
OUT portB,al
CALL Tempo
; effectuer une temporisation
INC BX
CMP BX,15
; voir si BX = 15
JNZ DEBUT
MOV AX,4C00H
INT 21H
Prog endp
Tempo : MOV CX,7FFFH
; Effectuer une temporisation
Temp1: PUSh CX
; avec deux boucles imbriqus
MOV CX,7FFFH
Temp2: NOP NOP NOP NOP
LOOP Temp2
POP CX LOOP Temp1
RET
Code ends
End prog

C / Lorganigramme du programme est donn par la figure suivante :

Remarque :

Le battement signifie quon allume la diode puis on lteint une seule fois car dans
notre cas il faut toujours lire les switches car lutilisateur peut changer ltat des
switches tout moment.
Le programme de lapplication est le suivant :
Donnee SEGMENT
PortA EQU 300H
PortC EQU 302H
Reg_com EQU 306H
Mot_com EQU 91H
Masque_SW0 EQU 01H
Diode_allume EQU 0FH
Diode_etainte EQU 00H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
; pointer le data segment
MOV DS,AX
MOV AL,Mot_com
; configurer les ports en sorties
OUT Reg_com,AL
DEBUT: IN AL,PortC
AND AL,03H
CMP AL,01
JZ Diode_paire
; si SW=1 alors battement paire

CMP AL,02
JZ Diode_impaire
; si SW=1 alors battement impaire
JMP DEBUT
Diode_paire : MOV AL,05H
; Battement des diodes paire
OUT PortA,AL
CALL Tempo
; Temporisation
MOV AL,00H
OUT PortA,AL
CALL Tempo
; Temporisation
JMP DEBUT
Diode_impaire : MOV AL,0AH
; Battement des diodes impaire
OUT PortA,AL
CALL Tempo
; Temporisation
MOV AL,00H
OUT PortA,AL
CALL Tempo
; Temporisation
JMP DEBUT
MOV AX,4C00H
INT 21H
Prog endp
Tempo : MOV CX,7FFFH
; Effectuer une temporisation
Temp1: PUSh CX
; avec deux boucles imbriqus
MOV CX,7FFFH
Temp2: NOP
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET
Code ends
End prog

Exemples 2 :

On donne le schma de la figure suivante :

On suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306

Donner lorganigramme ainsi que le programme qui permet de gnrer le signal


suivant :

Lorganigramme qui permet de gnrer le signal prcdant est comme suit :

Donnee SEGMENT
PortA EQU 300H
Reg_com EQU 306H
Mot_com EQU 91H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
; pointer le data segment
MOV DS,AX
MOV AL,Mot_com
; configurer les ports en sorties
OUT Reg_com,AL
DEBUT1: XOR AL,AL
DEBUT2:OUT PORTA,AL
CALL Tempo
; Si on augmente la temporisation
INC AL
; on augmente la pente du signal
CMP AL,0FFH
; et bien sur la priode T
JNZ DEBUT2
JMP DEBUT1
Prog endp
Tempo : MOV CX,7FFFH
; Effectuer une temporisation
Temp1: PUSh CX
; avec deux boucles imbriqus
MOV CX,7FFFH
Temp2: NOP
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET
Code ends
End prog

Exemple 3 :

Pour commander un afficheur LCD 16*2 ( 16 caractres , 2 lignes ) on propose le


schma du montage suivant :

Un LCD est form essentiellement par un bus de donne de 8 bits et un bus de


commande et contrle form par trois pines(E, Rd/Rw, RS) :
E : entre de validation un front descendant sur cette pine provoque la validation de
la donne ou de la commande.
RS : elle permet de distinguer les commandes et les donnes. RS = 0 le bus D0D7 accepte des commandes RS = 1 le bus D0-D7 accepte des donnes
Enfin Rd/Rw : cest pour donner lordre de lecture ou criture sur LCD. Parmis les
commandes on trouve :

Exemple de programme qui affiche le message bonjour iset n sur LCD


Avant de commencer le programme il faut dterminer les mots quil faut envoyer au
portB pour valider une donne ou valider une commande do le tableau suivant :

On suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H

Le programme est comme suit :


Donnee SEGMENT
Message db bonjour iset n
PortB EQU 302H
PortC EQU 304H
Reg_com EQU 306H
Mot_com EQU
80H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee
; pointer le data segment
MOV DS,AX
MOV AL,Mot_com
; configurer les ports en sorties
OUT Reg_com,AL

LEA SI,message
; Pointe le message afficher
MOV CX,14
; on 14 caractre afficher
CALL Init_LCD
; initialisation de lLCD
DEBUT :
MOV AL,[SI]
; programme principal
OUT PortC,AL
; envoie de la donne
CALL Vali_donne
; validation de la donne
INC SI
LOOP DEBUT
Init_LCD : MOV AL,01
; effacer LCD
OUT PortC,AL
CALL Vali_commande
; Validation de leffacement
MOV AL,0EH
; effectuer un Home pour LCD
OUT PortC,AL
CALL Vali_commande
; Valide le HOME
MOV AL,06
; Ecriture vers la droite
OUT PortC,AL
CALL Vali_commande
; valide le mode dcriture.
RET
Vali_commande :
MOV AL,04
; Sous programme validation
OUT PortB,AL
; de la commande
MOV AL,00
OUT PortB,AL
RET
Vali_donne :
MOV AL,05
; Sous programme validation
OUT PortB,AL
; de la donne
MOV AL,01
OUT PortB,AL
RET
MOV AX,4C00H
INT 21H
Prog endp

Exemple 4 : Commande dun moteur Pas Pas

On donne le schma de la figure suivante :

Les diffrentes phases sont les suivantes (en mode avancement par un pas):

Les diffrentes phases sont les suivantes (en mode avancement par demi pas):

La commande des phases du moteur pas pas bipolaire a aimant permanent


est donne par le tableau suivant :

Do le programme par exemple qui fait tourner le moteur pas pas de 90 : On


suppose que les adresses des ports est donner comme suit :

Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H
1 pas = 0.9
A+ est connect avec PA0
B+ est connect avec PA1
A- est connect avec PA2
B- est connect avec PA3

Le programme est comme suit :


Donnee SEGMENT
Phase db 03H, 06H, 0CH, 09H, 03H, 06H, 0CH, 09H
PortA
EQU
300H
Reg_com EQU
306H
Mot_com EQU
80H
Donnee ENDS
Code SEGMENT
Assume CS : code, DS :donnee
Prog Proc
MOV AX,donnee
; pointer le data segment
MOV DS,AX
MOV AL,Mot_com
; configurer les ports en sorties
OUT Reg_com, AL
MOV CX, 100
; 100 * 0.9 = 90
DEBUT1 :
LEA SI, phase
; Pointer sur le tableau des phases
DEBUT2 :
MOV AL,[SI]
OUT portA, AL
; Envoie des diffrentes phases
INC SI
CMP SI,7
JNZ DEBUT2
LOOP DEBUT1
MOV AX, 4C00H
; Retour au DOS INT 21H
Prog endp
Code ENDS
END PROG

II 2 / Le Mode 1 du 8255A :

En mode 1 , les ports A et B sont utiliss en entre ou en sortie gres par les accs
du portC .
Mode 1 : en entre :
En entre les ports A et B sont configurs en entre alors que le PC0, PC1 et Pc2
assure le handshake pour B et PC3, PC4 et Pc5 pour le A (PC6 et PC7 peuvent tre
programms en entre ou en sortie). STB : (Strobe input) : Au niveau bas , charge

les donnes dans le verrou dentre . IBF : (Input Buffer Full) : Au niveau haut
les donnes ont t verrouilles :

IBF = 1 par STB au niveau 0


IBF = 0 par le front montant dun RD (read) INTR : (Interrupt Request) : Au niveau
haut : demande dinterruption vers le microprocesseur :

INTR = 1 par STB=1, IBF=1 et INTE=1

INTR =0 par le front descendant dun RD (read)

Remarque :

Le signal INTE est contrl par le mot de commande du portC (PC4 pour le Port A et
PC2 pour le Port B)
Le handshak en entre est rsum par cette figure :

Au dpart la priphrie charge les donnes dans les verrous dentre du 8255
(STB=0) puis le 8255 rpond au priphrique par : chargement fait (IBF=1). Enfin le
8255 peut interrompre le fonctionnement du microprocesseur pour lui signaler quil a
des donnes prendre (INTR=1)
La figure suivante illustre ce mode de fonctionnement pour les portA et portB avec
leur mot de commande respectif.
Remarque :

On ne trouve plus dans ce cas lorganisation symtrique du portc (c,a,d portc haut et
portc bas)

Le chronogramme de fonctionnement dans ce mode est donn par la figure


suivante :

Mode 1 : en sortie :

OBF : (Output Buffer Full) : Devient gale 0 quand le microprocesseur a


crit des donnes dans le port, et elle revient 1 sur le front montant de WR et 0
sur ACK zro.
ACK : (Acknowledge Input) : = 0 signifie que les donnes ont t acquises.
INTR : (Interrupt Request) : =1 demande dinterruption vers le microprocesseur :

Mise 1 par ACK, avec OBF=1 et INTE=1

Mise zro par le front descendant de WR

Donc on peut schmatis le transfert par la figure suivante :

La figure suivante illustre ce mode de fonctionnement pour les portA et portB avec
leur mot de commande respectif.

Le chronogramme de fonctionnement dans ce mode est donn par la figure


suivante :

Remarque :

Le port A ainsi que le Port B peuvent tre mis en entre ou en sortie individuellement
dans le mode 1 : cest le mode mixte

II 3 / Le Mode 2 du 8255A :
Le mode 2 ne sapplique quau port A. il permet de cre un bus
bidirectionnel sur le port A sur 8 bits, 5 bits du portC sont utiliss pour le statut et le
contrle du portA (permette un handshak similaire au mode 1).

Commande du Bus bidirectionnel :

INTR : ( Interrupt Request : E/S) : Demande dinterruption ( au niveau haut).

OBF : (Output Buffer Full : S) :

i. Niveau bas : le buffer de sortie est autoris mettre la donne.


ii. Niveau haut : le buffer de sortie est au 3eme tat

STB : (Strobe Input : E) : Niveau bas : les donnes sont charges dans le verrou.

IBF : (Input Buffer Full : E) : Haut : les donnes ont t charges.

INTE 1 : (Interrupt 1 : S) : Le flip-flop associ OBF est contrl par PC6.

INTE 2 : (Interrupt 2 : E) : Le flip-flop associ IBF, contrl par

PC4.

III / Connections du 8255 avec le microprocesseur 8086 :


Pour connecter une interface de 8 bits (le 8255A) avec un bus de donnes de 16 bits
(Le 8086) il faut prendre des prcautions en effet on a vu dans le paragraphe
organisation physique de la mmoire quavec le microprocesseur 8086 si on
accde une adresse paire les donnes serons transmises sur le bus de donnes
D0 D7 mais si on accde une adresse impaire les donnes seront transmises sur
D8 D15, Or avec la mmoire on veut que le Bank 0 est connecte au signal BHE et
le bank1 est li avec A0 ( pine dadresse). Dans le cas du 8255 on a le mme

problme quil faut rsoudre lorsque on veut connecter cette interface avec un
microprocesseur 8086.on prenons en considration le tableau suivant :

1er solution : utilisation des adresses paires : c'est--dire que les pines A1 et A2 du
microprocesseur seront connect respectivement au pine A0 et A1 du 8255. Le
schma de la solution est donn comme suit :

Donc les adresses des ports :

2eme solution : utilisation des adresses paires et impaires

On utilise les adresses paires et impaires mais ce moment il faut mettre deux buffer
bidirectionnels tels que le 8286 ou encore 74245. Le schma est donn alors comme
suit :

Donc les adresses des ports :

Linterface srie le 8250/16550


I / Introduction :
Malgr sa rapidit la liaison parallle nest pas adapter quelque application lors de
la communication entre le microprocesseur et ses priphriques, en effet ce type
de liaison a des faiblesses lorsquil sagit de communiquer avec un organe pour
une longue distance, cet effet on prfre utiliser la liaison srie malgr son
faible dbit contre la liaison parallle.
La liaison entre lmetteur et le rcepteur en mode srie peut tre :

Simplexe.

Half duplexe

Full duplexe

La figure suivante montre la diffrence entre les trois modes :

TX : ligne dmission. RX : ligne de rception.


Remarque :

La vitesse de transmission est mesure en bps (bits par seconde), mais aussi BAUD
(nombre des changements du signal par Seconde). Il existe 2 types de
Communications Srie: Synchrone et Asynchrone :
I-1 / Communications asynchrones
Ici la transmission s'effectue caractre par caractre.
Un caractre comprend :
- un bit de dpart (START),
- des bits de donne selon un format variable (5, 6, 7,8 bits),
- un bit de parit (optionnel),
- un ou plusieurs bits d'arrt (Stop).

La cadence de transmission est fixe par une horloge dont la priode donne le temps
de transmission de 1 bit.
Au repos, la ligne de transmission est l'tat 1. Le dbut de transmission est signal
par l'apparition du bit de dpart qui est dans l'tat logique 0 (START). Les bits de
donne sont ensuite transmis squentiellement. Un bit de parit est ajout
ventuellement la suite des bits de donne pour vrifier la bonne transmission des
donnes en effet il permet de dtecter des erreurs de transmission. La fin de
transmission du caractre est signale par un ou plusieurs bits d'arrt l'tat 1 (bits
STOP). Le bit de dpart permet au rcepteur de dtecter l'arrive d'un caractre et
de recaler la phase de l'horloge de rception afin d'chantillonner correctement
les bits suivants (au milieu de chacun des bits). Ainsi, comme les frquences
d'mission et de rception ne sont pas strictement identiques, il suffit de garantir
une prcision de quelques pour-cent pour assurer une rception valide. Les
vitesses normalises sont : 50, 75, 110, 150, 300, 600, 1200, 2400,4800, 9600,
19200, 38400 bauds.
I-2 / Communication synchrone :
Avec la communication synchrone les donnes sont transmissent dune
manire continue. Il est donc ncessaire d'effectuer la synchronisation des
caractres au dbut du bloc de donnes. Cette synchronisation peut tre
interne ou externe :

La synchronisation interne : le rcepteur dtecte un ou plusieurs caractres de


synchronisation en tte de message, en cherchant une correspondance bit bit entre
un caractre de synchronisation prtabli et le train de bits arrivant.

La synchronisation externe : ncessite une ligne spcialise qui fournit un top


dhorloge chaque dbut de transmission de bloc.

Remarque 1 :

Dans tous les cas, une horloge cadence la transmission des bits qui ne sont donc
mis qu' des instants dtermins.
Remarque 2 :

Il existe deux circuits pour les Communications Srie: UART (Universal


Asynchrenous Receiver-Transmitter, (les Ports COM dIBM PC utilisent

lUART8050/16550 de NS ) et USART (Universal Synchroneous- Asynchroneous


Receiver-Transmitter (Le 8251 de Intel).

II / Linterface srie le 8250/16550 :


II-1 / Introduction :

Le composant lectronique charg de la gestion des transmissions sries


asynchrones dans les PC est appel UART (Universal Asynchronous Receiver
Transmitter).le circuit qui gre cette communication est le 8250 de National
Semiconductor ou son quivalent le 16550 dont le brochage est comme suit :

II-2 / Description des pines :

III / Les registres du 8250 :


III-1 /Les registres de contrle de protocole

Ces registres permettent de construire un protocole sommaire (rglages


des bits de parits et de stop, slection de la vitesse de transmission) :
III-1-1 / LCR - Line Control Register (registre de contrle de la ligne)

III- 1- 2 / DLR - Divisor Latch Register (registre de slection de la vitesse de transfert)


ce registre est cod sur 16 bits : Pour pouvoir utiliser ce registre on a deux
adresses, qui permetent de slectionner facilement une vitesse de transfert de
50 9600 bauds (c'est dire un maximum de 19200 bps), mais il ne faut pas oublier
auparavant de forcer le bit DLAB du registre LCR l'tat 1.

Remarque :

La vitesse n'est pas programme directement dans l'UART - c'est un circuit


comparable une horloge (baud rate generator) qui se charge de rguler celle-ci.

EXEMPLE : pour rgler l'UART une vitesse de 9600 bauds, il faudra copier 0x0C
vers DLR.
III - 2 / Les registres de contrle de la ligne
Ils sont au nombre de trois, et permettent de connatre l'tat de la ligne ou du
modem, et de rinitialiser celui-ci :
III - 2 - 1 / LSR - Line Status Register (registre d'tat de la ligne)

DR (Data Received) : Si DR =1, ce bit indique qu'un caractre compltement


transmis se trouve dans le registre de rception RBR. La lecture de celui-ci
rinitialisera automatiquement ce bit DR 0.

OR (OverRun) : ce bit est mis 1 quant le registre de rception RBR n'est pas vide et
qu'une donne reue risque d'craser son contenu. Une simple lecture du registre de
LSR rinitialisera ce bit 0.

PE (Parity Error) : mis 1 sur une erreur de parit. Rinitialis la lecture de LSR.

FE (Frame Error) : bits de stop incorrects. Reste 1 tant que le premier bit de stop
(celui suivant le dernier bit de donnes ou le bit de parit) est 0.

BE (Break Interrupt) : erreur de type break sur la ligne

THR (Transmission Holding Register Empty) : ce bit prend la valeur de 1 quand


l'UART a fini de transmettre le dernier caractre du registre de transmission THR
dans le registre TDR.

TSRE (Transmitter Shift Register Empty) : ce bit est en lecture seule. Il indique
(passage l'tat 1) que le caractre du registre TDR a t envoy sur la ligne, et
donc que celui-ci est vide. Ds qu'une donne arrive de THR dans TDR, la valeur
repasse 0.

III-2-2 / MSR - Modem Status Register (registre d'tat du modem)

Les valeurs de ce registre correspondent aux broches de l'interface. Les bits 0 3


indiquent les variations depuis la dernire lecture du processeur du registre - ils
seront forcs 1 si il y a eu changement. Toutes leurs valeurs sont rinitialises, s'il
y a lieu, un 0 logique ds que le processeur a achev une lecture du registre. Les
bits 4 7 contiennent, quant eux, l'tat actuel de diverses donnes de la ligne.

DCTS (Delta Clear To Send) : variation d'tat de la broche CTS (prparation


d'mission)

DDSR (Delta Data Set Ready) : variation d'tat de la broche DSR (donnes prtes)

TERI (Trailing Edge of Ring Indicator) : entre RI de l'UART (Ring Indicator). Ce bit
passe 1 si RI passe de ON (0) OFF (1). Un appel a t dtect depuis la dernire
lecture.

DRLSD (Delta Received Line Signal Detector) : variation d'tat de l'entre


RLSD de l'UART. Indique si la liaison avec le modem distant a t tablie.

CTS (Clear To Send) : tat de la broche CTS.

DSR (Data Set Ready) : tat de la broche DSR.

RI (Ring Indicator) : signale un appel sur la ligne.

RLSD (Receive Line Signal Detect) : indique si la liaison avec le modem distant a t
tablie.

III-2-3 / MCR - Modem Control Register (registre de contrle du modem)

Les bits OUT1, OUT2, RTS et DTR permettent, en forant leur valeur, de contrler la
valeur barre des signaux correspondants (DTR et RTS correspondent des
broches de l'interface, OUT1 et OUT2 sont des sorties auxiliaires).

III- 3 / Les registres de contrle d'interruptions

On pourra par le biais de ces registres dclarer quels vnements


dclencheront une interruption. Une fois l'interruption dtecte dans le
programme, on pourra dfinir sa cause, et y rpondre.
III - 3 - 1 / IER - Interrupt Enable Register (registre d'autorisations
d'interruptions) :

Le bit DLAB du registre LCR (registre de contrle de ligne) doit tre forc 0 pour
pouvoir accder ce registre. Les quatre bits de poids faible (bits 0 3) permettent,
lorsqu'ils sont forcs 1, de gnrer une interruptions lors de l'apparition de
l'vnement associ - on pourra retrouver la cause de cette interruption dans le
registre IIR. La liste ci-dessous dfinit quels vnements associs avec les bits de ce
registre :

EDAI (Enable Data Available Interrupt) : arrive d'un caractre

ETHREI (Enable Tx Holding Register Empty Interrupt) : registre THR vide

ERLSI (Enable Receive Line Status Interrupt) : modification de l'tat de la ligne

EMSI (Enable Modem Status Interrupt) : modification de l'tat du modem

III 3 2 / IIR - Interrupt Identification Register (registre de cause d'interruption)

Les trois bits IID (Interrupt ID) permettent de connatre la cause de


l'interruption, sa priorit, et le moyen de dsactiver l'interruption. Le tableau suivant
fournit la liste des combinaisons de ces trois bits et leur signification :

III 4 / Les registres de transfert


III 4 1 / Les registres d'mission

Lorsqu'un caractre doit tre transmis, il doit d'abord tre transfr dans le registre
THR (Transmission Holding Register = registre d'attente de l'metteur). Il y restera
tant que le caractre prcdent ne sera pas acquitt par la machine distante. Une
fois l'acquittement reu, le caractre sera transfr dans un autre registre :
TSR (Transmission Shift Register = Registre de dcalage de l'metteur).
L'UART se chargera alors de transmettre le caractre bit bit sur la ligne, et il pourra
y insrer, selon les rglages effectus dans LCR (contrle de ligne), un bit de parit
et un nombre fix de bits de stop. Il est important de noter ces quelques remarques :
Ce registre est criture seule (il possde la mme adresse que RBR, le registre
de rception : un ordre de lecture l'adresse de THR renverra donc le contenu de
RBR)
Le bit DLAB du registre LCR (contrle de la ligne) doit tre forc 0 pour pouvoir
effectuer une criture dans ce registre.
Ce registre est sur 8 bits. On pourra y envoyer de 5 8 bits, suivant les rglages
du registre de contrle de ligne LCR (bits WLS), sachant que ce sera le bit 0 (poids
le plus faible) qui sera le premier transmis.

il sera judicieux d'effectuer une lecture de LSR (registre d'tat de la ligne) - bits 5 et
6 - pour savoir quand le registre THR devient libre, et quand le caractre prsent
dans TDR a t transmi totalement sur la ligne .
III 4 - 2 / Les registres de rception

L'octet reu sera transfr (sans ses bits de parit et de stop) dans le registre RBR
(Receiver Buffer Register = registre de rception). De la mme manire qu'avec les
registres d'mission, il existe un registre de transit - appel RDR - par lequel le bit
reu passera en premier, avant d'tre dbarrass de ses bits de contrle.
Remarque :

Le registre RBR est lecture seule. les registres d'mission THR et de rception
RBR possdent une adresse commune. Ainsi une criture sur l'adresse de RBR
provoquera un remplissage du registre THR, et n'aura aucun effet sur le registre de
rception.
Le bit DLAB du registre LCR (contrle de la ligne) doit tre forc 0 pour pouvoir
effectuer une lecture dans ce registre.
Ce registre est sur 8 bits : y seront copis les 5 8 bits de donnes, sans bits de
contrle. Le bit 0, de poids le plus faible, est le premier avoir t reu.
il sera judicieux d'effectuer une lecture de LSR (registre d'tat de la ligne) - bits 0
4 - pour dtecter les ventuelles erreurs de transmission, ou tout simplement pour
savoir si un caractre a t reu se reporter la partie traitant de ce registre.

IV Exemple de programmation du 8250/16550 :


IV 1 / Programmation directe :

Exemple de programme qui permet de lire un caractre du port COM1 par polling :
LSR EQU 3FDH
TXRX EQU 3F8H
RDA EQU 01H
TBE EQU 20H
DEBUT : IN AL, LSR
; Lecture de LSR
TEST AL, RDA ; tester RDA
JZ DEBUT
; if not RDA
IN AL, TXRX
; lecture de la donne

EXAMPLE 2: Ecriture dun caractre sur le port COM1 :


DEBUT :
IN AL, LSR
; Lecture LSR
TEST AL, TBE
; tester TBE
JZ DEBUT
MOV AL, 'a'
; caractre transmettre
OUT TXRX, AL
; envoie caractre sur le port

IV 2 / Programmation en utilisant les interruptions BIOS/ DOS :

Linterruption 21H (DOS):

Linterruption BIOS 14H :

Exemple de programme Ecriture dun mot :


COM1 EQU 0
COM2 EQU 1
TBE EQU 20H
RDA EQU 01H
DEBUT :MOV DX, COM1
MOV AH, 03H
INT 14H
TEST AH, TBE
; test la valeur de TBE JZ DEBUT
MOV DX, COM1
MOV AH, 01H
MOV AL, 'a'
; Ecriture du caractre
INT 14H

Exemple de programme de lecture dun caractre :


COM1 EQU 0
COM2 EQU 1
TBE EQU
20H
RDA EQU
01H
DEBUT:
MOV DX, COM1
MOV AH, 03H
INT 14H
TEST AH, RDA
JZ DEBUT
MOV DX, COM1
MOV AH, 02H
INT 14H

Vous aimerez peut-être aussi