Sunteți pe pagina 1din 30

Technique des microprocesseurs :

Assembleur
Professeur : Cdric Thiernesse
Anne acadmique : 2007-2008
Soors Aurore

1. Introduction
1. Pourquoi lassembleur ?

Langage de bas niveau : excution rapide, occupe moins de place en mmoire et certaines fonctions
sont unique au langage.
Langage de prdilection pour contrler les aspects matriels, crire des gestionnaires de
priphriques et crire des programmes rsidents.
Ecriture de sous-routine : accs au DOS, au BIOS, aux priphriques
Aide la comprhension du C : fonctionnement de la pile,

Linconvnient de ce langage est quil est plus long crire car les programmes sont dcoups en actions
lmentaires. De plus, un programme est crit pour un microprocesseur donn.
BIOS : programme permanent en ROM qui permet de dmarrer le systme aprs mise sous tension.
DOS : systme dexploitation en RAM qui gre les composants du systme. Cest une interface entre lhomme
et la machine.

2. Composants de lordinateur :

La mmoire : comprend des instructions et des donnes, comme par exemple une adresse ou le
contenu dune mmoire, et peut prendre diffrentes formes (ROM, RAM).
Lhorloge est un circuit lectronique qui cadence le microprocesseur.
Le microprocesseur qui est caractris par
- Taille du bus de donnes
- Taille bus dadresse
- Jeu dinstructions
- Mode dadressage
- Nombre de registres internes
- Architecture interne
- Taille des registres du microprocesseur
- Famille des circuits programmables associs
- Vitesse de fonctionnement

-2-

Soors A.

2. Le microprocesseur
1. Structure classique dun microprocesseur :

2. Le microprocesseur : architecture externe

-3-

Soors A.

3. Le microprocesseur : 8088
3.1. Brochage
Pin Number
1
2-8
9-16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
30
32
33
34
35-38
40

Description
GND - Ground
ADDR - Address Bus
DATA - Address Data Bus
NMI - Non-Maskable Interrupt
INTR - Interrupt Request
CLK - Clock
GND - Ground
RESET - Reset
READY - Ready
TEST - Test (Active Low)
INTA - Interrupt Acknowledge (Active
Low)
ALE - Address Latch Enable
DEN - Data Enable (Active Low)
DT/R - Data Transmit / Receive
IO/M - Status Line
WR - Write (Active Low)
HLDA - Hold A
HOLD - Hold
HLDA - Hold A
RD - Read (Active Low)
MN/MX - Minimum or Maximum
Mode
SSO - Status Line (Active Low)
ADDRESS/STATUS - Address/Status Information
Vcc - Positive Power Supply

-4-

Soors A.

3.2. Architecture interne du 8088 : EU et BIU

Unit dexcution (UE) excute des instructions (contient lALU, 8 registres de 16bits et le registre dtat).
Unit dinterface de BUS (UIB) est ladaptation entre lunit dexcution et le monde extrieur. Elle gre a
segmentation de la mmoire et contient les registre de segment + IP.
3.3. Les registres du microprocesseur 8088

FLAGS :

AA

AA

AA

AA

OF

DF

IF

TF

-5-

SF

ZF

AF

PF

CF

Soors A.

3.4. Carte de la mmoire adressable


Note : ceci est titre dinformation.

Pour un bus de 20 bits (8088), la mmoire une taille de 1Mo tandis que pour un bus de 32 bits (80286), la
mmoire une taille de 4Go.
3.5. Gestion de la mmoire
Le problme du 8088 est que la taille du bus de donnes interne est de 16bits. Or lespace adressable est de
20bits. Pour remdier ce problme on utilise la segmentation qui permet de passer dune adresse de 16 bits
une adresse de 20 bits.
Adressage physique : Adresse la cellule mmoire (position en mmoire SS), l o le segment commence.
Offset : dcalage par rapport au dbut du segment.
Adressage logique : Spcifie ladresse dun oprande et/ou dune instruction. Chaque adresse logique est
constitue dun segment et dun offset.

-6-

Soors A.

Principe :

Exemple : Trouvez ladresse physique CS :IP sachant que ladresse logique est 0ABC et loffset est 1234.
Solution : 0ABC0 + 1234 = 0BDF4. Ladresse logique CS :IP = 0BDF4.

4 zones de 64Ko : CS, DS, ES, SS


Dans la zone CS :0000 CS :FFFF se trouve le code source du
programme.
Dans la zone DS :0000 DS :FFFF se trouve les donnes du
programme.
Dans la zone ES :0000 ES :FFFF se trouve les donnes
supplmentaires.
Dans la zone SS :0000 SS :FFFF se trouve la pile de
sauvegarde.
En mettant bout bout ces 4 segments, on ne pourrait
adresser que 256Ko.

-7-

Soors A.

3. Programmer en assembleur
Le compilateur MASM transforme le mnmonique en langage comprhensible par la machine.
Rsum graphique :
Programme source
(.asm)

------------------------>

Programme binaire
(.obj)

Assemblage par
MASM

------------------------>

Programme
excutable (.exe)

Edition de lien par


LINK

Deux types dexcutable :


Static : excutable qui contient tout mais est volumineux.
Dynamic : excutable qui contient le stricte minimum donc peu de place et qui fait beaucoup de liens
avec des fonctions externes.

1. Premier programme en assembleur


Construction dune ligne dinstruction en mnmonique (4 zones) :
LABEL CODE-OPERATION OPERANDE ; COMMENTAIRES

.MODEL SMALL
.CODE
MOV DL, 4
ADD DL, 3

;
;
;
;

directive de compilation
directive de compilation
place 4 dans le registre DL
addition et rsultat place dans DL

ADD DL, 48

; conversion en ASCII

MOV AH, 2
INT 21H

; affichage du rsultat

MOV AH, 4CH


INT 21H

; retour au DOS

END

; directive de compilation

-8-

Soors A.

2. Les types de donnes


La directive db :
Syntaxe : [symbole] db valeur[,valeur,]
db = Define Byte (rservation dune donne sur 8 bits)
La directive dw :
Syntaxe : [symbole] dw valeur[,valeur,]
dw = Define Word (rservation dune donne sur 16 bits ; attention lordre des octets en mmoire)
La directive dd :
Syntaxe : [symbole] dd valeur[,valeur,]
dd = Define Double (rservation dune donne sur 32 bits ; attention lordre des octets en mmoire)
Loprateur DUP : indique l'assembleur qu'il faut rpter (dupliquer) plusieurs fois l'opration qui le prcde.
Exemples :
Rservation dun vecteur de donnes :
Vec db 3, 12, -7
Dclaration d'un tableau de 10 octets initialiss 0 :
tab1
db
10
dup
(0)
Dclaration d'un tableau de 100 octets non initialiss :
tab2
db
10
dup
(?)
Chaines de caractres :
ch1 db bonjour
ch2 db bonjour
ch3 db 0Ah, bonjour
Les deux instructions suivantes sont quivalentes :
tab
db
512,97,0,3,7
tab
db
5
dup
(512,97,0,3,7)

3. Les directives

.MODEL dfinit la taille maximale des donnes. Elle est dclare avant les autres directives et peut
prendre les valeurs suivantes : small, medium, compact, large et huge.
.DATA permet dinitialiser un segment de donnes. Le segment est cltur par une autre directive ou
un END.
.CODE initialise un segment de code (et clture un segment de donnes) qui contient les instructions.
Utiliser une tiquette debut (et un end debut a la fin) afin de connatre le point de dpart des
instructions.
Si on va utiliser des donnes, charger le registre DS et se positionner correctement grce :
MOV AX, @data
MOV DS, AX
.END est la fin du fichier source.

4. Rgles importantes

Instructions deux oprandes dont la premire est la destination et la seconde la source.


Utiliser le mme type pour la destination et la source.

-9-

Soors A.

5. Les diffrents modes dadressage


Mode :

Exemple(s)
MOV AH, 35

Adressage immdiat
Adressage direct

VAR DB 2
MOV AH, VAR

Adressage bas (utilisation de BX et BP)

MOV BX, 9
MOV AX, [BX]

Adressage index

MOV SI, 12
MOV AX, [SI]

Adressage index et bas

MOV BX, 4
MOV SI, 5
MOV AX, [BX][SI]

Adressage bas et dplacement

ID DW 7 dup ( ?)
MOV BX, 2
MOV AX, ID[BX]

Adressage index et dplacement

MOV SI, 3
MOV AX, [SI+2]

Adressage bas, index et dplacement

VAR
MOV
MOV
MOV

DB 2
BX, 3
SI, 4
AX, VAR[BX][SI+2]

Notes :
offset a retourne la valeur du dplacement.
ptr a retourne le contenu de a.
(Autres exemples : cf. syllabus pages 30 32).
Pourquoi utiliser ladressage index ? Parce que grce lindex on va pouvoir utiliser une boucle et donc
rduire la taille du code et le rendre plus lisible (illustration page 33).

- 10 -

Soors A.

6. Assemblage manuel : linstruction MOV

Exemple : MOV AH, [5]


Solution : cest une adressage bas (mmoire vers une registre), on a donc 1000 10dw md, reg, r/m o d= 1 et
comme le registre tant AH, w=0. Ce qui donne 1000 1010 md, reg, r/m.
Mod = 00 et R/M = 110 et le registre AH vaut 100. Au final, on a 1000 1010 00 100 110.
1000 1010 0010 0110 = 8 A 2 6 0500

7. Les 6 groupes dinstructions de lassembleur

Mouvements de donnes : MOV


Arithmtiques : ADD, ADC, INC, SUB, SBB, DEC, NEG, CMP
Oprations binaires : AND, OR, XOR, NOT, TEST, SHL, SHR, SAL, SAR, ROL, ROR,
RCL, RCR
Traitement de chanes
Commandes de transfert : LOOP, JCOND, JMP
Commandes du processeur

- 11 -

Soors A.

4. Les instructions arithmtiques


1. Linstruction MOV
Syntaxe : MOV source, destination
MOV destination, source

Exemples
MOV AX, BX

MOV registre, registre

MOV mmoire, accumulateur OU


MOV accumulateur, mmoire

MOV registre, mmoire OU


MOV mmoire, registre

MOV CX, [BX + SI]


MOV DS :5, DX

MOV registre immdiat OU


MOV immdiat, registre

MOV AX, 3

MOV mmoire, immdiat

MOV BYTE ptr ds :[5], 3

MOV registre_segment, registre_16bits OU


MOV registre_16bits, registre_segment

MOV DS, AX
MOV CX, ES

MOV registre_segment, mmoire_16bits

MOV ES, DS[3]

2. Linstruction ADD
Syntaxe : ADD operande1, operande2 o operande1 = operande1 + operande2
Cest une addition purement binaire, on ne fait donc pas de distinction entre les nombres signs et non-signs.
Possibilits dutilisations :
ADD reg(8 ou 16 bits), reg(8 ou 16 bits)
ADD reg(8 ou 16 bits), mem(8 ou 16 bits)
ADD mem(8 ou 16 bits), reg(8 ou 16 bits)
ADD reg(8 ou 16 bits), imm(8 bits)
ADD reg(16 bits), imm(16 bits)
ADD mem(8 ou 16 bits), imm(8 bits)
ADD mem(16 bits), imm(16 bits)
Les indicateurs dtats affects par ADD sont CF, ZF, OF, SF, AF et PF :
OF
=0
Rsultat correct pour des entiers signs
=1
Rsultat incorrect pour des entiers signs (overflow)
SF
=0
Bit de gauche 0 (rsultat >= 0 si sign)
=1
Bit de gauche 1 (rsultat < 0 si sign)
ZF
=0
Indique un rsultat diffrent de 0 (sign ou non)
=1
Indique un rsultat gal 0
AF
=0
Pas de report auxiliaire du quartet de droite sur le suivant
=1
Report auxiliaire du quartet de droite sur le suivant
PF
=0
Nombre impair de bits 1 dans le byte de droite
=1
Nombre pair de bits 1 dans le byte de droite
CF
=0
Pas de report au-del du bit plus significatif
=1
Report au-del du bit plus significatif
Pour les entiers signs, les indicateurs les plus utiles sont : OF, SF et ZF.
Pour les entiers non-signs, les indicateurs les plus utiles sont : SF et CF.

- 12 -

Soors A.

3. Linstruction ADC
Syntaxe : ADC operande1, operande2 o operande1 = operande1 + operande2
ADC = ADD with Carry ; le carry est ajout la somme.
Exemple dutilisation : addition de nombres cods sur 32 bits, par exemple 14A38h + 1CE3Bh donnerait :
MOV AX, 4A38h
MOV DX, 0001h
ADD AX, 0CE38h
ADC DX, 0001h

4. Linstruction INC
Syntaxe : INC destination
INC additionne 1 loprande de destination et modifie les mmes indicateurs que ADD sauf le CF.
Possibilits dutilisation :
INC reg(8 ou 16 bits)
INC mem(8 ou 16 bits)

5. Linstruction SUB
Syntaxe : SUB operande1, operande2 o operande1 = operande1 operande2
Soustraction purement binaire et donc pas de distinction entre les nombres signs et non-signs.
Possibilits dutilisations :
SUB reg(8 ou 16 bits), reg(8 ou 16 bits)
SUB reg(8 ou 16 bits), mem(8 ou 16 bits)
SUB mem(8 ou 16 bits), reg(8 ou 16 bits)
SUB reg(8 ou 16 bits), imm(8 bits)
SUB reg(16 bits), imm(16 bits)
SUB mem(8 ou 16 bits), imm(8 bits)
SUB mem(16 bits), imm(16 bits)
Les indicateurs dtats affects par SUB sont les mmes que pour ADD, mais pour AF et CF, il sagit dun
emprunt et non plus dun report.

6. Linstruction SBB
Syntaxe : SBB operande1, operande2 o operande1 = operande1 operande2
SBB = SUB with Borrow ; le carry est retire au rsultat.
Exemple dutilisation : soustraction de nombres cods sur 32 bits, par exemple 2CE3Bh 1DA38h donnerait :
MOV AX, 0CEBh
MOV DX, 0002h
SUB AX, 0DA38h
SBB DX, 0001h

- 13 -

Soors A.

7. Linstruction DEC
Syntaxe : DEC destination
DEC soustrait 1 loprande de destination et modifie les mmes indicateurs que SUB sauf le CF.
Possibilits dutilisation :
DEC reg(8 ou 16 bits)
DEC mem(8 ou 16 bits)

8. Linstruction NEG
Syntaxe : NEG destination
NEG remplace loprande de destination par son complment (destination = 0 destination) et modifie les
mmes indicateurs que SUB.
Possibilits dutilisation :
NEG reg(8 ou 16 bits)
NEG mem(8 ou 16 bits)

9. Linstruction CMP
Syntaxe : CMP operande1, operande2
CMP positionne les indicateurs OF, SF, ZF, AF, PF et CF en fonction du rsultat de la comparaison. Elle est
toujours utilise en relation avec linstruction de branchement conditionnel JCOND.
Possibilits dutilisations :
CMP reg(8 ou 16 bits), reg(8 ou 16 bits)
CMP reg(8 ou 16 bits), mem(8 ou 16 bits)
CMP mem(8 ou 16 bits), reg(8 ou 16 bits)
CMP reg(8 ou 16 bits), imm(8 bits)
CMP reg(16 bits), imm(16 bits)
CMP mem(8 ou 16 bits), imm(8 bits)
CMP mem(16 bits), imm(16 bits)

- 14 -

Soors A.

5. Les instructions de transferts


1. Linstruction LOOP
Syntaxe : LOOP label
LOOP permet de rpter un traitement un nombre de fois dtermin par la valeur continue dans le registre de
compteur CX (boucle). Elle ne modifie pas les indicateurs.
Fonctionnement : LOOP dcrmente CX de 1 puis teste le contenu de CX :
Si CX > 0, branchement au label ;
Si CX = 0, le programme continue de manire squentielle
Remarque : LOOP occupe deux octets en mmoire.

2. Les instructions LOOP conditionnelles


Syntaxe : LOOPE label ou LOOPNE Label

LOOPE (ou LOOPZ) fonctionne de la mme manire que LOOP, mais il faut une double condition pour
allez au label spcifier : CX != 0 et ZF = 1.
LOOPNE (ou LOOPNZ) fonctionne de la mme manire que LOOP, mais il faut une double condition
pour allez au label spcifier : CX != 0 et ZF = 0.

Exemple dutilisation : recherche du caractre c dans une chane de caractres.

chaine
debut :

boucle :

.MODEL SMALL
.DATA
db recherche du caractre c
.CODE
MOV AX, @data
MOV DS, AX
MOV CX, 24
MOV SI, -1
INC SI
MOV AL, chaine[SI]
SUB AL, c
LOOPNZ boucle ;*
MOV AH, 4CH
INT 21H
END debut

*boucle si pas trouv et si pas atteint la fin de la chane de caractre.

- 15 -

Soors A.

3. Linstruction JCOND (JUMP conditionnel)


Syntaxe : JCOND label
JUMP transfre lexcution du programme ladresse indique si la condition exprime par le code opration
est vrifie.
Utilisation : on aura
E
pour
G
pour
L
pour
A
pour
B
pour
N
pour

equal
greater
less than
above
below
not

Z
S
O
C
P

pour
pour
pour
pour
pour

zero
sign flag = 1
overflow flag = 1
carryflag = 1
parityflag = 1

Mnmonique utiliser aprs une comparaison CMP A,B :


Condition
A=B
A<B
A>B
AB
AB
AB

Nombres signs
Jump si
JE
ZF = 1
JL
SF CF
JG
ZF = 0 et SF = OF
JNE
ZF = 0
JNG
ZF = 1 ou SF != OF
JNL
SF = OF

Nombres non-signs
Jump si
JE
ZF = 1
JL
CF = 1
JG
CF = 0 et ZF = 0
JNE
ZF = 0
JNG
CF = 1 ou ZF = 1
JNL
CF = 0

Mnmonique utiliser aprs une autre instruction arithmtique que CMP :


Condition
=0
<0
>0
0
0
Dep. Cap
Pas dep.

Nombres signs
Jump si
JZ
ZF = 1
JS
SF = 1
Utiliser JZ et JNS
JNZ
ZF = 0
JNS
SF = 0
JO
OF = 1
JNO
OF = 0

Nombres non-signs
Jump si
JE
ZF = 1
Pas de sens
JG
ZF = 0
JNE
ZF = 0
Toujours 0
JO
CF = 1
JNO
CF = 0

Dep. Cap = dpassement de capacit.


Pas dep. = pas de dpassement de capacit.

4. Linstruction JMP
Syntaxe : JMP label
Instruction de branchement inconditionnel ladresse spcifie. Contrairement JCOND, JMP peut brancher
vers nimporte quel emplacement mmoire.
Deux catgories de branchements :
Intrasegement (seul IP est modifi)
Intersegment (CS et IP sont modifis)
Pour ces deux catgories, il existe JMP direct ou JMP indirect :
JMP intrasegment direct : cas le plus simple et le plus courant.
JMP intrasegment indirect : loprande est un registre ou une rfrence une donne en mmoire.

- 16 -

Soors A.

6. Les instructions logiques


1. Linstruction AND
Syntaxe : AND operande1, operande2
AND effectue un ET logique bit par bit sur les oprandes source et destination. Le rsultat est plac dans
loprande de destination.
Table de vrit :

0
0
1
1

AND
AND
AND
AND

0
1
0
1

=0
=0
=0
=1

Possibilits dutilisations :
AND reg(8 ou 16 bits), reg(8 ou 16 bits)
AND reg(8 ou 16 bits), mem(8 ou 16 bits)
AND mem(8 ou 16 bits), reg(8 ou 16 bits)
AND reg(8 ou 16 bits), imm(8 bits)
AND reg(16 bits), imm(16 bits)
AND mem(8 ou 16 bits), imm(8 bits)
AND mem(16 bits), imm(16 bits)
Positionnement des indicateurs :
OF et CF sont mis 0
SF, ZF et PF sont positionns
Utilit :
AND sert forcer des bits 0 laide dun masque
AX = CDEFh
AND AX, 0000 1111 1111 1111 b (c'est--dire 0FFFh)
Rsultat : AX = 0DEFh
AND permet de calculer le reste dune division dun nombre par un autre, ce dernier tant une
puissance de 2.
1ere oprande = le numrateur et 2e oprande = le dnominateur 1
Exemple : le reste de 134/16 : 1000 0110b AND 0000 1111b = 0000 0110b = 6
AND permet de transformer un nombre ASCII en BCD
Exemple : ASCII :
33 34 37 38
Masque : 0F 0F 0F 0F
Rsultat : 03 04 07 08

- 17 -

Soors A.

2. Linstruction OR
Syntaxe : OR operande1, operande2
OR effectue un OU logique bit par bit sur les oprandes source et destination. Le rsultat est plac dans
loprande de destination.
Table de vrit :

0
0
1
1

OR
OR
OR
OR

0
1
0
1

=0
=1
=1
=1

Possibilits dutilisations :
OR reg(8 ou 16 bits), reg(8 ou 16 bits)
OR reg(8 ou 16 bits), mem(8 ou 16 bits)
OR mem(8 ou 16 bits), reg(8 ou 16 bits)
OR reg(8 ou 16 bits), imm(8 bits)
OR reg(16 bits), imm(16 bits)
OR mem(8 ou 16 bits), imm(8 bits)
OR mem(16 bits), imm(16 bits)
Positionnement des indicateurs :
OF et CF sont mis 0
SF, ZF et PF sont positionns
Utilit :
OR sert forcer des bits 1 laide dun masque
AX = CDEFh
OR AX, 0000 1111 1111 1111 (c'est--dire 0FFFh)
Rsultat : AX = CFFFh
OR permet de transformer des majuscules en minuscules :
Exemple : texte :
41 53 53 45 4D 42 4C 45 52 (ASSEMBLER)
masque : 20 20 20 20 20 20 20 20 20
rsultat : 61 73 73 65 6D 62 6C 65 72 (assembler)

- 18 -

Soors A.

3. Linstruction XOR
Syntaxe : XOR operande1, operande2
XOR effectue un OU logique (exclusif) bit par bit sur les oprandes source et destination. Le rsultat est plac
dans loprande de destination.
Table de vrit :

0
0
1
1

XOR
XOR
XOR
XOR

0
1
0
1

=0
=1
=1
=0

Possibilits dutilisations :
XOR reg(8 ou 16 bits), reg(8 ou 16 bits)
XOR reg(8 ou 16 bits), mem(8 ou 16 bits)
XOR mem(8 ou 16 bits), reg(8 ou 16 bits)
XOR reg(8 ou 16 bits), imm(8 bits)
XOR reg(16 bits), imm(16 bits)
XOR mem(8 ou 16 bits), imm(8 bits)
XOR mem(16 bits), imm(16 bits)
Positionnement des indicateurs :
OF et CF sont mis 0
SF, ZF et PF sont positionns
Utilit :
XOR sert inverser des bis laide dun masque
AX = CDEFh
XOR AX, 0000 1111 1111 1111b (c'est--dire 0FFFh)
Rsultat : AX = C210h
XOR est un moyen rapide pour remettre un registre 0
XOR AX, AX ; remet AX 0
XOR permet de transformer des majuscules en minuscule et les minuscules en majuscules
Exemple : texte :
41 53 73 45 6D 62 6C 45 72 (ASsEmblEr)
masque : 20 20 20 20 20 20 20 20 20
rsultat : 61 73 53 65 4D 42 4C 65 52 (asSeMBLeR)

4. Linstruction NOT
Syntaxe : NOT operande
NOT effectue un NON logique bit par bit sur loprande spcifie. Le rsultat est plac dans loprande spcifi.
Table de vrit :

NOT
NOT

0
1

=1
=0

Possibilits dutilisations :
NOT reg
NOT mem
Positionnement des indicateurs : les indicateurs ne sont pas positionns par NOT.
Utilit : NOT sert inverser tous les bits de loprande de destination (quivalent XOR utilisant un masque ne
comportant que des 1 ).

- 19 -

Soors A.

5. Linstruction TEST
Syntaxe : TEST operande1, operande2
TEST effectue un ET logique bit par bit sur les oprandes spcifies. Les oprandes ne sont pas modifies par
lopration.
Possibilits dutilisations :
TEST reg(8 ou 16 bits), reg(8 ou 16 bits)
TEST reg(8 ou 16 bits), mem(8 ou 16 bits)
TEST mem(8 ou 16 bits), reg(8 ou 16 bits)
TEST reg(8 ou 16 bits), imm(8 bits)
TEST reg(16 bits), imm(16 bits)
TEST mem(8 ou 16 bits), imm(8 bits)
TEST mem(16 bits), imm(16 bits)
Positionnement des indicateurs :
OF et CF sont mis 0
SF, ZF et PF sont positionns

- 20 -

Soors A.

7. Les instructions de dcalage et de rotation


1. Introduction
Principe : consiste faire glisser tous les bits dun octet ou dun mot vers la droite ou vers la gauche.
Deux catgories :
SHIFT : SHL, SHR, SAL, SAR
ROTATION : ROL, ROR, RCL, RCR

Utilisation courante : les SHIFTS et les ROTATIONS peuvent remplacer avantageusement les instructions de
multiplication et de division (shift vers la gauche correspond une multiplication par deux et un shift vers la
droite une division par deux).
Remarque : SAx pour les nombres signs et SHx pour les nombres non-signs.

2. Les instructions de dcalage


Utilisations possibles :
SHL/SHR/SAL/SAR reg(8 ou 16 bits), 1
SHL/SHR/SAL/SAR mem(8 ou 16 bits), 1
SHL/SHR/SAL/SAR reg(8 ou 16 bits), CL
Fonctionnement :
SHL ou SAR (instructions identiques)

SHR

SAR

Positionnement des indicateurs :


OF, SF, ZF, PF et CF sont positionns.
OF na de signification que pour un shift de 1 bit.
OF et AF sont modifis uniquement si shift gauche.
OF est mis 0 si CF est identique au bit de signe et mis 1 dans le cas contraire.
Les indicateurs ne sont pas positionns si shit de 0 position.

- 21 -

Soors A.

3. Les instructions de rotations


Utilisations possibles :
ROL/ROR/RCL/RCR reg(8 ou 16 bits), 1
ROL/ROR/RCL/RCR mem(8 ou 16 bits), 1
ROL/ROR/RCL/RCR reg(8 ou 16 bits), CL
Fonctionnement :
ROL

ROR

RCL

RCR

Positionnement des indicateurs :


OF et CF sont positionns et les autres indicateurs sont inchangs
OF na de signification que pour une rotation de 1 bit
OF et CF sont modifis quel que soit le sens de la rotation
Rotation gauche :
- OF mis 0 si CF est identique au bit de signe
- OF mis 1 si CF est diffrent du bit de signe
Rotation droite :
- OF mis 0 si le bit rentr gauche est identique au bit de signe
- OF mis 1 si le bit rentr gauche est diffrent du bit de signe
Indicateurs non positionns si rotation de 0 position

- 22 -

Soors A.

8. La pile (ou stack)


1. Description

Zone de mmoire utilise comme zone de travail (sauvegarde temporaire dinformations, utilise par
linstruction CALL, INT, ).
Rservation de la pile laide de la directive .STACK
Exemples : .STACK 100h
rservation de 256 bytes dans le segment SS
.STACK
rservation de 1Ko
La pile fonctionne comme une pile dassiette ou LIFO. Elle commence de haut en bas ; les informations
sont donc stockes dans la mmoire de la partie haute vers la partie basse.
Registre pointeur associ au fonctionnement de la pile : SP. Au chargement du programme, il reoit la
taille de la pile.
Exemples : Si .STACK 100h alors SP = 0100
Si .STACK
alors SP = 0400
Registre de segment associ au fonctionnement de la pile : SS. Au chargement du programme, il reoit
le numro de paragraphe de chargement de la pile.

2. Linstruction PUSH
Linstruction PUSH place une donne de deux octets sur le sommet de la pile.
Utilisation :
PUSH reg(16 bits)
PUSH mem(16 bits)
Exemples :
PUSH AX
PUSH DS
PUSH ES :[3]
PUSH [3]

; DS est le segment de donnes par dfaut

Fonctionnement : SP est dcrment de deux et ensuite loprande source est plac dans le stack segment
ladresse effective contenue dans SP c'est--dire :
SUB SP, 2
MOV BP, SP
MOV [BP], source
O source est un registre ou une mmoire.

- 23 -

Soors A.

3. Linstruction POP
Linstruction POP va chercher dans la pile deux octets au sommet de la pile.
Utilisation :
POP reg(16 bits)
POP mem(16 bits)
Exemples :
POP AX
POP DS
POP ES :[3]
POP [3]

; DS est le segment de donnes par dfaut

Fonctionnement : le mot dans SS ladresse effective SP est transfr dans loprande de destination et ensuite
SP est incrment de 2 c'est--dire :
MOV BP, SP
ADD SP, 2
MOV dest, BP]
O dest est un registre ou une mmoire.
Cas particulier : POP SP : SP nest pas incrment de 2.

4. Exemples dutilisations de la pile


4.1. Echanger le contenu de AX et BX

PUSH AX
MOV AX, BX
POP BX

4.2. Calcul de la somme des 300 premiers entiers sans tableau

debut :

charge :

somme :

.MODEL SMALL
.STACK 600
.CODE
MOV BX, 0
MOV AX, 1
MOX CX, 300
PUSH AX
INC AX
LOOP charge
MOV CX, 300
POP AX
ADD BX, AX
LOOP somme
MOV AH, 4CH
INT 21H
END debut

; BX reoit la somme des 300 nombres

;chargement des 300 entiers dans la pile

; le rsultat est dans BX

- 24 -

Soors A.

4.3. Remplissage dun tableau de 5 lignes et 3 colonnes avec les 15 premiers entiers

tab

debut :

boucle_int :
boucle_ext :

.MODEL SMALL
.DATA
db 5 dup(3 dup(?))
.STACK
.CODE
MOV AX, @data
MOV DS, AX
LEA BX, tab
MOV AL, 1
MOX CX, 5
XOR DI, DI
PUSH CX
MOV CX, 3
MOV [BX][DI], AL
INC AL
INC DI
LOOP boucle_int
POP CX
LOOP boucle_ext
MOV AH, 4CH
INT 21H
END debut

;tableau de 5 lignes
;3 colonnes
; placement correct sur le
; segment de donnes
; ou MOV BX, offset tab

5. Linstruction PUSHF

Empile le registre des indicateurs dtats (FLAGS)


Les indicateurs dtats ne sont pas modifis par lopration
Utilisation : PUSHF (pas doprande)

6. Linstruction POPF

Retire le mot situ au sommet de la pile et le copie dans le registre des indicateurs dtat
Les indicateurs sont tous affects par cette opration
Utilisation : POPF (pas doprande)

- 25 -

Soors A.

9. Les procdures
1. Dfinition

Blocs dinstructions permettant de raliser un traitement spcifique.


Elles permettent de dcouper un programme en modules distincts qui pourront tre appels depuis
nimporte quel point du programme.

2. Dclaration
Forme gnrale :

nom PROC

RET
nom ENDP
o - nom est le label
- PROC est linstruction qui indique le dbut de la procdure
- ENDP est linstruction qui indique la fin de la procdure
- RET est linstruction qui rend la main au programme appelant

3. Appel (CALL)
Forme gnrale : CALL nom o CALL est linstruction qui permet dexcuter une procdure et nom est le nom
de la procdure.
CALL va initialiser un PUSH et une modification de IP.
Fonctionnement de CALL : linstruction CALL provoque le dpt automatique sur la pile (c'est--dire un PUSH)
de ladresse de retour, c'est--dire ladresse de linstruction qui suit CALL en mmoire.
Appel intra-segment : seul IP est empil
Appel extra-segment : IP et CS sont empil
Avant :
SP ->

A
B

Intra :
SP ->

A
B
IP

Inter :

SP ->

A
B
CS
IP

Fonctionnement de RET : linstruction RET met fin lexcution de la procdure et provoque lexcution de
linstruction dont ladresse se trouve sur la pile (c'est--dire ladresse de retour qui fut empile par le CALL).
RET effectue donc un POP qui vient charger IP (cas dappel intra-segment) ou CS et IP (cas dappel intersegment).
Remarque : veillez utiliser la directive .STACK vu que les procdures utilisent la pile.

4. Type de procdure
Le type de procdure (NEAR ou FAR) est donne en argument de PROC. Si le type nest pas prcis, il est en
accord avec le modle :
NEAR : small et compact
FAR : mdium, large et huge

- 26 -

Soors A.

5. Passage de paramtres une procdure


Il y a deux manires de passer des paramtres :
Par les registres : rapide mais limit au nombre de registres
Par la pile : il suffit dempiler avant le CALL. Le registre BP sera utilis pour accder aux paramtres
situs dans la pile.
Remarque : en langage C, le programme appelant empile lui-mme les paramtres passer la fonction et
dpile les paramtres de retour.
Exemples :
Calcul de la somme de deux nombres passs comme paramtres en utilisant les registres AX et BX
(passage par valeur).

a
b
debut :

somme

somme

.MODEL SMALL
.STACK
.DATA
dw 1234h
dw 5678h
.CODE
MOV AX, @data
MOV DS, AX
MOV AX, a
MOV BX, b
CALL somme
MOV AH, 4CH
INT 21H
PROC
ADD AX, BX
RET
ENDP
END debut

;calcul la somme de 2 nombres


; input : AX, BX
; output : AX

- 27 -

Soors A.

Calcul de la somme de deux nombres passs comme paramtres en utilisant les registres AX et BX
(passage par adresse).

a
b
result
debut :

somme

somme

.MODEL SMALL
.STACK
.DATA
dw 1234h
dw 5678h
dw ?
.CODE
MOV AX, @data
MOV DS, AX
MOV SI, offset a
MOV DI, offset b
MOV BX, offset result
CALL somme
MOV AH, 4CH
INT 21H
PROC
MOV AX, [SI]
ADD AX, [DI]
MOV [BX], AX
RET
ENDP
END debut

;calcul la somme de 2 nombres


;input : adresse des oprandes
;output : rsultat dans BX
; (grce ladresse)

Calcul la somme de deux nombres pass comme paramtres en utilisant la pile

a
b
result
debut :

somme

somme

.MODEL SMALL
.STACK
.DATA
dw 1234h
dw 5678h
dw ?
.CODE
MOV AX, @data
MOV DS, AX
PUSH result
PUSH b
PUSH a
CALL somme
POP a
POP b
POP result
MOV AH, 4CH
INT 21H
PROC
PUSH BP
MOV BP, SP
MOV AX, [BP+4]
ADD AX, [BP+6]
MOV [BP+8], AX
POP BP
RET
ENDP
END debut

;calcul la somme de 2 nombres


;input : a et b sur la pile
;output : rsultat dans la pile

- 28 -

Soors A.

10. Les interruptions


1. Types dinterruptions
Il y a deux types dinterruptions :
Interruptions matrielles : commandes par le cblage lectrique (ex : signal dhorloge, clavier, )
Interruptions logicielles : commandes par le programmes (ex : ouvrir un fichier, )

2. Les interruptions matrielles


Quand un microprocesseur excuter un programme, il peut tre interrompu par une interruption sur une des
broches du microprocesseur (INTR ou NMI).
INTR = interruption masquable (dont on peut condamner laccs par logiciel en activant lindicateur IF
Interupt Fag).
NMI = interruption non masquable. On peut interdire son fonctionnement par logicielle ce qui offre
une trs haute priorit.
Remarque : pour INTR, il existe une broche INTA Interrupt Acknoledge que le microprocesseur active quand il
a reu une demande dinterruption et quil est prt la prendre en compte.

3. Les interruptions logicielles


Instructions INT dans le programme en prcisant le numro dordre.

4. Vecteur dinterruption
Une interruption logicielle est caractrise par son numro dentre dans le vecteur des interruptions. Ce
vecteur occupe les 1024 premiers octets de la mmoire et est compos de 256 lments. Chaque lment
contient une adresse code sur 4 octets de a forme segment : offset. Cette adresse est celle de la premire
instruction de la procdure de traitement de linterruption.
Remarque : les interruptions de 0 63 sont rserves par le systme (ex : 21h).

5. Traitement des interruptions


5.1. Logicielles
Une instruction INT suivie du numro de linterruption
Le registre des indicateurs dtat, CS et IP sont empils ( CALL)
TF et IF sont remis 0
CS et IP sont chargs avec ladresse du programme dinterruption
Le programme se poursuit en CS :IP
Le programme de linterruption se termine par IRET
Extraction de la pile de IP, puis CS, puis les indicateurs
Le programme reprend en CS :IP
5.2. Matrielles
Idem interruptions logicielles, mais linstruction en cours est termine avant lexcution de linterruption.

6. Instructions spcifiques

INT
IRET
HLT (halte jusqu une interruption ou rinitialisation)
STI : mise 1 de IF
CLI : mise 0 de IF

- 29 -

Soors A.

7. Utilisations des interruptions

Pour accder aux fonctions du systme (crire un caractres, ouvrir un fichier) crite par Microsoft.
Possibilit de dtourner les interruptions de MS-DOS.
Fonctions universelles au DOS.

8. Fonctions universelles au DOS (lies INT 21H)

Fonction 4CH : fin de programme avec code de retour AL. Ce code de retour peut tre test avec la
commande ERRORLEVEL.
Fonction 09H : affichage dune chane de caractres lemplacement actuel du curseur.
Fonction 0AH : lecture dune chane de caractres au clavier.
- la chane lue sera disponible DS :DX
- 1er octet = longueur maximum de la chane
- 2e octet = longueur de la chane lue
- la chaine dbute rellement au 3e octet
Traitement de fichiers (3CH, 5BH, ).

9. Autres interruptions utiles

Fonction 17H, service 0, imprime un caractre


Fonction 16H, service 01h, lecture d'un caractre en provenance du clavier.

- 30 -

Soors A.

S-ar putea să vă placă și