Professional Documents
Culture Documents
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.
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
.
.
.
1 0
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
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.
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 :
de chaque
instruction
afin
quil
pointe
sur
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).
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
traitant dinterruption
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.
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 :
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.
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 :
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)
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 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:
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 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) :
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) :
PF (Parity 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) :
OF (Overflow Flag) :
V / Gestion de la mmoire :
V 1 / Introduction :
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.
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 :
V 4 2 / Organisation physique :
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 :
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 :
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 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 :
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.
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
PROC near
...
RET
ENDP
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
Remarque :
Pour les instructions telles que :
MOV
Exemple dans notre cas MOV AX,-500H donne AX =1111101100000000B MOV BL,20H donne BL = 11100000B
VI -3 / Mode dadressage direct :
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
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]
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
Remarque :
Les syntaxes suivantes sont identiques :
MOV AX,[BX+2] MOV AX,[BX]+2
MOV AX,2[BX]
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]
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]
Instructions arithmtiques.
Instructions dinterruptions.
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
;
Remarques :
MOV
Il est strictement interdit de transfrer le contenu dune case mmoire vers une
autre case mmoire comme suit
Val1, Val2
MOV
AX, ES
DS, DS
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) ]
XLAT
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 :
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 :
Au lieu de faire :
MOV
MOV
MOV
Remarque :
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:
III 1 / Addition :
III 1 1 / ADD: (Addition)
Syntaxe :
ADD
Destination, source
source
Exemples :
ADD AX, BX
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
ADC
Destination, source
<------------
Destination
source + retenue
Exemples :
ADC
ADC
ADC
ADC
AX,BX
AL,BH
AL,[SI]
[DI],AL
;
;
;
;
;
;
Remarque :
INC
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 :
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 non :
Elle ajoute 6 AL
Ajoute 1 AH
III 2 / Soustraction :
III 2 1 / SUB : (Soustraction)
Syntaxe :
SUB
Destination, source
Destination
--
source
Exemples :
SUB AX,BX
SUB AL,BH
SUB AL,[SI]
SUB [DI],AL
;
;
;
;
;
;
Remarques :
SBB
Destination, source
Destination
--
source -- retenue
Exemples :
SBB AX,BX
SBB AL,BH
SBB AL,[SI]
;
;
;
;
;
;
;
SBB [DI],AL
Remarques :
DEC
Destination
<----------- Destination
Exemples :
DEC AX
DEC AL
DEC [SI]
;
;
;
;
Remarque :
NEG
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 :
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)
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.
Remarque :
Cette multiplication traite les donnes en tant que nombres non signs
Donc on aura :
(AX)
(AX)(DX)
<------------<------------
En conclusion :
IMUL
Source
Remarque :
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
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 :
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 =
IDIV
Source
Exemples:
A/
MOV AH,00h
MOV AL,-33H
MOV DL,25H
IDIV DL ;
et
AL =
et
AL =
B/
MOV AX,-500H
MOV CX,200H
IDIV CX
;
Mots
Remarque :
; AL=0110 0000
; AH=0000 0000 et AL=0110 0000
-------- >
Double
Remarque :
Exemple :
MOV
CWD
AX, +260
NOT
Destination
Exemple :
MOV AX, 500
NOT AX
IV 1 2 / AND : ( Et logique )
Syntaxe :
AND
Destination, source
<----------
Destination
source
Exemples :
MOV AX , 503H
AND AX , 0201H
AND AX,BX
AND AL,BH
AND AL,[SI]
;
;
;
;
;
;
;
;
;
;
;
AND [DI],AL
IV 1 3 / OR : (OU logique )
Syntaxe :
OR
Destination, source
<----------- Destination
source
Exemples :
MOV AX , 503H
OR AX , 0201H
;
;
;
;
;
;
;
;
;
;
;
OR AX,BX
OR AL,BH
OR AL,[SI]
OR [DI],AL
IV 1 4 / XOR : ( OU exclusif )
Syntaxe :
XOR
Destination, source
<------------ Destination
source
Exemples :
MOV AX , 503H
XOR AX , 0201H
XOR AX,BX
XOR AL,BH
XOR AL,[SI]
XOR [DI],AL
;
;
;
;
;
;
;
;
;
;
;
IV 1 5 / TEST :
Syntaxe :
TEST
Destination, source
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 :
ROR
destination, compteur
Exemple :
ROR AX,1
ROL AL,1
AL,1
AL,1
AL,1
AL,1
Ou encore :
MOV CL,4
ROR AL,CL
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 :
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.
Et linstruction RET :
Remarque 1 :
(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
; AX <- AX + BX
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 :
;
;
;
;
;
;
;
;
;
;
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 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)
Elles permettent de travailler sur des blocs doctets ou de mots allant jusqu' 64
Koctet.
Remarque :
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 :
REP MOVSB
4C00H
INT 21H
PROG ENDP
CODE ENDS
END PROG
On ne peut pas utilis le prfixe REP avec linstruction CMPS car cela revient
comparer uniquement les deux derniers lments des deux chanes.
Exemple :
Syntaxe :
SCAS chaine_destination
SCASB
SCASW
Syntaxe :
LODS chaine_source
LODSB
LODSW
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-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
LES INTERRUPTIONS
I / Introduction :
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 :
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.
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 :
-
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
= 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 :
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
= 0000h
Sortie :
AX
BX
AX
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
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 :
= 0003h
Sortie :
BX
Signification
3-15
Aucune (0)
CX
= Position horizontale de la Souris ( partir de 1.0) DX =
Position verticale de la souris
Remarques :
Remarque :
Le schma bloc du 8255 montre bien quil est divis en deux groupes :
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 :
II / Programmation du 8255A :
On peut programmer le 8255A selon trois modes :
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 :
Sur un RESET, tous les ports sont positionns en mode entres et il faut les
reprogrammer, si ncessaire.
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 :
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
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
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 suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306
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 :
On suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H
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
Les diffrentes phases sont les suivantes (en mode avancement par un pas):
Les diffrentes phases sont les suivantes (en mode avancement par demi pas):
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
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 :
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)
Mode 1 : en sortie :
La figure suivante illustre ce mode de fonctionnement pour les portA et portB avec
leur mot de commande respectif.
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).
STB : (Strobe Input : E) : Niveau bas : les donnes sont charges dans le verrou.
PC4.
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 :
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 :
Simplexe.
Half duplexe
Full duplexe
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 :
Remarque 1 :
Dans tous les cas, une horloge cadence la transmission des bits qui ne sont donc
mis qu' des instants dtermins.
Remarque 2 :
Remarque :
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)
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.
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.
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.
RLSD (Receive Line Signal Detect) : indique si la liaison avec le modem distant a t
tablie.
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).
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 :
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.
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