Professional Documents
Culture Documents
Techno
Hardware OS Rseaux
Programmation Liens
Internet
Math Info
Registres de donnes
AX, BX, CX et DX
Ce sont des registres 16 bits du 8086, ils peuvent chacun tre scinds
pour
y
entreposer
deux
variables
d'un
octet
Ainsi, le registre 16 bits AX peut tre considr comme l'adjonction de
deux registres 8 bits AH et AL (H =high, L =low)
Certaines instructions ddient ces registres des rles spcifiques :
AX "accumulator" l'accumulateur est privilgi pour certaines oprations arithmtiques ainsi que les
oprations d'entre/sortie
BX "base register" il est appel registre de base car l'adressage en mmoire peut se faire par son
intermdiaire
CX "count register" est implicitement le registre compteurs de boucles pour les instructions
rptitives.
(CL pour les oprations de dcalage)
DX "data register" sert dans certaines circonstances d'extension l'accumulateur.
Registres d'adresses
Registres dits d'index :
Registres de base
SI
DI
BP
SP
"Source index"
"Destination index"
"Base pointer"
"Stack pointer"
Registres de segments
CS
DS
"Code Segment"
"Data Segment"
ES
"Extra Segment"
SS
Registre d'tats
Ce registre contient les flags, ce sont des bits qui basculent d'un tat
l'autre en fonction des rsultats de l'excution d'oprations arithmtiques
ou
logiques.
- Le flag Carry passe 1 si une addition donne lieu un report.
- Le flag Signe passe 1 si le bit le plus significatif du rsultat vaut 1.
- Le flag Zero passe 1 si le rsultat de la dernire opration est nul.
etc.
Ces flags servent entre autre aux instructions de sauts conditionnels.
L'instruction pointeur
IP Aussi appel compteur ordinal est un registre qui s'incrmente sans
cesse. Il contient en permanence l'adresse de la prochaine instruction
excuter. "Faire un saut" dans un programme revient inscrire dans le
registre IP l'adresse de l'instruction o le programme doit se rendre.
L'incrmentation de l'Instruction Pointer reprend alors depuis cette
nouvelle valeur pour poursuivre la nouvelle squence d'instructions.
1
Mo
comme
pour
les
premiers
8086.
Les adresses sont donnes sous la forme Segment : Offset
Exemple :
Sous DOS ( mais Windows mule parfaitement la chose)
l'adresse B800:0000 est l'adresse de base de la mmoire vido en mode
texte. Cette adresse est donc celle du byte contenant le code ASCII du
caractre situ dans le coin suprieur gauche de l'cran.
Le segment
B800 dbute
l'adresse
physique
B8000.
L'adresse physique s'obtient en calculant Segment x 16 + Offset
Manipulation :
Avec l'utilitaire DEBUG, crivons 41H = le code ASCII du A majuscule
l'adresseB800:0400 = adresse physique B8400 de sorte faire
apparatre ce 'A' au milieu de l'cran.
C:\>debug
-e B800:400
B800:0400 20.41 07.4E 20.
-q
Toujours avec le programme debug, la commande 'a' permet d'encoder des instructions
saisies en assembleur.
a
mov
mov
mov
mov
mov
ret
ax,B800
ds,ax
cx,4E41
di,400
[di],cx
Utilisez la commande T pour tracer une une, les instructions de ce bout de programme.
Elles placent l'adresse du segment B800 dans le registre DS (data segment)
Le registre CL reoit le code ASCII d'un 'A' majuscule (41) (Ne soyez pas troubls par la
valeur 4E inscrite dans le registre CH, elle va joindre des attributs au code ASCII contenu
dans CL pour faire ressortir le caractre en jaune sur fond rouge)
Le nombre plac dans le registre DI indique le dplacement par rapport au dbut de la
mmoire cran.
Adressage de registres
la valeur du registre AX est recopies dans le registre DS
MOV CX , 4E41 Adressage immdiat
la valeur immdiate 4E41 est recopie dans CX
MOV [DI] , CX
Adresse en mmoire
[DI] mis entre crochets signifie " l'adresse donne par DI"
(cette adresse est l'offset ajouter au segment de donnes)
L'instruction MOV attend deux oprandes, le premier indique la destination du dplacement
de
la
donne,
le
second
oprande
indique
la
source.
La destination peut tre un registre, une adresse mmoire ou un registre de segment (sauf
pour
le
registre
CS
qui
ne
peut
jamais
tre
une
destination)
La source peut tre un registre, une adresse mmoire, un registre de segment ou une
valeur immdiate.
Le tableau ci-dessous inventorie toutes les manires d'utiliser l'instruction MOV
r1 reoit la valeur identique celle contenue dans r2
MOV r1 , r2
Le registre r est initialis avec une valeur immdiate
MOV r , i
Ecriture d'une valeur immdiate en mmoire
MOV m , i
Lecture en mmoire l'adresse m en destination du registre r
MOV r , m
Ecriture en mmoire partir du registre r
MOV m , r
Echanges entre registres de segment et la mmoire
Lecture: s := m
MOV s , m
Ecriture: m := s
MOV m , s
Echanges entre registres gnraux et registres de segment
MOV s , r
MOV r , s
Dans cette liste les adresses 'm' sont spcifies en plaant une valeur de
l'offset et/ou des noms de registres entre crochets. Exemples : [2000] ; [BP] ;
[BP+2000] ; [SI] ; [BP+SI] ; [BP+SI+2000]
En fait toutes les combinaisons ne sont pas acceptes ! Les combinaisons valides sont
celles que l'on forme en ne prenant pas plus d'un lment dans l'une des trois colonnes du
tableau :
BX SI
BP DI
nombre
Autrement dit, il ne peut pas il y avoir simultanment dans une adresse 2 registres de base
(dont le nom commence par b) ni 2 registres d'index (dont nom se termine par i )
Il est parfois ncessaire de prciser la taille de la valeur lire. On fait alors prcder
l'adresse de la donne par BYTE PTR ou par WORD PTR selon que l'adresse dsigne un
ou deux octets.
IMUL
DIV
IDIV
AX := AL x Valeur
DX.AX := AX x Valeur
AL := AX / Valeur
AX := DX.AX / Valeur
CALL label
L.bat :
TLINK /v /k %1.obj;
Pour rappel, on part d'un code source ".asm" L'assemblage en fait un code objet ".obj"
relogeable qui son tour est trait par l'diteur de lien pour en faire un code excutable
".exe" Accessoirement l'assembleur produit aussi un "listing" qui est un document destin
tre imprim. On y retrouve cte cte, le code source et le code binaire correspondant
not en hexadcimal.
... suivre
CoursTechInfo > Programmation > Introduction l'assembleur