0% ont trouvé ce document utile (0 vote)
23 vues31 pages

4 ProgrammationEnAssembleur

Le document présente les modes d'adressage du microprocesseur 8086, qui incluent des méthodes telles que l'adressage registre, immédiat, direct, indirect, basé, indexé et basé indexé. Il décrit également la structure des instructions en assembleur, les directives, les constantes, et fournit des exemples de syntaxe pour chaque type d'instruction et de directive. Enfin, il souligne l'importance des commentaires pour la lisibilité du code assembleur.

Transféré par

Ahmed Zuffua
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
23 vues31 pages

4 ProgrammationEnAssembleur

Le document présente les modes d'adressage du microprocesseur 8086, qui incluent des méthodes telles que l'adressage registre, immédiat, direct, indirect, basé, indexé et basé indexé. Il décrit également la structure des instructions en assembleur, les directives, les constantes, et fournit des exemples de syntaxe pour chaque type d'instruction et de directive. Enfin, il souligne l'importance des commentaires pour la lisibilité du code assembleur.

Transféré par

Ahmed Zuffua
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation en

assembleur
BEKKOUCHE Mohammed
[email protected]

1
Les modes d'adressage du 8086
• Les instructions et leurs opérandes (paramètres) sont stockées en
mémoire principale
• La taille totale d'une instruction (nombre de bits nécessaires pour la
représenter en mémoire) dépend du type d'instruction et aussi du
type d'opérande
• Chaque instruction est toujours codée sur un nombre entier d'octets,
afin de faciliter son décodage par le processeur

2
Les modes d'adressage du 8086
• La structure la plus générale d’une instruction est la suivante :
INST Opérande1, Opérande2

L’opération est réalisée entre les 2 opérandes et le résultat est toujours


récupéré dans l’opérande de gauche
• Il y a aussi des instructions qui agissent sur un seul opérande
INST Opérande
• Les opérandes peuvent être des registres, des constantes ou le
contenu de cases mémoire
• Les façons de désigner les opérandes constituent les "modes
d'adressage"
3
Les modes d'adressage du 8086
Le microprocesseur 8086 possède 7 modes d'adressage :
• Adressage registre  INST R , R

• Adressage Immédiat  INST R , im

• Adressage direct  INST R , [adr]

• Adressage indirect  INST R , Rseg : [Roff]

• Adressage Basé  INST R , Rseg : [Rb+dep] Adressage


mémoire
• Adressage Indexé  INST R , Rseg : [Ri+dep]

• Adressage Basé Indexé INST R , Rseg : [Rb+Ri+dep]

4
Les modes d'adressage du 8086
• Adressage registre  utilisation d’un ou deux registres

INST R ou INST R , R

Exemples : INC AX ou MOV AX, BX

Mov AX, BX ; cela signifie que l'opérande stocké dans le registre BX sera transféré
vers le registre AX. Quand on utilise l'adressage registre, le microprocesseur
effectue toutes les opérations d'une façon interne. Donc dans ce mode il n'y a pas
d'échange avec la mémoire, ce qui augmente la vitesse de traitement de
l'opérande

5
Les modes d'adressage du 8086
• Adressage Immédiat  l’un des opérandes est une constante

INST im ou INST R , im

Exemples : JMP 1234h ou MOV AX, 123 ou MOV AX , ’A’

MOV AX,500H ; cela signifie que la valeur 500H sera stockée immédiatement dans le
registre AX

6
Les modes d'adressage du 8086
• Adressage direct  l’un des deux opérandes est en mémoire

INST R , [adr] ou INST [adr] , R ou INST taille [adr], im

Exemples : MOV AX,[123] ou MOV [123],AX ou MOV AX, SS:[123]

Remarque : En général le déplacement est ajouté par défaut avec le registre segment DS
pour former l'adresse physique de 20 bits, mais il faut signaler qu'on peut utiliser ce mode
d'adressage avec d'autres registres segment tel que ES par exemple , seule la syntaxe en
mnémonique de l'instruction change et devient : MOV AX, ES : [adr]

7
Les modes d'adressage du 8086
• Adressage indirect  l’offset est donné dans un registre

INST R , Rseg : [Roff] ou INST Rseg : [Roff] , R ou INST taille Rseg : [Roff] , im

Exemples :

MOV AX, [BX] ou MOV ES:[BP], AX ou MOV WORD PTR [BX] , 5

MOV AX,[BX] : Le contenu de la case mémoire dont l'adresse se trouve dans le


registre BX est mis dans le registre AX

8
Les modes d'adressage du 8086
• Adressage Basé  l’offset est donné dans BX ou BP avec un éventuel décalage en plus de
l’offset

INST R , Rseg : [Rb+dep] ou INST Rseg : [Rb+dep] , R ou INST taille Rseg : [Rb+dep], im

Exemples : MOV AX, [BX] ou MOV AX, [BX+5]

ou MOV AX, [BP-200] ou MOV AX, ES:[BP]

MOV AX,[BX+2] : Cela signifie que dans le registre AX on va mettre le contenu de la case mémoire
pointée par BX+2

Remarque : Les syntaxes suivantes sont identiques : MOV AX,[BX+2] MOV AX,[BX]+2 MOV AX,2[BX]

9
Les modes d'adressage du 8086
• Adressage Indexé  l’offset est donné dans SI ou DI avec un éventuel décalage en plus de
l’offset

INST R , Rseg : [Ri+dep] ou INST Rseg : [Ri+dep] , R ou INST taille Rseg : [Ri+dep], im

Exemples : MOV AX, [SI] ou MOV AX, [SI+500]

ou MOV AX, [DI-8] ou MOV AX, ES:[SI+4]

10
Les modes d'adressage du 8086
• Adressage Basé Indexé  l’offset est la somme d’un registre de base et d’un registre
d’index avec un éventuel décalage

INST R , Rseg : [Rb+Ri+dep] ou INST Rseg : [Rb+Ri+dep] , R ou INST taille Rseg : [Rb+Ri+dep], im

Exemples : MOV AX,[BX+SI] ou MOV AX,[BX+DI+5]

ou MOV AX,[BP+SI-8]

REMARQUE: Seules les registres «BX, SI, DI, BP» peuvent être utilisés entre crochets

11
Le fichier source (code source)
• Comme tout programme, un programme écrit en assembleur
(programme source) comprend des définitions, des données et des
instructions, qui s'écrivent chacune sur une ligne de texte
• Les données sont déclarées par des directives, mots clefs spéciaux
que comprend l'assembleur (donc ils sont destinés à l'assembleur)
• Les instructions (sont destinées au microprocesseur)

12
Les instructions
La syntaxe des instructions est comme suit :
{Label :} Mnémonique {opérande} { ; commentaire}
Le champ Label (étiquette)
• Il est destiné pour marquer une ligne qui sera la cible d'une instruction de saut
ou de branchement
• Une label peut être formée par 31 caractère alphanumérique ({A.. Z} {a.. z} {0.. 9})
au maximum
• Les noms des registres ainsi que la représentation mnémonique des instructions
et les directives (voir plus loin) ne peuvent être utilisées comme Label
• Le champ Label doit se terminer par ' : ' et ne peut commencer par un chiffre
• De même il n'y a pas de distinction entre minuscules et majuscules.

13
Les instructions
Le champ Mnémonique
• Un mnémonique est, généralement, composé uniquement de lettres
• Quelques mnémoniques que nous retrouverons souvent : MOV, CMP,
LOOP, ...
• On pourra indifféremment écrire les mnémoniques avec des lettres
minuscules ou majuscules.

14
Les instructions
Le champ opérande
Les opérandes d’une instruction indiquent les données à traiter:
• soit sous la forme de valeurs constantes,
• soit en spécifiant l’adresse mémoire (l’emplacement en mémoire) où
se trouve la donnée,
• soit le nom d’un registre contenant la donnée ou contenant l’adresse
mémoire de la donnée.

15
Les instructions
Le champs commentaire
• Un commentaire commence par un caractère ; et se termine en fin de ligne
• Il est optionnel mais très intéressant lorsque on programme en assembleur
 en raison du nombre d'instructions qui est assez élevé
 Ce qui va rendre la compréhension des programmes assez
délicate et difficile
• Pour cette raison lorsque on programme en assembleur il vaut mieux
mettre des commentaires pour que le programme soit lisible pour les
utilisateurs

16
Les instructions
Exemple d’une instruction
ET1 : MOV AX , 500H ; mettre la valeur 500h dans le registre AX

17
Les directives
• Pour programmer en assembleur, on doit utiliser, en plus des
instructions assembleur, des directives ou pseudo-instructions
• Une directive est une information que le programmeur fournit au
compilateur
• Elle n'est pas transformée en une instruction en langage machine
• Elle n'ajoute donc aucun octet au programme compilé
• Donc les directives sont des déclarations qui vont guider l'assembleur

18
Les directives
• Une directive est utilisée par exemple pour créer de l'espace
mémoire pour des variables, pour définir des constantes, etc...
• Pour déclarer une directive il faut utiliser la syntaxe suivante :
{Nom} Directive {opérande} { ; commentaire}
Le champ opérande dépend de la directive
Le champ commentaire a les mêmes propriétés vues dans le
paragraphe précèdent.
 Le champ Nom indique le nom des variables : c'est un champ
optionnel (selon la directive)

19
Les constantes
Les constantes numériques
• 100110b est une constante binaire dont la valeur décimale est 38
• 37o est une constante octale dont la valeur décimale est 31
• 4ch est une constante hexadécimale dont la valeur décimale est 76
• Puisqu’une constante numérique doit toujours commencer par un
chiffre, une constante hexadécimale dont le premier caractère est une
lettre sera précédée d’un 0. Ainsi, la valeur c3 sera notée 0c3h dans
un source assembleur.

20
Les constantes
Les constantes chaînes de caractères
Une chaîne de caractères est une suite de caractères entre ’
Si on veut mettre un caractère ’ dans une constante, il suffit de la
doubler.
Exemples :
• ’hello world’
• ’l’’arbre’

21
Les directives
Déclaration d’une constant
• La directive EQU associe une valeur à un symbole qui pourra être
ensuite utilisé dans le programme à la place de la constante qu’elle
définit
Syntaxe : nom EQU constante
Par exemple, la commande :
TROIS EQU 3
définit une constante qui s’appelle TROIS dont la valeur est 3. Une fois
cette déclaration effectuée, toute occurence de l’identificateur TROIS
sera remplacée par la valeur indiquée

22
Les directives
Les déclarations de variables
• L’espace mémoire est utilisé pour stocker des constantes (chaînes de
caractères, valeurs numériques, ...) ou des variables
• Avant d’employer une variable, il faut préalablement la déclarer
(comme dans tout langage)
• Déclarer une variable (et ceci est vrai aussi dans les langages de haut
niveau comme Pascal, mais c’est un peu caché) revient toujours à
réserver un emplacement en mémoire pour y stocker la valeur de
cette variable

23
Les directives
Les directives DB/DW/DD
• Ces directives sont utilisées pour déclarer les variables : L'assembleur
attribue à chaque variable une adresse
• Dans le programme, on repère les variables grâce à leurs noms
• Les noms des variables sont composés d'une suite de 31 caractères au
maximum, commençant obligatoirement par une lettre
• Le nom peut comporter des majuscules, des minuscules, des chiffres
• Lors de la déclaration d'une variable, on peut lui affecter une valeur
initiale.

24
Les directives
DB (Define byte):
définit une variable de 8 bits : c-à-d elle réserve un espace mémoire
d'un octet : donc les valeurs qu'on peut stocker pour cette directive
sont :
• comprises entre 0 et 255 ( pour les nombres non signés )
• et de -128 jusqu'à 127 pour les nombres signés
Syntaxe : [nom] DB constante [, constante]

25
Les directives
DB (Define byte):

Exemple :
Vil DB 12H ; Définit une variable (un octet) de valeur Initiale 12
Tab DB 18H, 15H, 13H ; définit un tableau de 3 cases
;(3 octet) qui démarre à partir de l'adresse TAB
Mess DB 'ISET' ; définit aussi un tableau mais les valeurs de chaque case
;n'est autre que le code ascii de chaque lettre
Var DB ? ; définit une variable 8 bits de valeur initiale quelconque .

26
Les directives
DW (define word):
définit une variable de 16 bits : c-à-d elle réserve un espace mémoire
d'un mot : donc les valeurs qu'on peut stocker pour cette directive sont
comprises :
• entre 0 et 65535 (pour les nombres non signés)
• et de -32768 jusqu'à 32767 pour les nombres signés
Syntaxe : [nom] DW constante [, constante]

27
Les directives
DW (define word):

Exemple :
TT1 DW 500H ; réserve deux cases mémoire (un mot) a partir de
l'adresse TT1
TAB1 DW 10H,11H,14H ; réserve un tableau de 6 cases chaque valeur
sera mise sur deux cases
YY DW ? ; réserve un mot dans la mémoire de valeur initial
quelconque.

28
Les directives
DD (Define Double) :
réserve un espace mémoire de 32 bits ( 4 cases mémoire ou 4 octets )
Syntaxe : [nom] DD constante [, constante]
Exemple : ff DD 15500000H
Directive dup :
Lorsque l'on veut déclarer un tableau de n cases, toutes initialisées à la
même valeur, on utilise la directive dup:
Exemple :
tab DB 100 dup (15) ; 100 octets valant 15
y DW 10 dup (?) ; 10 mots de 16 bits non initialisés
29
Les directives
Les direcitive Word PTR et Byte PTR :
• Dans certains cas, l'adressage mémoire est ambigu. Par exemple, si
l'on écrit :
MOV [BX], 0 ; range 0 a l'adresse spécifiée par BX
• L'assembleur ne sait pas si l'instruction concerne 1, 2 ou 4 octets
consécutifs
• Afin de lever l'ambiguïté, on doit utiliser une directive spécifiant la
taille de la donnée à transférer :
MOV byte ptr [BX], 0 ; concerne 1 octet
MOV word ptr [BX], 0 ; concerne 1 mot de 2 octets
30
Les directives
ORG :
(Ex.: ORG 100h): indique au compilateur que le programme doit être
chargé à l’adresse CS:100h (par défaut pour les programmes .COM du
i8086)
ASSUME :
permet de définir le nom logique d’un segment [ex.: ASSUME CS : x]
x SEGMENT / ENDS :
délimiter les directive de données et les instruction du programme (ou
.data / .code)

31

Vous aimerez peut-être aussi