6°) SYNTAXE D’UNE INSTRUCTION ASSEMBLEUR:
|< Etiquette >| Cmde |< Opérande >|
avec |< ...>| : Facultatif
Opérande : Destination |<,Source >|
Registre
Destination
Mémoire
Valeur
Source Registre
Mémoire
Registre: peut être soit :
• un registre de 8 bits (AL - BH)
• un registre de 16 bits (AX - DI ou registre segment)
• un registre segment (ES - DS)
direct Etiquette
indirect [reg] (SI,DI,BX,BP)
basé dépl.[reg] (dépl.:Etiquette ou valeur signée et reg:BX ou BP)
mémoire direct indexé Etiquette[reg] (SI ou DI)
indirect indexé [reg _B][reg_I] (reg_B :BP ou BX et reg_I: SI ou DI)
basé indexé dépl.[reg _B][reg_I] (dépl.:Etiquette ou valeur signée et
reg_B :BP ou BX et reg_I: SI ou DI)
reg: registre
reg_B: registre de base
reg_I: registre d’index
dépl. : valeur signée ou Etiquette
6.1 DEFINITION D’UN SEGMENT :
Nom_segment SEGMENT |< type >| |<STACK>|
Corps
Nom_segment ENDS
7
BYTE
WORD
Type DWORD
PARA
PAGE
1. BYTE : le segment commence juste au premier octet libre, c.a.d. juste après le segment
précédemment défini.
2. WORD : le segment commence juste au premier mot libre (adresse physique paire)
3. DWORD : le segment commence juste au premier double mot libre (adresse physique
multiple de 4)
4. PARA : est l’option par défaut, le segment commence au début d’un segment physique
(adresse physique est multiple de 16).
5. PAGE : le segment commence aune adresse physique multiple de 256
Lorsque le type est BYTE ou WORD ou DWORD le numéro associé à ce segment est
le numéro de segment physique où se trouve le premier octet ou le mot ou le
double mot libre.
STACK : indique que c’est le segment de pile
Donnée (réservation de zone ou la génération de valeurs)
Corps
Code ( ensemble de procédures ou d’instructions )
REMARQUE :
Dans un segment, il peut y avoir des données et du code en même temps. Mais de
préférence, séparer les données du code.
6.2 DEFINITION D’UNE PROCEDURE :
Nom_procédure PROC |< Genre >|
Séquence
Nom_procédure ENDP
NEAR
Genre
FAR
8
NEAR : la procédure est local au segment , elle doit être dans le même segment que la
procédure appelante.
FAR : la procédure peut être dans autre segment que le segment appelant .
Séquence : est une suite d’instructions
6.3 SCHEMA DE PROGRAMME :
Un programme est constitué de trois segments :
• Un segment de PILE
• Un segment de DONNEE
• Un segment de CODE
Le numéro de chaque segment est dans le registre correspondant (donnée dans
DS, code dans CS et pile dans SS); mais on peut avoir les 3 segments ayant le
même numéro.
6.3.1 STRUCTURE D’UN PROGRAMME
Il est recommandé de structurer tout programme comme suit :
|<Segment de pile >|
Segment de donnée
Segment de code
END Etiquette
Etiquette : indique au système la première instruction à exécuter pour ce programme.
Remarque :
1. Si le segment de pile est omis, une pile (zone mémoire bien déterminée) est
associée au programme ayant une taille de 64K - longueur du programme (donnée
+ code)
2. on peut avoir la pile, les données et le code dans un seul segment.
7°)FORMAT DES DONNEES:
Les différents type de donnée utilisées sont :
7.1 NOMBRE :
1. Binaire : est une suite de 0 et de 1 qui se termine par la lettre B;
2. Octal : est suite de chiffres de valeur inférieur à 8 qui se termine par la lettre O;
3. Décimal : est la base par défaut, est une suite de chiffres décimaux qui se termine
par la lettre D;
4. Hexadécimal : est suite de chiffres appartenant à l’intervalle [0 .. F] qui commence
obligatoirement par un chiffre appartenant al’ intervalle [0 .. 9] et se termine par la
lettre H.
Les nombres ayant une longueur supérieur à un octet sont représentés en mémoire comme
suit :
9
• L’octet de faible poids est rangés a l’adresse faible du champs et l’octet de FORT
POIDS à l’octet FORTE.
Exemple : La valeur 125H représenté sur un mot mémoire est rangée comme suit
adresse mémoir
e
a 25
a+1 01
7.2 CARACTERE :
Est une suite de caractères alphanumérique et caractères spéciaux encadrée par des
quotes ( ’ ).Chaque caractère est représenté par sa valeur ASCII.
Si le caractère quote est dans la suite, alors elle est doublée.
Registre pour calcul de l’adresse physique :
Référence mémoire Registre Segment Offset (Décalage)
par défaut remplacemen
t possible
recherche d’une instruction CS Aucun IP
Opération sur Pile SS Aucun SP
Variables (les exceptions DS CS,SS,ES adresse effective
suivent)
Source pour une chaîne DS CS,SS,ES SI
Destination pour une chaîne ES Aucun DI
Registre BP remplaçant le SS CS,DS,ES adresse effective
registre de base
Registre BX remplaçant le DS CS,SS,ES adresse effective
registre de base
INITIALISATION DES REGISTRES :
Lorsque’ on lance l’exécution d’un programme, le DOS lit tout d’abord le PSP et initialise les
registres du microprocesseur selon des règles rigoureuses.
10
STRUCTURE DU PROGRAMME STRUCTURE INTERNE
DS,ES
Segment de Pile PSP
SS
Segment de données PILE
SP
Segment de code DONNEE
CS
CODE IP
STRUCTURE DU PROGRAMME STRUCTURE INTERNE
DS,ES
PSP
Segment de données SS
DONNEE
Segment de code CS
CODE IP
PILE SP
• Le registre IP contient l’adresse du début d’exécution (valeur associée au symbole qui suit
le END).
• Le registre SP contient l’adresse du dernier octet de la pile si elle définie, sinon la valeur 0
16
ce qui indique le dernier octet du segment (2 ) sachant que opération sur le registre SP
est décrémenté de 2 qui nous donne -2 = 0FFFEH qui sera pris comme adresse (valeur non
signée).
• les registres sélecteurs sont initialisés comme suit :
Les Registres DS et ES pointent le segment du PSP.
Le Registre CS pointe le segment qui contient la première instruction à exécuter.
le registre SS pointe le segment de pile si il est défini (segment de type STACK),
sinon le premier segment du programme (juste après le PSP)
Les DIRECTIVES :
Une directive, contrairement à une instruction est interprété par l’assembleur
(traducteur). Elle permet d’introduire des paramètres et de générer des données. Par contre
une instruction est traduite pour être exécuter
• ASSUME : Affecte un registre segment à un segment.
syntaxe :
ASSUME Reg_selecteur:Nom_de_segment|< Reg_selecteur:Nom_de_segment,...>|
signifie le registre segment spécifié assume la charge de contenir l’adresse (numéro) du
départ du segment
11
• EQU : Equivalent
syntaxe :
etiquette EQU Expression
Affecte la valeur de l’expression a l’Etiquette.
• = « signe égal » sert à redéfinir les constantes. Est semblable a EQU mais permet de
redéfinir des affectation en cours de route.
syntaxe :
label=Expression
• EVEN : pair Impose a IP une adresse paire
syntaxe :
EVEN
• ORG : Origine Spécifie l’adresse de départ du code
syntaxe :
ORG Expression
• %out texte : liste le « texte sur écran pendant l’assemblage, ce qui permet de suivre sa
traduction.
• ; ce qui suit est commentaire jusqu’à la fin de ligne.
• ;; le commentaire qui suit n’apparaît pas sur dans le listing.
• .RADIX Sert à définir une fois pour toutes la base de conversion.
syntaxe :
.RADIX Base
• END : indique le du programme a l’assembleur.
syntaxe :
END |<Etiquette>|
où Etiquette indique la 1ère instruction exécutable du programme.
• Directives de définition de données:
syntaxe :
|<Etiquette>| Dlgueur liste
lgueur peut être B :octet; W:mot (16 bits), D :double mot (32 bits), T :10 octets; ect ...
liste : expr1|<,expr2, ...,exprn>|
constante
expri Etiquette
N DUP (liste) où N est un entier
Chaque valeur de expri est représentée en mémoire :
∗ sur un octet pour DB,
∗ sur un mot (16 bits) pour DW,
12
∗ sur double mot (32 bits) pour DD
∗ sur 10 octets pour DT,
∗ ect ...
et la liste qui est précédée de N DUP, est répétée antant de fois due la valeur de N.
Remarque: ? représente la constante infinie (reservation d’un espace mémoire).
• AUTRES :
SEGMENT, ENDS, PARA,WORD, BYTE, PAGE : voir définition de segment
PROC, ENDP, FAR, NEAR : voir définition de procédure
SCHEMA D’UN PROGRAMME :
;définition du segment de pile
s_pile SEGMENT
DB lgueur DUP (?)
s_pile ENDS
;définition du segment de données
s_donnee SEGMENT
; déclarations de valeurs et
;génération de zone de travail
s_donnee ENDS
;définition du segment code (programme)
s_code SEGMENT
ASSUME CS:s_code,DS:s_donnee
ASSUME SS:s_pile
debut PROC ;____________________________
MOV AX,s_donnee ; initialisation du reg segment DS |
MOV DS,AX ;____________________________|
;___________________________
;corps de la procédure principale |
;___________________________|
MOV AH,4CH ;________________________
INT 21H ; indique la fin du programme |
debut ENDP ;________________________|
ENDS
END debut
13