Section courante

A propos

Section administrative du site

Directives assembleur

Les directives d'assembleur sont utilisées pour définir des étiquettes sur des valeurs spécifiques pendant l'assemblage, effectuer un assemblage conditionnel, définir des zones d'entreposage et spécifier des adresses de départ dans le programme. Chaque directive assembleur est désignée par une «pseudo opération» apparaissant dans le champ opération de la ligne. Les pseudo-opérations acceptables sont présentées dans le tableau suivant :

Directive Description
ORG Défini l'origine du programme ou des données
END Programme de fin, adresse de début facultative
EQU Égalité numérique
SET Ensemble numérique
IF Commencer l'assemblage conditionnel
ENDIF Fin d'assemblage conditionnel
DB Définir les octets de données
DW Définir des mots de données
DS Définir la zone d'entreposage des données

Les pseudo-opérations individuelles sont détaillées ci-dessous.

La directive ORG

L'instruction ORG prend le format suivant :

label ORG expression

label est une étiquette de programme facultative et expression est une expression 16 bits, composée d'opérandes définis avant l'instruction ORG. L'assembleur commence la génération du code machine à l'emplacement spécifié dans l'expression. Il peut y avoir n'importe quel nombre d'instructions ORG dans un programme particulier, et il n'y a aucune vérification pour s'assurer que le programmeur ne définit pas de zones de mémoire se chevauchant. Notez que la plupart des programmes écrits pour le système CP/M commencent par une instruction ORG de le format suivant :

  1. ORG 100H

ce qui provoque le démarrage de la génération du code machine à la base de la zone de programme transitoire CP/M. Si une étiquette est spécifiée dans l'instruction ORG, l'étiquette reçoit la valeur de l'expression (Cette étiquette peut ensuite être utilisée dans le champ opérande d'autres instructions pour représenter cette expression).

La directive END

L'instruction END est facultative dans un programme en langage assembleur, mais si elle est présente, elle doit être la dernière instruction (toutes les instructions suivantes sont ignorées dans l'assemblage). L'instruction END prend les deux formes suivantes :

label END
label END expression

label est à nouveau facultative. Si la première forme est utilisée, le processus d'assemblage s'arrête et l'adresse de démarrage par défaut du programme est prise à 0000. Sinon, l'expression est évaluée et devient l'adresse de démarrage du programme (cette adresse de démarrage est incluse dans le dernier enregistrement du fichier hexadécimal de code machine au format Intel résultant de l'assemblage). Ainsi, la plupart des programmes en langage assembleur CP/M se terminent par l'instruction :

  1. END 100H

résultant en l'adresse de départ par défaut de 100h (début de la zone de programme transitoire).

La directive EQU

L'instruction EQU (equate) est utilisée pour définir des synonymes pour des valeurs numériques particulières. L'instruction EQU prend le format suivant :

label EQU expression

label doit être présente, et ne doit étiqueter aucune autre déclaration. L'assembleur évalue l'expression, et affecte cette valeur à l'identificateur donné dans le champ label. L'identificateur est généralement un nom décrivant la valeur d'une manière plus humaine. De plus, ce nom est utilisé dans tout le programme pour placer des paramètres sur certaines fonctions. Supposons que les données reçues d'un télétype apparaissent sur un port d'entrée particulier et que les données soient envoyées au télétype via le port de sortie suivant dans l'ordre. Par exemple, vous pouvez utiliser cette série d'instructions d'équivalence pour définir ces ports pour un environnement matériel particulier :

  1. TTYBASE   EQU 10H        ;NUMERO DE PORT DE BASE POUR TTY
  2. TTYIN     EQU TTYBASE    ;ENTREE DE DONNEES TTY
  3. TTYOUT    EQU TTYBASE+1  ;SORTIE DE DONNEES TTY

Plus tard dans le programme, les instructions accédant au téléscripteur peuvent apparaître comme suit :

  1. IN  TTYIN      ;LIRE LES DONNEES TTY A REG-A
  2.    ; ....
  3. OUT TTYOUT     ;ECRIRE DES DONNÉES SUR TTY A PARTIR DE REG-A

rendant le programme plus lisible que si les ports d'entrée/sortie absolus sont utilisés. De plus, si l'environnement matériel est redéfini pour démarrer les ports de communication du télétype à 7FH au lieu de 10H, la première instruction doit seulement être modifiée en :

  1. TTYBASE EQU 7FH   ;NUMERO DE PORT DE BASE POUR TTY

et le programme peut être réassemblé sans modifier les autres instructions.

La directive SET

L'instruction SET est similaire à EQU, prenant le format suivant :

label SET expression

sauf que l'étiquette peut apparaître sur d'autres instructions SET dans le programme. L'expression est évaluée et devient la valeur actuelle associée à l'étiquette. Ainsi, l'instruction EQU définit une étiquette avec une valeur unique, tandis que l'instruction SET définit une valeur étant valide à partir de l'instruction SET actuelle jusqu'au point où l'étiquette apparaît sur l'instruction SET suivante. L'utilisation de SET est similaire à l'instruction EQU, mais est utilisée le plus souvent pour contrôler l'assemblage conditionnel.

Les directives IF et ENDIF

Les instructions IF et ENDIF définissent une plage d'instructions en langage assembleur devant être incluses ou exclues pendant le processus d'assemblage. Ces déclarations prennent le format suivant :

IF expression
statement#1
statement#2
 ...
statement#n
ENDIF

Lorsqu'il rencontre l'instruction IF, l'assembleur évalue l'expression suivant IF (tous les opérandes de l'expression doivent être définis avant l'instruction IF). Si l'expression donne une valeur différente de zéro, les instructions statement#1 à statement#n sont assemblées. Si l'expression est évaluée à zéro, les instructions sont répertoriées mais pas assemblées. L'assemblage conditionnel est souvent utilisé pour écrire un seul programme générique incluant un certain nombre d'environnements d'exécution possibles, avec seulement quelques parties spécifiques du programme sélectionnées pour un assemblage particulier. Les segments de programme suivants, par exemple, peuvent faire partie d'un programme communiquant avec un téléscripteur ou une console CRT (mais pas les deux) en sélectionnant une valeur particulière pour TTY avant le début de l'assemblage :

  1. TRUE    EQU  0FFFFH      ;DEFINIR LA VALEUR DE TRUE
  2. FALSE   EQU  NOT TRUE    ;DEFINIR LA VALEUR DE FALSE
  3. ;
  4. TTY     EQU  TRUE        ;TRUE SI TTY, FALSE SI CRT
  5. ;
  6. TTYBASE EQU  10H         ;BASE DE PORTS ENTREE/SORTIE TTY
  7. CRTBASE EQU  20H         ;BASE DE PORTS ENTREE/SORTIE CRT
  8.         IF   TTY         ;ASSEMBLER PAR RAPPORT A TTYBASE
  9. CONIN   EQU  TTYBASE     ;ENTREE CONSOLE
  10. CONOUT  EQU  TTYBASE+1   ;SORTIE CONSOLE
  11.         ENDIF
  12.  ;
  13.         IF   NOT TTY     ;ASSEMBLER PAR RAPPORT A CRTBASE
  14. CONIN   EQU  CRTBASE     ;ENTREE CONSOLE
  15. CONOUT  EQU  CRTBASE+1   ;SORTIE CONSOLE
  16.         ENDIF
  17.  ;        ...
  18.         IN   CONIN       ;LIRE LES DONNEES DE LA CONSOLE
  19.         OUT  CONTOUT     ;ÉCRIRE LES DONNEES DE LA CONSOLE

Dans ce cas, le programme s'assemble pour un environnement où un téléscripteur est connecté, basé sur le port 10H. L'instruction définissant TTY peut être remplacée par :

  1. TTY EQU FALSE

et, dans ce cas, le programme s'assemble pour un CRT basé sur le port 20H.

La directive DB

La directive DB permet au programmeur de définir des zones de stockage d'initialisation au format d'octet simple précision. L'instruction DB prend le format suivant :

label DB e#1, e#2, ... , e#n

où e#1 à e#n sont soit des expressions évaluées à des valeurs de 8 bits (le bit de poids fort doit être zéro), soit des chaînes de caractères ASCII d'une longueur maximale de 64 caractères. Il n'y a aucune restriction pratique sur le nombre d'expressions incluses sur une seule ligne source. Les expressions sont évaluées et placées séquentiellement dans le fichier de code machine à la suite de la dernière adresse de programme générée par l'assembleur. Les caractères de chaîne sont placés de la même manière dans la mémoire en commençant par le premier caractère et en terminant par le dernier caractère. Les chaînes de caractères d'une longueur supérieure à deux caractères ne peuvent pas être utilisées comme opérandes dans des expressions plus compliquées (c'est-à-dire qu'elles doivent être isolées entre les virgules).

Remarque : Les caractères ASCII sont toujours placés en mémoire avec le bit de parité réinitialisé (0). De plus, il n'y a pas de traduction des minuscules aux majuscules dans les chaînes de caractères.

L'étiquette facultative peut être utilisée pour référencer la zone de données dans le reste du programme. Voici des exemples d'instructions DB valides :

  1. data:     DB  0,1,2,3,4,5
  2.           DB  data and 0ffh,5,377Q,1+2+3+4
  3. sign-on:  DB  'SVP tapez votre nom',CR,LF,0
  4.           DB  'AB' SHR 8,'C','DE',AND 7FH

La directive DW

L'instruction DW est similaire à l'instruction DB, sauf que des mots d'entreposage à deux octets en double précision sont initialisés. L'instruction DW prend le format suivant :

label DW e#1, e#2, ..., e#n

e#1 à e#n sont des expressions donnant des résultats 16 bits. Notez que les chaînes de caractères ASCII d'un ou deux caractères sont autorisées, mais les chaînes de caractères de plus de deux caractères ne sont pas autorisées. Dans tous les cas, l'entreposage des données est cohérent avec le microprocesseur 8080 : l'octet le moins significatif de l'expression est entreposé en premier en mémoire, suivi de l'octet le plus significatif. Voici des exemples d'instructions DW :

  1. doub: DW 0ffefh,doub+4,signon-$,255+255
  2.       DW 'a',5,'ab','CD',6 shl 8 or llb

La directive DS

L'instruction DS est utilisée pour réserver une zone de mémoire non initialisée et prend le format suivant :

label DS expression

où l'étiquette est facultative. L'assembleur commence la génération de code suivante après la zone réservée par le DS. Ainsi, l'instruction DS donnée ci-dessus a exactement le même effet que l'instruction suivante :

  1. label: EQU $            ;LA VALEUR DE L'ETIQUETTE EST L'EMPLACEMENT ACTUEL DU CODE
  2.        ORG $+expression ;DEPASSER LA ZONE RESERVEE


Dernière mise à jour : Lundi, le 16 janvier 2023