• Aucun résultat trouvé

Directives d’assembleur

N/A
N/A
Protected

Academic year: 2022

Partager "Directives d’assembleur"

Copied!
9
0
0

Texte intégral

(1)

Etienne Tremblay

Ordinateurs, Structure et Applications

GIF-1001

Cours 11, Directives d’assembleur

(2)

Directives d’assembleur

• Dans tout langage de programmation, il y a des mots réservés

utilisés afin de commander l’assembleur, le compilateur ou d’éditeur de liens. C’est mots sont des commandes ou des directives.

• Les directives permettent de dicter les emplacement du code en mémoire, d’écrire plus aisément le code, de modifier le code avant compilation, créer des variables (DB, DW), gérer les programmes sur plusieurs fichiers (voire en plusieurs langages), et plus.

• Les directives se retrouvent à l’intérieur même des fichiers textes constituant le code. Elles complètent les fichiers de commandes pour l’assembleur, le compilateur et l’éditeur de line (makefile).

• Les directives ne produisent pas de code machine, contrairement aux instructions. Il s’agit uniquement d’informations entrées par le programmeur afin de contrôler la création des fichiers objets et de l’exécutable.

• Vous ne pouvez pas nommer une variable, une procédure, une

macro, un constante ou un label avec le même nom qu’une directive.

(3)

Directives pour variables et fonctions

• Plusieurs directives d’assembleur sont utilisées pour déclarer et définir des variables ou des fonctions.

Déclarer une variable ou une fonction signifie identifier le type d’une variable ou la nature d’une fonction (exemple: le texte déclare que la variable MaVar est une variable sur 8 bits, non signée).

Définir une variable ou une fonction signifie réserver un espace mémoire pour cette variable ou pour cette fonction (associer une séquence d’instructions à la fonction).

• Les directives DB et DW servent à définir une variable.

• Les directives PROC et ENDP ainsi que les instructions entre les deux servent à définir une fonction.

• L’assembleur doit connaître la nature d’une variable ou d’une fonction afin de compiler celle-ci convenablement. Toutes les variables et fonctions d’un fichier doivent être déclarées au minimum pour que l’assembleur ou le

compilateur génère le fichier objet.

• L’éditeur de lien doit associer toutes les déclarations de variable à une définition pour pouvoir générer l’exécutable.

(4)

Directives pour placer les segments

• Lors du chargement d’un programme, l’entête du programme dit au

système d’exploitation comment charger le programme en mémoire. Pour le 8086, l’entête du programme dit quelle valeur doit avoir CS:IP. Les autres segments doivent êtres initialisés par le programme (exemple: MOV

AX,MonSegmentDonnées suivi de MOV DS,AX).

• Les directives segment… ends permettent de nommer des segments.

– segname segment [paramètres]

• Code ou variables dans le segment – Ends

• La directive assume aide l’assembleur. Elle fait le lien entre les segments déclarés et les registres CS,DS, ES et SS.

– assume DS:segname

• Exemple:

– MonSegmentData segment

• MaVar DB 7

– ends – …

– mov DS,AX ;AX contient MonSegmentData

– assume DS:MonSegmentData ;Directive pour dire à l’assembleur où est MaVar – MOV AX, MaVar

• Heureusement, MASM et EMU8086 ont une disposition de segments par

(5)

Directives de pré-compilation

• Les directives if, else, endif et autres du même genre (ife, ifdef, etc.).

Permettent d’assembler/compiler du code si et seulement si certaines conditions sont rencontrées. Par exemple:

Processor = 80386 ;Set to 8086 for 8086-only code . . .

if Processor eq 80386 shl ax, 4

else ;Must be 8086 processor.

mov cl, 4 shl ax, cl endif

– NOTE: Il est utile de rendre une partie de code optionnelle si l’environnement logiciel ou matériel du code peut changer. Par exemple, si on veut utiliser le même code sur deux microprocesseurs différents ou avec deux systèmes d’exploitation différents.

• Les directives MACRO, EQU permettent de changer le code avant qu’il ne

(6)

Directives pour programmer sur plusieurs fichiers

• La directive include Filename.ext inclut tout le contenu du fichier Filename dans le fichier où la directive est placée, à l’emplacement du include.

• La directive public rend une variable ou une procédure disponible à un autre fichier (la directive extern doit être utilisée). Exemple: public MaVar DB 0, public PROC Mafonc

• La directive extern déclare une variable ou une fonction. Cette variable ou fonction doit être définie dans un autre fichier (et déclarée publique) pour que l’éditeur de liens relier la déclaration à la définition…

• Habituellement, toutes les variables et toutes les fonctions sont déclarées dans un fichier avec l’extension “.h”, un fichier d’entête (header). Les

variables et les fonctions sont définies dans les fichiers contenant le code (.asm ou .c). Vous retrouverez donc souvent des fichiers .h contenant

plusieurs fois le mot extern qui seront inclus dans des fichiers .c ou .asm, contenant eux-mêmes plusieurs variables ou fonctions “public”

(7)

Directives pour les programmes en assembleur et en d’autres langages

• De manière générale, les procédures et les variables provenant d’autres langages sont déclarées/fournies à l’aide des directives public et extern.

• Il faut respecter une syntaxe très précise pour les paramètres des fonctions ou les types de variables. Cette syntaxe dépend de l’assembleur et du

langage utilisé en conjonction avec l’assembleur…

(8)

Directive d’éditeur de liens (ORG, #MAKE_XYZ #, …)

• #MAKE_COM# , #MAKE_BIN# , #MAKE_BOOT# et #MAKE_EXE#

sont des directives propres à EMU8086 qui spécifient le type de

programme à produire (cela détermine les valeurs de CS, DS, ES et SS par exemple).

• La directive ORG spécifie la première adresse de mémoire utilisée, soit l’origine du programme.

• Plusieurs directives d’assembleur existent afin de gérer les emplacements des données et du code. Voici un exemple:

CSEG segment

mov ax, bx ret

CSEG ends

DSEG segment

Item1 byte 0 Item2 word 0 DSEG ends

(9)

Références et exercices

• Références

– http://www.briceg.com/linux/aoa/toc.html

• Exercices

– Qu’est-ce qu’une directive d’assembleur?

– Qu’elle est la différence entre une macro et une procédure? Qu’elle est la différence entre une constante et une variable?

– Dans quelles circonstances est-il recommandé d’utiliser des if, ifdef ou else? Autrement dit, qu’elle est l’utilité de ces directives? Donnez des exemples.

Références

Documents relatifs

Les instructions de rupture de séquence d'exécution encore appelées instructions de saut ou de branchement permettent d'interrompre l'ordre initial sous certaines

Toutefois, la consultation des livres suivants est fortement recommandée pour une meilleure compréhension des notions introduites dans ce cours :. •

Écrire une procédure qui permet de retourner, dans le registre AX, la position du premier caractère qui soit le même dans deux chaînes données.. Utiliser cette procédure dans

1ère année BTS DSI Prof:EL HADARI zouhair... 1ère année BTS DSI Prof:EL

Cliquez ici pour telecharger le

• Des définitions de données déclarées par des directives (mots spéciaux interprétés par l'assembleur, nous les étudierons plus tard, le but est ici de donner une idée de ce

 .global <étiquette>,… les étiquettes du champ opérande définies dans le module courant sont rendues visibles à l’extérieur de ce module.  Toute

Les inspections réalisées au sein des établissements pharmaceutiques distributeurs en gros de médicaments à usage humain ont mis en exergue des non-conformités relatives au