Déclaration des variables

Transcription

Déclaration des variables
30/01/2016
DÉCLARATION DES
DONNÉES & MODES
D’ADRESSAGES
Par :
Khaled Hassine
[email protected]
23/08/2010
Khaled Hassine
1
PLAN
2
PLAN
Introduction
Introduction
Déclaration des constantes
Déclaration des constantes
Déclarations des variables
Déclarations des variables
Modes d’adressages
Modes d’adressages
A retenir
30/01/2016
Khaled Hassine
30/01/2016
A retenir
Khaled Hassine
3
30/01/2016
Khaled Hassine
4
1
30/01/2016
Introduction
PLAN
Introduction
Déclaration des constantes
Déclarations des variables
Modes d’adressages
A retenir
30/01/2016
Khaled Hassine
5
Déclaration des constantes


Déclaration des constantes
L’assembleur parcoure le code source et change
chaque occurrence de la constante par sa valeur
Exemple :
23/08/2010
6
Introduction
<Identificateur de Constante> EQU <Value>
<Identificateur de Constante> = <Value>
A
B
C
D
Khaled Hassine
PLAN
Syntaxe :


30/01/2016
EQU
=
EQU
=
Déclarations des variables
Modes d’adressages
126
1FH
101B
'Hello'
Khaled Hassine
A retenir
7
30/01/2016
Khaled Hassine
8
2
30/01/2016
Déclaration des variables
Directives de déclaration des variables
Directiv
e
Signification
Réserver en mémoire
DB
Define Byte
1 octet
DW
Define Word
2 octets
DD
Define Double
Word
4 octets
DQ
Define Quad
WordDirectiv
e
8 octets
Signification
Interprétation de la
valeur
D
Decimal
décimal (par défaut)
B
Binary
en binaire
O
Octal
en octal
H
Hexadécimal
23/08/2010
<Identificateur> <Type Elément> [[<Taille > DUP]
[<Valeur initiale> [D/B/O/H]]/ ?/"<Caractères >"]
 <Identificateur> de la variable
 <Type Elément> : DB, DW, DD, DQ
 <Taille> : Taille de la structure répétitive (entier)
 DUP : directive de structures répétitives (DUPlicate)
 <Valeur initiale> la valeur initiale de chaque variable
' ' : caractères ou chaine de caractères (codés en ASCII),
? : initialisée à 0 (zéro par défaut 0) ,
Si plusieurs valeurs initiales séparées par des virgules, réservation
d'une suite d'emplacements, à chacun est affectée une valeur


en hexadécimal
Khaled Hassine
9
23/08/2010
DB : Exemple …
Déclaration
Mémoire
Adresse
Contenu
A
DB
126
0
7EH
B
DB
1FH
1
1FH
Ch
DB
DB
101B
2
'LA'
3
Gamma DW
Beta
05H
DB
9,1AH,-1,'B',?
5
Mémoire
?
DW 1234H
4CH
V1
41H
Tab
DB 2 DUP (5)
09H
V2
1AH
DW 2 DUP (0AFFH)
FFH
42H
00H
23/08/2010
Khaled Hassine
10
DW et vecteurs : exemple …
Déclaration
C
Khaled Hassine
11
23/08/2010
Khaled Hassine
Adresse
Contenu
0
00H
1
00H
2
34H
3
12H
4
05H
5
05H
6
FFH
7
0AH
8
FFH
9
0AH
12
3
30/01/2016
Le 8086 : Architecture interne
PLAN
EXECUTION UNIT (EU)
Introduction
AX
BX
CX
DX
Déclaration des constantes
BUS INTERFACE UNIT (BIU)
0
AL
BL
CL
DL
Accumulateur
Base
Compteur
Données (E/S)
SI
DI
BP
SP
Registres généraux
BUS MULTIPLIXE
Modes d’adressages
Flags Registrs
SEQUENCEUR
13
Principaux registres du Pentium
Khaled Hassine
15
CS
DS
SS
ES
IP
0
GENERATION D’ADRESSES
&
BUS DE CONTROLE
23/08/2010
CHAINE D’INSTRUCTIONS
Buffer
ALU
Registres d'état
et de contrôle
Khaled Hassine
Registres de Segment
OPERANDES
A retenir
23/08/2010
AH
BH
CH
DH
Source index
Destination index
Base pointer
Stack pointer
Déclarations des variables
30/01/2016
7
15
Khaled Hassine
14
Classification des registres du 8086
15
23/08/2010
Khaled Hassine
16
4
30/01/2016
Adressage des registres

Les deux opérandes sont des registres : from
register to register




Adressage immédiat


N’est pas vraiment un mode d’adressage puisqu’il
n’accède pas à la mémoire
Mode d’adressage très rapide : seul le bus interne est
utilisé
L'opération se fait sur un ou 2 registres



Exemples :


INC AX ; incrémenter le registre AX
MOV AX, BX ; Copier le contenu de BX dans AX
23/08/2010
Khaled Hassine

17
–
Inconvénient : valeur figée dans l'instruction =>
la modifier oblige à modifier le programme.
Exemple :
MOV AH, 30H
Khaled Hassine

Segment de code,
Stocke les instructions
Chaque registre segment est associé à un ou plusieurs registres d’offset afin de
former une adresse physique réelle :
Registre segment Registres associés
CS
SS
DS
ES
DS : Data Segment

–
–
Segment de données,
Réservation de la mémoire pour
les variables
–
–

–
Une adresse logique est exprimée en hexadécimal sous la forme
SSSS:OOOOoù SSSS est le segment et OOOO est l’offset. La valeur de
l’adresse physique sur 20 bits est :

Exemple : pour les instructions, CS:IP est utilisé.
SSSS0H+OOOOH = SSSS*16+OOOO.
Utilisation spécifique, sur
demande uniquement
Souvent utilisé avec DI
CS = 1111H
IP = AAAAH.
L’adresse de l’instruction pointée par IP est 11110H+ 0AAAAH = 1BBBAH.
SS : Stack Segment

Segment de pile

UAL de
calcul d’adresse
23/08/2010
IP
SP et/ou BP
BX et/ou SI et/ou DI

ES : Extra Segment

18
Les registres segments et associations
CS : Code Segment
–
n’est pas vraiment un mode d’adressage
très rapide : seul le bus interne est utilisé
Le deuxième opérande est directement codé dans
l’instruction
23/08/2010
La segmentation : synoptique

Pas d’accès à la mémoire :
Khaled Hassine
19
Pour les instructions affectant la pile (PUSH, POP, CALL, RET, etc.), SS:SP
est utilisé.
DS:SI et ES:DI sont habituellement utilisés pour travailler sur des tableaux ou
des chaînes de caractères.
23/08/2010
Khaled Hassine
20
5
30/01/2016
Adressage direct
Adressage direct …
Le plus simple et rapide des modes d’adressage
 L’opérande est désigné par l’adresse donnée dans
l’instruction
 L'adresse réelle est calculée comme suit (registre de
Formesegment
générale par défaut DS) :
Exemple


On peut spécifier (forcer) le registre de segment :

Exemple :
MOV
ES:M, AX
On peut spécifier directement l’adresse de la
variable:
Exemple :
DS*10H+@<Identificateur
de la variable>
<Opération> <Identificateur
variable>
DIV M
<Opération> <Identificateur variable>, <Registre>
MOV M, AX
<Opération> <Registre>, <Identificateur variable>
MOV AX, M
<Opération> <Identificateur variable>, <Constante>
MOV M, 1
23/08/2010
Khaled Hassine
MOV
MOV
21
23/08/2010
Adressage indirect par registre

L’opérande est désignée par une adresse placée dans le registre d’adresse
donnée dans l’instruction

BX, BP, SI, DI peuvent servir de registre d’adresse (de pointeur)












En langage évolué, une référence à un élément de tableau s'écrit : TAB(i)
Dans l'instruction assembleur correspondante elle s'écrit : TAB[registre d'index]
En ASM, le programmeur gère le registre d'index
Pour accéder au ième élément du tableau , on doit réaliser :


Registre d'index ← (i - 1)*n
où n = nb d'octets occupés par un élément

On utilise l’un des registres d’Index : SI ou DI
L'adresse réelle est calculée comme suit (registre de segment par défaut DS) :

Exemple :

MOV AX, [BX] ; AX ← le contenu de l'adresse DS:BX
MOV AX, [BP] ; AX ← le contenu de l'adresse SS:BP
MOV AX, [SI] : AX ← le contenu de l'adresse DS:SI
MOV AX, [DI] : AX ← le contenu de l'adresse DS:DI
MOV AX, [ES:BP] : AX ← le contenu de l'adresse ES:BP
Khaled Hassine
22
Intérêt : Parcourir les structures itératives

Le registre doit être entre [ ].
Si BP est utilisé, le registre de segment par défaut est SS.
Pour les autres registres, DS est le registre de segment par défaut
23/08/2010
Khaled Hassine
Adressage indexé
Exemples :

ES :[0C040H], AL
[0C040H], AL
DS*10H + @<Vecteur> + <SI/DI>x <Taille d’un élément>
TAB DB 1, 10, 30H
MOV SI, 1
ADD AH, TAB[SI] ; AH  AH+TAB[SI]
23
23/08/2010
Khaled Hassine
24
6
30/01/2016
Adressage basé (relatif)
Adressage indexé avec déplacement

On peut préciser un déplacement qui sera ajouté au contenu de
Ri pour déterminer l’offset,






INST Reg. , [<Reg. Seg.> : <Reg ind.> + dep]
INST [<Reg. Seg.> : <Reg ind.> +dep] , Reg.
INST taille [<Reg. Seg.> : <Reg ind.> +dep] , Cste
INST <Reg> , [<Reg. Seg.> :<Reg. Base>+dep]
INST [<Reg. Seg.>:<Reg. Base>+dep] , <Reg>
INST taille [<Reg. Seg.> :<Reg. Base>+dep] , im
Exemples :





MOV AX, [SI] ; AX ← le contenu de l'adresse DS:SI
MOV AX, [SI+50] ; AX ← le contenu de l'adresse DS:SI+50
MOV AX, [DI-8] ; AX ← le contenu de l'adresse DS:DI-8
MOV AX, [ES:SI+4] ; AX ← le contenu de l'adresse ES:SI+4
23/08/2010
Khaled Hassine
Intérêt : manipulation des structures.
L’offset se trouve dans l’un des deux registres de base
BX ou BP, auxquels est ajouté un déplacement
Exemples :
MOV AX, [BX+5] ;
AX ← le contenu de l'adresse DS:BX+5
MOV AX, [BP-200] ;
AX ← le contenu de l'adresse SS:BP-200
25
23/08/2010
Khaled Hassine
26
Khaled Hassine
28
Adressage Basé indexé


L’adresse de l'opérande est la somme d'un registre de base, d'un registre d'index et
éventuellement d'un déplacement.
Les couples des registres de base et d’index possibles sont :





Si le registre segment n'est pas spécifié, le segment par défaut du registre de base
est utilisé :




BP-DI
BP-SI
BX-DI
BX-SI
INST Reg. , [<Reg. Seg.> : <Reg. Base>+<Reg ind.> +dep]
INST [<Reg. Seg.> : <Reg. Base>+<Reg ind.> +dep] , R
INST <taille> [<Reg. Seg.> : <Reg. Base>+<Reg ind.> +dep] , Cste
Exemples :




MOV AX,[BX+SI] ; AX ← le contenu de l'adresse DS:BX+SI
MOV AX,[BX+DI+5] ; AX ← le contenu de l'adresse DS:BX+DI+5
MOV AX,[BP+SI-8] ; AX ← le contenu de l'adresse SS:BP+SI-8
MOV AX,[BP+DI] ; AX ← le contenu de l'adresse SS:BP+DI
23/08/2010
Khaled Hassine
27
23/08/2010
7

Documents pareils