Assembleur 8086
-
Upload
jamesamine -
Category
Documents
-
view
248 -
download
0
Transcript of Assembleur 8086
-
8/13/2019 Assembleur 8086
1/45
Assembleur du 8086
-
8/13/2019 Assembleur 8086
2/45
Assembleur 8086
Gestion des adresses mmoires sur deux mots :
- 1 mot pour le segment,- 1 mot pour le dplacement dans le segment : l'offset ou adresse relative.
Rappels :
8 bits
= 1 octet
= 1 byte (anglais)
16 bits
= 1 mot (de 2 octets)
= 1 word (anglais)
On peut calculer l'adresse relle par la formule suivante :
adresse = 16 * Segment + Offset
Segment
Offset
Adresse (20 bits)
-
8/13/2019 Assembleur 8086
3/45
Remarque:
Deux segments conscutifs ne sont pas disjoints.
Exemple :
Ces deux adresses indiquent le mme octet en mmoire :
0000:0010 et 0001:0000
= 00010 = 00010F000:FFFF = FFFFF
Mmoire
Haut
1 Mo
Bas
0000:0000 = 00000
-
8/13/2019 Assembleur 8086
4/45
Zones mmoires rserves par le micro-processeur :
- les 16 octets les plus hauts sont rservs la mise en service
(Que faire quand la machine se met sous tension ?)(F000:FFF0 --> F000:FFFF),
- les 1024 octets les plus bas sont rservs aux vecteurs
d'interru tion (0000:0000 --> 0000:03FF).
Zones mmoire rserves par l'architecture, l'organisation interne
de la machine :
- une partie de la mmoire est constitue de ROM (Read Only
Memory) et contient les oprations de base de la machine,
- une partie tait rserve la mmoire cran :
+ partir de B000:0000 pour un cran monochrome,
+ partir de B800:0000 pour un cran couleur.
-
8/13/2019 Assembleur 8086
5/45
Les registres
On distingue quatre groupes de registres :- les registres de donnes,
- les registres de segments,
- les registres pointeurs et index,
- le registre d'tat.
-
8/13/2019 Assembleur 8086
6/45
-
8/13/2019 Assembleur 8086
7/45
Les registres de donnesCes registres, auquel un rle privilgi a t attribu, peuvent tre
considrs comme un registre de 16 bits ou deux de 8 bits :
+ AX (ou AL et AH pour respectivement la partie basse (Low) et haute
(High)) appel Accumulateur, utilis pour les oprations arithmtiques,
+ BX (ou BL et BH) appel registre de base ou base (Base register),
utilis pour l'adressage de donnes en mmoire,
+ CX (ou CL et CH) appel compteur (Count register), utilis commecompteur de boucle,
+ DX (ou DL et DH) appel registre de donnes (Data register), utilis
en complment d'opration arithmtique.
-
8/13/2019 Assembleur 8086
8/45
Les registres de segments
Ces registres indiquent les segments des zones standards d'un
programme :
+ CS (Code Segment) : Segment de code c'est dire contenant les
' ,
+ SS (Stack Segment) : Segment de pile c'est dire contenant la pile,
+ DS (Data Segment) : Segment de donnes c'est dire contenant lesdonnes en cours d'utilisation,
+ ES (Extra Segment) : Segment de donnes supplmentaire.
-
8/13/2019 Assembleur 8086
9/45
Les registres Pointeurs et Index
Ces registres vont contenir des offsets pour adresser la mmoire dansles segments vus prcdemment :
+ IP Instruction Pointer associ CS CS:IP donne l'adresse de la
prochaine instruction excuter,
+ BP (Base Pointer) et SP (Stack Pointer), associs SS, SS:SP
indique le sommet de la pile,
+ SI (Source Index) et DI (Destination Index), registres d'index,
utiliss pour parcourir des tableaux, en standard, SI est associ DS,
DI ES.
-
8/13/2019 Assembleur 8086
10/45
Le registre dtat
Ce registre de 16 bits contient des indicateurs (flags ou drapeaux) sur
l'tat du micro-processeur, en particulier la suite d'oprationsarithmtiques ou de comparaison.
DF TFIF SF ZFOF PFAF CF
Overflow Flag :Dpassement de capacit
NV : Not oVerflow
OV : OVerflow
Direction Flag :
UP : UP
DN : DowN
Interruption Flag :
Autorisation des interruptions
DI : Disable Interruption
EI : Enable Interruption
Trap Flag :
Indicateur du pas pas
Sign Flag :
Bit de signe
(bit 7 ou 15)
PL : PlusNG : NeGative
Auxiliary Carry Flag :
idem CF sur les quartets
bas
NA : Not Auxiliary CarryAC : Auxiliary Carry
Carry Flag :
Bit de retenue
CY : CarrY
NC : Not Carry
Parity Flag :
Bit de parit (nb de bit 1)
PO : Parity Odd (Impaire)PE : Parity Even (Paire)
Zero Flag :
Bit 1 si le rsultat est 0
NZ : Not ZeroZR : Zero
-
8/13/2019 Assembleur 8086
11/45
Les instructions
Les instructions sont constitues de deux zones :
" "
mnmonique
de linstructionoprandes
, ,
destination puis source
Espace ou
tabulation
Exemple :
MOV dest,source pour effectuer un transfert de
source vers dest
-
8/13/2019 Assembleur 8086
12/45
Il existe diffrentes manires d'accder aux informations, diffrents
modes d'adressage :- adressage par registre :
Utilisation des noms des registres (AX, BX, CX, ...)
Les modes dadressage
Exemples : MOV AX,BX
MOV AL,BL
- adressage immdiat :
Utilisation d'une valeur donne, d'une constante
Exemples : MOV AX,460H
MOV AL,-30
-
8/13/2019 Assembleur 8086
13/45
Les modes dadressage (2)
- les adressages en mmoire :
+ adressage direct :Utilisation de l'adresse mmoire o aller chercher la donne
,
--> Offset dans DS
+ adressage indirect par registre :
Utilisation de l'adresse mmoire contenue dans un registre (BX, BP,
SI, DI)
Exemple : MOV BX,300H
MOV AX,[BX]
-
8/13/2019 Assembleur 8086
14/45
Les modes dadressage (3)
+ adressage relatif une base :Utilisation de l'adresse mmoire obtenue par la somme d'un
registre de base (BX ou BP) et un dplacement (dep)
Il existe diffrentes notations :
[BX + dep]
[BX] + dep
dep[BX]
Exemple : MOV BX,2F0H
MOV AX,[BX+10H]
-
8/13/2019 Assembleur 8086
15/45
Les modes dadressage (4)+ adressage direct index :
Utilisation de l'adresse mmoire obtenue par la somme d'un
dplacement (dep) et un registre d'index (SI ou DI)
Exemple : MOV DI,10H
, +
+ adressage index par rapport une base :
Utilisation de l'adresse mmoire obtenue par la somme d'un registre
de base (BX ou BP), d'un registre d'index (SI ou DI) et d'un
dplacement (dep).
Exemple : MOV DI,15H
MOV BX,0BHMOV AX,[BX+DI+1E0H]
-
8/13/2019 Assembleur 8086
16/45
Les instructions
On distingue 6 types d'instructions :- les instructions de transfert de donnes,
- les oprations arithmtiques et logiques,
- ,
- les instructions de travail sur les chanes,- les interruptions,
- les instructions de contrle du processeur et du registre d'tat.
Une instruction ncessite un certain nombre de cycles pour sexcuter.
La dure d un cycle dpend de la frquence dhorloge.
-
8/13/2019 Assembleur 8086
17/45
Les instructions de transfert
La principale instruction de transfert :
MOV destination,source
Transfert de l'octet ou du mot de source dans destination
impossible de faire les transferts mmoire/mmoire, registre de
segment/immdiat,
impossible d'utiliser IP
-
8/13/2019 Assembleur 8086
18/45
Les instructions de transfert (2)
PUSH source
Empiler un mot sur la pile
0000
Principe de la pile
= -
(SP+1; SP) = source
POP destination
Dpiler un mot sur la pile
destination = (SP+1; SP)
SP= SP + 2
-
8/13/2019 Assembleur 8086
19/45
Les oprations logiquesAND destination,source
ET logique entre destination et source, le rsultat est mis dans destination
OR destination,source
OU logique entre destination et source, le rsultat est mis dans
destination
X R dest nat on,sourceOU exclusif entre destination et source, le rsultat est mis dans
destination
NOT destinationNgation logique de destination, le rsultat est mis dans destination
TEST destination,source
ET logique entre destination et source pour positionner les indicateurssans modification de destination
-
8/13/2019 Assembleur 8086
20/45
Les oprations arithmtiquesCBW
Convertir un octet en un mot en tenant compte du signe (AL --> AX)
Addition
destination = destination + source
ADC destination,source
Addition avec retenue (Add with carry)
destination = destination + source + CF
INC destination
Incrmentationdestination = destination + 1
-
8/13/2019 Assembleur 8086
21/45
Les oprations arithmtiques (2)
Soustraction
SUB destination,source
destination = destination - source
SBB destination,source
Soustraction avec retenue (Subtract with Borrow)
destination = destination - source - CF
DEC destination
Dcrmentation
destination = destination - 1
-
8/13/2019 Assembleur 8086
22/45
Les oprations arithmtiques (3)
NEG destination
Ngation
-
CMP destination,source
Comparaison
Soustraction (destination - source) pour le positionnement des
indicateurs, sans modification de destination
-
8/13/2019 Assembleur 8086
23/45
-
8/13/2019 Assembleur 8086
24/45
Les oprations arithmtiques (5)Division
DIV sourceDivision non signe
si source est un octet, AL = AX DIV source
=
si source est un mot, AX = (DX; AX) DIV sourceDX = (DX; AX) MOD source
IDIV source
Division signe
si source est un octet, AL = AX DIV source
AH = AX MOD source
si source est un mot, AX = (DX; AX) DIV sourceDX = (DX; AX) MOD source
-
8/13/2019 Assembleur 8086
25/45
Les oprations de dcalage
SAR destination,count
(o count = 1 ou CL pour toutes les oprations de dcalage et de rotation)
Shift Arithmetic Right : Dcalage arithmtique droite
= , ,
Le bit de poids fort est laiss son ancienne valeur (conservation du
signe).
Le bit limin est mis dans CF.
CF
-
8/13/2019 Assembleur 8086
26/45
Les oprations de dcalage (2)SHL destination,count ou SAL destination,count
Shift Logical Left ou Shift Arithmetic Left : Dcalage gauche
Si count = 1, multiplication par 2
Le bit de poids faible est mis 0.
Le bit limin est mis dans CF.
SHR destination,count
Shift Logical Rigth
Dcalage logique droiteSi count = 1, division entire par 2, avec le reste dans CF
Le bit de poids fort est mis 0.
Le bit limin est mis dans CF.
CF 0
CF0
-
8/13/2019 Assembleur 8086
27/45
Les oprations de dcalage (3)
ROL destination,countRotate Left : Rotation gauche
Faire count fois
CF prend la valeur du bit de poids fort
Tous les bits sont dcals de 1 vers la gauche
Le bit de poids faible prend la valeur de CF (de l'ancien bit de poids fort)
CF
-
8/13/2019 Assembleur 8086
28/45
ROR destination,count
Rotate Right : Rotation droite
Faire count foisCF prend la valeur du bit de poids faible
Tous les bits sont dcals de 1 vers la droite
Le bit de poids fort prend la valeur de CF (de l'ancien bit de poids faible)
CF
RCL destination,countRotate Left through Carry : Rotation gauche travers "Carry Flag"
Faire count fois
Tous les bits sont dcals de 1 vers la gauche
Le bit de poids faible prend la valeur de CFCF prend la valeur du bit de poids fort limin
CF
-
8/13/2019 Assembleur 8086
29/45
Les oprations de dcalage (5)RCR destination,count
Rotate Right through Carry : Rotation droite travers "Carry Flag"Faire count fois
Tous les bits sont dcals de 1 vers la droite
Le bit de oids fort rend la valeur de CF
CF prend la valeur du bit de poids faible limin
CF
Exercices :1/ Faire l'addition des octets contenus en 40H et 41H, mettre le rsultat en 42H.
2/ Multiplier [40H] par 2, mettre le rsultat en 41H
3/ Mettre zro du quartet de poids fort de [40H], mettre le rsultat en 41H
4/ Mettre zro l'octet [40H]
5/ Partager [40H] en deux quartets l'un en 41H, l'autre en 42H
-
8/13/2019 Assembleur 8086
30/45
Les instructions de contrle
Les instructions
de branchement inconditionnel
JMP destination
JumpSaut dans le mme segment (NEAR) ou dans un autre segment (FAR)
Modification de IP (Saut Intra-segment) ou CS et IP (Saut Inter-segment)
-
8/13/2019 Assembleur 8086
31/45
Les instructionsde branchement conditionnel
JA ou JNBE CF = 0 et ZF = 0Jump if Above / if Not Below or Equal
JBE ou JNA CF = 1 ou ZF = 1
JAE ou JNC ou JNB CF = 0
Jump if Above or Equal / if Not Carry / if Not Below
JB ou JC ou JNAE CF = 1
Jump if Below / if Carry / if Not Above or equal
-
8/13/2019 Assembleur 8086
32/45
Les instructionsde branchement conditionnel (2)
JCXZ (CX) = 0Jump if CX is Zero
Jump if Equal / if ZeroJNE ou JNZ ZF = 0
Jump if Not Equal / if Not Zero
JNP ou JPO PF = 0
Jump if No Parity / if Parity Odd
JP ou JPE PF = 1
Jump if Parity / if Parity Even
-
8/13/2019 Assembleur 8086
33/45
Les instructionsde branchement conditionnel (3)
JG ou JNLE ZF = 0 et OF = SF
Jump if Greater / if Not Less nor Equal
ou = ou
Jump if Less or Equal / if Not Greater
JGE ou JNL OF = SF
Jump if Greater or Equal / if Not LessJL ou JNGE OF # SF
Jump if Less / if Not Greater nor Equal
-
8/13/2019 Assembleur 8086
34/45
Les instructionsde branchement conditionnel (4)
JNO OF = 0
Jump if No Overflow
J OF = 1
Jump if Overflow
JNS SF = 0
Jump if No SignJS SF = 1
Jump if Sign
-
8/13/2019 Assembleur 8086
35/45
Utilisation
Utilisation aprs un CMP destination,source :
Saut si Entiers Entiers
non s gn s s gn s
destination = source JE JE
destination # source JNE JNE
destination > source JA JGdestination >= source JAE JGE
destination < source JB JL
destination
-
8/13/2019 Assembleur 8086
36/45
Exercices
1/ Trouver le plus grand (puis le plus petit) des deux nombres des
adresses 38H et 40H, la mettre en 42H
2/ Faire la somme des valeurs contenues partir de l'adresse 42H, lenombre de valeurs additionner tant en 40H, mettre la somme en 38H
3/ Trouver le nombre de valeurs ngatives contenues partir de l'adresse
4/ De la mme manire, trouver la valeur minimum puis la valeurmaximum, puis les deux en mme temps
5/ Trouver le nombre de caractres d'une chane ASCII termine par le
caractre nul de code ASCII '0'
6/ Faire la concatnation de deux chanes ASCII termines par 0 (CH1et CH2) dans une chane RES, mettre le nombre de caractres de la
chane obtenue dans LG
7/ Convertir un octet NB en une chane de caractres numriques RES (
123 --> '123' )
-
8/13/2019 Assembleur 8086
37/45
Correction exercice 1
program plusgrandasm;
function plusgrand:integer;assembler;
asm
MOV AX,5
MOV BX,40h
cmp AX,BX
ja @plusgrand
jmp @pluspetit
@plusgrand:mov BX,42h
mov [bx],ax
jmp @fin
@pluspetit:
MOV [BX],AX
mov ax,[40h]
MOV AX,3
MOV BX,38hMOV [bx],ax
mov bx,ax
mov ax,[40h]
mov AX,bx
mov bx,42hmov [bx],ax
jmp @fin
@fin:
mov ax,[42h]
end;
var i:integer;
begin
writeln(plusgrand);
readln;
end.
-
8/13/2019 Assembleur 8086
38/45
Correction exercice 2
program sommes;
procedure initso(nb:integer);assembler;
asm
mov ax,1
,
mov ax,2
mov [44h],ax {ranger 2 dans 44h}
mov ax,3
mov [46h],ax
mov ax,4
mov [48h],ax
mov ax,5
mov [50h],axmov ax,[nb]
mov [40h],ax {ranger le nombre de repetitions dans 40h}
end;
-
8/13/2019 Assembleur 8086
39/45
function so:integer;assembler;
asmmov bx,40h
mov ax,0
mov si,0
@debut:
inc si
cmp si,[40h]jg @fin {si si > [40h] arreter}
inc bx
inc bx {passe a l adresse des donnees suivante}
add ax,[bx]
@fin:
mov bx,38h {stocke resultat dans 38h}
mov [bx],ax
end;
var i:integer;
begin
initso(2);writeln(so);
end.
-
8/13/2019 Assembleur 8086
40/45
Les instructions de contrle
du processeur et du registre d'tat
NOP
No Opration
CLC
CLD
Clear Direction Flag DF = 0
STC
=
STC
Set Carry CF = 1
CMC
Complement Carry CF = not CF
=
CLI
Clear Interruption Flag IF = 0
STI
Set Interruption Flag IF = 1
-
8/13/2019 Assembleur 8086
41/45
Les interruptions
Une interruption est semblable un appel de sous-programme maisfait toujours un appel long (segment + offset). L'adresse de
branchement n'est pas dans l'instruction, elle est indique par le
num ro e se rouve ans a a e es n errup ons ans e segmen .
On peut donc faire appel aux interruptions indpendamment des
adresses mmoires o elles se trouvent.
Les interruptions peuvent tre dclenches par le matriel (clavier,
horloge par exemple) ou par un logiciel.
-
8/13/2019 Assembleur 8086
42/45
Les interruptions (2)
INT numro
Appel d'une interruption
Sauve arde du re istre d'tat sur la ile
Mise 0 des indicateurs pas pas (TF) et d'autorisationd'interruption (IF)
Sauvegarde de CS sur la pile
Calcul de l'adresse de la table d'interruption (numro x 4)
Chargement dans CS du second motSauvegarde de IP sur la pile
Chargement du premier mot de la table dans IP
donc Saut l'adresse CS:IP
-
8/13/2019 Assembleur 8086
43/45
Les interruptions (3)
IRETRetour d'une interruption
' ,
Exemples d'interruptions :
Interruption 0 : Division par 0
Interruption 10H : Gestion d'cran
Interruption 16H : Gestion clavier
-
8/13/2019 Assembleur 8086
44/45
Codage dalgorithmes
Algorithme
Si A = B
Alors C 100
Assembleur
MOV AX, a
MOV BX, b
Assembleur optimis
MOV AX, a
MOV BX, b
non
Finsi
,
JNE sinonalors: MOV AX, 100
MOV c, AX
JMP finsi
sinon: MOV AX, 200
MOV c, AX
finsi:
,
JNE sinonalors: MOV AX, 100
JMP finsi
sinon: MOV AX, 200
finsi: MOV c, AX
-
8/13/2019 Assembleur 8086
45/45
Codage dalgorithmes (2)
Algorithme
B 10
A 1
Assembleur
MOV b, 10
MOV a, 1
Assembleur optimis
MOV b, 10
MOV a, 1PUSH AX
PUSH BX
an que a re
AA + 1Fintq
debtq: MOV AX, aCMP AX, b
JG fintq
ADD a, 1
JMP debtq
fintq: POP AX
, a
MOV BX, b
debtq: CMP AX, BX
JG fintq
INC AX
JMP debtq
fintq: MOV a, AX
POP BX
POP AX