Vous êtes sur la page 1sur 13

Chapitre III LES DONNEES ET LA MEMOIRE

III-1 / LES CONSTANTES


Une constante est une VALEUR DEFINIE par une INSTRUCTION D’ASSEMBLAGE. (Pseudo-instruction)

 Pseudo Instruction EQU

Ceci assigne une valeur à un IDENTIFICATEUR défini par le PROGRAMMEUR.

Ex :
Vrai EQU 1 ; « Vrai » est l’identificateur qu’assigne la valeur 1

Faux EQU  : « Faux » est l’identificateur qu’assigne la valeur 

Ex :
La valeur spécifiée peut être une expression qui sera évaluée lors de l’ASSEMBLAGE

Cinq EQU 2*2+1


Sept EQU Cinq+2 qui était défini à la ligne avant

III-2/ LES CONSTANTES IMMEDIATES

Ce sont des valeurs numériques définies par le PROGRAMMEUR.

Ex :  111 b (binaire)

1 FFFh (hexadecimale)

NB : Les Constantes Hexadécimales qui commencent par une LETTRE


devront être précédés de ( zero) .
Ex : BABAh

124 d ou 124 (décimal)

‘a‘ : constante de type caractère

‘ BC1DE ‘ : constante de type chaine de caractère.

NB : Avec DEBUG on utilise uniquement les NOMBRES


HEXADECIMAUX (pas besoin de suffixe h)
III-3 / LES VARIABLES

Les variables sont des ZONES MEMOIRES qui sont RESERVEES lors de l’Assemblage (avec
des Pseudo-instruction) . L’adresse des Zones Memoires ( SEGMENT:OFFSET ) est attribuée par
l’Ordinateur

 La Pseudo-instruction DB

Cette instruction définit et initialise des zones Mémoires sur un BYTE ou OCTET
Cette instruction sert à initialiser le Contenu des zones Mémoires avec des valeurs
NUMERIQUES ou des CARACTERES.

L’Adresse de ces Zones Memoires est définie par l’ordinateur ( SEGMENT :OFFSET) répérée
par l’IDENTIFICATEUR

Ex1 : Définition de la variable BYTE initialisée à 5 dont


l’identificateur est X
X DB 5
Ex2 : Définition d’une zone de 3 éléments de type BYTE

XYZ DB 2, 3,4

Ex3 : Définition d’une variable BYTE NON INITIALISEE

Autre DB ?

Ex4 : Définition d’un Tableau NON INITIALISE de 5 Eléments de types BYTE

Table DB 5 DUP ( ?)

Ex5 : Définition d’une Table de 25 Eléments - (5*5=25)

( le premier initialisé à 1, le second à 2,le troisième à 3 , etc… )


AutreTab1 DB 5 DUP (1,2,3,4,5)

Ex6 : Définition d’une Table de 20 Eléments (le premier initialisé à 0, le second à 1, le troisième
à 0 , le quatrième à 1, etc…)

AutreTab2 DB 10 DUP (,1)

NB : DUP signale à l’Assembleur de DUPLIQUER l’instruction.

 L’Assembleur répète les valeurs (…) jusqu’à ce que la Table soit entièrement remplie
.

 La Pseudo-instruction DW

Cette instruction définit et initialise des zones Mémoires de 2 BYTES ou 2 Octets ou


MOT ou WORD, cette instruction sert à initialiser des zones mémoires avec des
VALEURS NUMERIQUES.

Ex1 : Définition d’une variable WORD (2 BYTES) initialisée à 1

Cent DW 1
Ex2 : Définition d’une zone de 3 Eléments de type Word.

Trois DW 1, 2, 3

Ex3 : Définition de Tableau NON INITIALISE de 5 éléments de type WORD.

Table W DW 5 DUP ( ?)

III-4 / LES CHAINES DE CARACTERES

La Pseudo-instruction DB est aussi utilisée pour définir des CHAINES DE


CARACTERES.

NB : Une chaine de caractère doit se trouver entre APOSTROPHES ( ‘ )


Si elle est destinée à l’AFFICHAGE, elle devra être terminée par le signe $

Ex :

Message DB ‘ Bienvenue dans le programme $ ‘

Erreur DB ‘ Erreur, veuillez recommencer $ ‘

Autre DB ‘ j’espère que vous avez apprécié ce programme $ ‘

NB :On peut insérer des caractères ASCII dans un message de ce type.

Les différents codes et les chaines de caractères constituant le MESSAGE seront séparées par des
VIRGULES (, ).

Ex :

Mess DB ‘ voici un Message suivi de CR et LF ‘, 13, 10, ‘ $ ‘

Beep DB  7, ‘ ce Message est avec un beep (ASCII 7)’, ‘ $ ‘

 Dans ces exemples les nombres 13, 10 et 07 représente les codes ASCII des caractères.

TP

Voir l’Effet de ces pseudo-Instructions sur la Mémoire avec le programme DEBUG.

Car pour écrire un Programme en ASSEMBLEUR, il existe 2 Methodes :

1- ASSEMBLER directement les Instructions en Mémoire grâ ce à DEBUG.


2- ENCODER le code dans un fichier ASCII et ensuite EXECUTER le Programme MASM (ou FASM)
pour ASSEMBLER le Programme.

N.B : On verra plus tard après l’Etude du Chapitre des INSTRUCTIONS pour pouvoir écrire un PGM en
ASSEMBLEUR ;

=> C:\ >debug

Un trait d’union (- ) nous signale que DEBUG attend la PROCHAINE COMMANDE.

 Frappons :
-a 1 

Cette commande (a) passe en MODE « ASSEMBLAGE »

DEBUG affiche alors une adresse et nous pouvons taper une instruction suivie de 

Il affiche aussi de l’Adresse suivante :

Pour terminer l’Assemblage on tape  (RETURN)

Ex :

Adresse Nos Instructions

6800 : 1 DB 2 
6800 : 11 DB 3 
6800 : 12 DB 4 
6800 : 13 DB ‘HELLO’ 
68 : 18 DB 5 
68 : 19 

Affiché automatiquement à taper

NB: - Pas d’identificateurs devant les pseudo-instructions avec DEBUG


( L’Adresse de la Zone Mémoire à initialiser est affichée par
l’ordinateur automatiquement)

Dans l’Ex :

68 : 1 est l’ensemble d’une variable BYTE initialisée à 2

68 : 11 est l’ensemble d’une variable BYTE initialisée à 3

68 : 12 est l’ensemble d’une variable BYTE initialisée à 4

68 : 13 est l’ensemble d’une variable CHAINE DE CARACTERE initialisée à ‘HELLO’ (la taille de
cette variable est de 5 Bytes).

68 : 18 est l’ensemble d’une variable BYTE initialisée à 5

 Demandons maintenant l’AFFICHAGE de la Mémoire à partir de l’ensemble 1

-d 1

Affichage obtenu :

68BF : 1 02 03 04
48 45 4C 4C 4F - 05 …………
4F444 4F
68BF : 1 ……………………………………………………………………………….
 Les 3 premiers bytes contiennent respectivement 2, 3 et 4 (02 03 04)

 Les 5 bytes suivants contient les codes ASCII des caractères du mot ‘HELLO’ (48 45 4C 4C 4F)

 Après nous voyons de byte contenant 5 (05)

 Les autres valeurs dépendent de celles existant déjà en Mémoire ?

Remarque :
Aucune séparation entre les données. Elles sont mises en Mémoire les unes derrière les autres.

 Il appartient au PGM qui utilise une donnée de spécifier son ADRESSE et le nombre de BYTES
qu’elle occupe.

 Demandons le DESASSEMBLAGE du Programme :

-U 1

68BF : 1 23 ADD AL, [BP+DI]


68BF : 12 448 ADD AL, 48
68BF : 14 45 IMC BP Les codes correspondant à
68BF : 15 4C DEC SP des Instructions de PGM qui
68BF : 16 4C DEC SP n’a AUCUN SENS
68BF : 17 4F DEC DI
68BF : 18 616E ADD AX, 6E61

NB : C’est le PGM qui doit s’occuper de distinguer les Données et les Instructions
Chapitre IV LES MODES D’ADRESSAGE

Une Instruction doit spécifier 2 Eléments importants :

 L’OPERATION à REALISER (addition, soustraction, décalage,….)

 Les DONNEES manipulées par l’Instruction (ces données sont dans les REGISTRES ou en MEMOIRE)

 Pour accéder à une DONNEE en MEMOIRE


Le Microprocesseur devra connaître son ADRESSE et le Nombre de BITS qu’elle
occupe.

 Pour ILLUSTRATION des différentes MODES d’Adressages on utilise l’Instruction MOV


(Transfert de données)
MOV reg, opérande

reg : Un REGISTRE du Microprocesseur

operande : -Une zone Mémoire repérée par un INDENTIFICATEUR

-Une Adresse ou un registre

-Une Constante

L’intruction ( MOV reg , operande ) veut dire : Le contenu de ‘Opérande’ est transféré dans ‘reg’

 Chaque ZONE MEMOIRE pourra être LUE ou MODIFIEE de 2 manières différentes.


- Soit avec un IDENTIFICATEUR préalablement DEFINI (Cet Identificateur représente un
OFFSET et le SEGMENT sera défini lors de l’Assemblage)

- Soit en spécifiant son ADRESSE exprimée sous la forme :

SEGMENT : OFFSET

Le Registre DS est le SEGMENT de DONNEES par défaut.

Ex : Au lieu d’écrire :
MOV BX,501
MOV SI,505

MOV AX , DS : [BX]
MOV AX , DS : [SI+2]
……..

On écrit :

MOV AX , [BX]
MOV AX , [SI+2] (DS par défaut)

Mais le programmeur peut spécifier lui-même un Registre de SEGMENT (on parlera de PREFIXE
de SEGMENT).

MOV DS,13AD

MOV AX , DS : [BX]

NB : On verra que les chaines de caractères sont traitées de manière tout à fait particulière.

IV- 1 /L’Adressage Immediat


Registre Valeur Immédiate

Ex : Transfert de 8 bits (Byte)


MOV AH , 12 ; AH 12 ; AL n’est pas affecté
Transfert de 16 bits (Word)
MOV BX , 1 ; BX 1 ; BL et BH sont affectés.
IV- 2 / L’Adressage Direct
Registre Mémoire
Zone mémoire repéré par un IDENTIFICATEUR
Mémoire Registre
( Adresse de la Zone Mémoire -- Segment : Offset , défini par l’ordinateur )

Ex :
Id1 DB 2 ; définit une zone Memoire de 1 Byte , contenant le Nombre 2
Id2 DW 5 ; définit une zone Mémoire de 2 Bytes (word), contenant le Nb 5
……..

; Registre mémoire

MOV AH , Id1 ; AH 2 (opération sur 8bits)


MOV BX , Id2 ; BX 5 (opération sur 16bits)

;Mémoire registre

MOV Id1, CH ; Id1 CH (operation sur 8 bits)

NB: -Avec DEBUG Id1 et Id2 seront les Numeros d’Offset en Mémoire ou l’on a enregisté le
Nombre 2 et le Nombre 5
Soit le Nombre 2 est enregisté en mémoire à l’Adresse d’IOffset 500
Et le Nombre 5 est enregistré en mémoire à l’Adresse d’Offset 501

Ex : MOV AH , [500]
MOV BX , [501]

- MOV AH , Id2 ; Il y a Erreur car AH est un registre à 8 bits or la donnée est sur 16 bits ( Word).

IV- 3 / L’Adressage Basé


Registre [BX] adressage basé sur DS

DS : [BX]
BX ;Registre de base Segment offset

[BX] représente le contenu de la zone Mémoire dont la valeur de l’ Offset est dans BX.

Ex:
MOV BX , 8 ; BX 8
MOV AX , [BX] ; AX Contenu de la zone Memore à l’@
DS: 8
Ex :
Id1 DB 2 ;définit une zone Mémoire de 1 Byte contenant la valeur 2
Id2 DW 5 ;définit une zone Mémoire de 2 Bytes (word) contenant la val 5
………

MOV BX ,offset Id2 ; BX -----offset de Id2 (c à d offset emplacement Memoire de Id2)


MOV AX , [BX] ; AX ---contenu de la zone Memoire à l’Adresse DS: Offset
(Emplacement Mémoire de Id2)
Ou en utilisant le mode d’@ Direct
MOV BX, Id2
MOV AX, BX

NB :
 MOV BX,offset Id2 : ‘offset’ demande à l’Assembleur de mettre dans BX l’offset emplacement
Mémoire de la variable Id2
Adresse en Mémoire ---- SEGMENT : OFFSET

 Tandis que (MOV BX , Id2) installe dans BX le contenu en Mémoire de la variable Id2 !

Registre [BP] adressage basé sur SS

BP : Registre utilisé pour accéder aux données de la PILE (Appel sousPgm CALL)
SS : Registre de Segment pour la PILE

Ex :
MOV BP ,  FFFE h
MOV AX , [BP] ; AX contenu de la zone mémoire à l’adresse SS : 0FFFEh

IV- 4 / L’Adressage Indexé


Registre --------[SI] ou [DI] adressage INDEXE

DS : [SI]
Segment offset
Mode d’adressage :
- Principalement utilisé pour les CHAINES DE CARACTERES
- Pour ISOLER un Elément de Tableau

Ex1 :
MOV SI, 
SI : offset Source
Index
MOV AX, [SI] ; AX contenu de la zone mémoire à l’Adresse DS : 

Ex2 :
MOV AH, 12
DI : offset MOV DI, 
Destination Index MOV [DI], AH ; contenu de la zone memoire à l’adresse DS:  contenu de AH

IV- 5 / L’Adressage Indexé et Basé


Registre [BX] [SI] (ou [BX+SI])
Adressage indéxé et basé sur DS
[BX] [DI] Registre
Adressage indéxé et basé sur DS

La Base est DS
Adresse = DS : BX + SI
Adresse = DS : DI + BX

Segment offset

Ex1 :
MOV BX, 2
MOV SI, 5
MOV AH, [BX] [SI] ; AH Contenu de la Mémoire à l’Adresse DS : 2+5 ou DS : 7

Ex2 :
Table DB 20 DUP ( ?) ; définit un Tableau de 20 Eléments

MOV BX , Offset Table ; BX Adressse de début de la table (base)(Element )

 MOV SI , 2 ; on va lire le 3ème élément de la Table (1er Elément est l’Elément )

MOV AH, [BX] [SI] ; AH-- 3ème Elément de la Table

 MOV SI , 8 ; on va lire le 9ème élément de la Table

MOV AH, [BX] [SI] ; AH 9ème Elément de la Table

Registre ------- [BP] [SI] adressage indéxé et basé sur SS

Registre ------- [BP] [DI] adressage indéxé et basé sur SS

La Base est SS

Adresse = SS : BP + SI
Adresse = SS : BP + DI

Segment offset

Ex1 :
MOV BP , 2
MOV SI , 5
MOV AH, [BP] [SI] ; AH Contenu de la Mémoire à l’Adresse SS : 7 ou 2+5)

IV- 6 / L’ADRESSAGE BASE et DEPLACEMENT

(Direct ou Immédiat)

Registre donnée [BX] adressage basé sur DS

Registre donnée [BP] adressage basé sur SS

Ex :
Id1 DW 5 dup ( ?) ; définit une zone de 2 bytes (w) avec 5 El.
…………

MOV BX, 2
MOV AX, Id1 [BX] ; AX 3ème Elément du Tableau Id1 ou (BX = 2) 0,1,2 (3e El)
donnée

IV- 7 / L’Adressage Indexé et Deplacement


Registre donnée [SI] ( adressage indéxé +déplacement)
[SI + donnée]

Registre ------ donnée [DI] (adressage indéxé +déplacement)


[DI + donné]

Ex :
MOV SI, 4
MOV AX, 1 [SI] ; AX contenu de la zone mémoire à l’adressse DS : 5 ou (4+1)
Ou [SI + 1]

IV- 8 / L’Adressage Basé, Indexé et Deplacement


Registre -----donnée [BX] [SI] ou [BX+SI+donnée]
Registre ---- donnée [BX] [DI]
Registre ---- donnée [BP] [SI]
Registre ---- donnée [BP] [DI]
Ex : Id1 DB 2 ; définit une zone de 1 Byte
Id2 DW 5 ; définit une zone de 2 Bytes
……..
MOV BX , Id2
MOV SI , 4
MOV AX , Id1 [BX] [SI+1] ; AX  Contenu de la zone Mémoire à l’Adresse DS : 2+5+4+1 (DS :12)

Vous aimerez peut-être aussi