ASSIRIS

langage assembleur pour les plateformes Iris 50 et Felix C From Wikipedia, the free encyclopedia

L'expression ASSIRIS est un mot abrégé de « Assembleur de Système SIRIS ». Initialement, elle désignait le compilateur du assembleur du système d'exploitation de l'ordinateur Iris 50 (y compris la série romaine Felix C). Au fil du temps, son sens a évolué et elle désigne désormais plus particulièrement le langage assembleur de ces ordinateurs[1],[2].

Date de première version1966
AuteurSDS
DéveloppeurCII, INRIA
Faits en bref Date de première version, Paradigme ...
Langage ASSIRIS
Date de première version 1966
Paradigme impérative
Auteur SDS
Développeur CII, INRIA
Influencé par IBM
Implémentations Iris 50
Système d'exploitation SIRIS 3
Fermer

Histoire

Le langage a été conçu par Scientific Data Systems (SDS) pour son processeur 32 bits Sigma 7, sorti en 1966, compatible avec le système IBM 360, dont il était un concurrent[3]. Son développement fut repris par la CII, puis, à partir de 1967, par l'INRIA, et appliqué aux ordinateurs Iris 50 dont l'assembleur était ASSIRIS.

Description

Comme tout langage assembleur, il vise à rendre les instructions du code machine plus lisibles par l'humain. À l'exception des macros, chaque instruction ASSIRIS est convertie par l'assembleur en une seule instruction de code machine[4]. De ce fait, les commandes peuvent exploiter avec précision et intégralement les capacités du jeu d'instructions « cablées » de l'ordinateur[5].

Le format du texte source

À l'origine, les programmes sources étaient saisis sur des cartes IBM à_80_colonnes, une instruction par carte. Les 72 premières colonnes contenaient plusieurs zones, chacune se terminant par au moins un espace (le séparateur de zones). Le contenu des cartes pouvait être rangées dans des fichiers situés dans « bibliothèques de code source », sur support magnétique ; c'était la méthode de travail habituelle des programmeurs de grands logiciels[6].

Les zones d'instructions sur cartes (ligne de programme) sont les suivantes[6] :

  • « Zone d'étiquette », contenant soit un identificateur converti en adresse relative (déplacement), soit le nom d'un élément de données. Si l'identificateur est absent, la zone doit contenir au moins un espace (le séparateur).
  • « Zone de commande », obligatoire, contenant le nom de la directive ou la commande de l'instruction ou de la macro.
  • « Zone d'arguments », contenant les arguments de l'instruction ou de la macro.
  • « Zone de commentaires », facultative, se terminant avant la colonne 72 et contenant tout caractère reconnu. Elle contient généralement des explications à l'intention du programmeur sur le fonctionnement de l'instruction. Si le premier caractère d'une ligne est « * », la ligne entière est considérée comme un commentaire. Les lignes vides sont également considérées comme des commentaires. Les commentaires sont ignorés par l'assembleur.
  • « Zone de continuation », colonne 72 : si le caractère « * » est présent, les colonnes 22 à 71 de la carte (ligne de programme) suivante sont considérées comme juxtaposées au dernier caractère non vide de la zone de commentaire de la carte précédente.
  • « Zone de séquence », optionnelle, composée des 8 dernières colonnes, contient une numérotation des cartes permettant de rétablir la séquence correcte en cas de mélange.

Drapeaux

Le système Iris 50 possède quatre drapeaux (indicateurs de condition), situés dans les bits 36 à 39 du registre d'état du système. Il s'agit, dans l'ordre[7],[8],[9] :

  • Z, positionné en cas de résultat nul (« Zéro ») ;
  • S, positionné en cas de résultat négatif (« Signe ») ;
  • D, positionné en cas de dépassement de capacité binaire (les retenues des bits 0 et 1 diffèrent) ;
  • C, positionné en cas de retenue du bit 0 (« Carry »).

Les bits 32 à 35 du registre d'état (« EP ») contiennent les masques de débordement, DS, DI, DD, DB, pour les débordements supérieur, inférieur, décimal et binaire, respectivement[7],[8],[9].

Constantes ASSIRIS

Dans le langage ASSIRIS, il existe 8 types de constantes[10],[5] :

  • Constantes chaîne de caractère : toute chaîne de caractères de 256 caractères maximum (EBCDIC), placée entre guillemets simples. Exemples : 'ABC' ou C'ABC'.
Si la chaîne contient elle-même des guillemets simples, elle doit être déclarée avec « C », et les guillemets simples de la chaîne doivent être doublés. Par exemple, la chaîne A'BC' est déclarée comme C'A''BC'''.
  • Constantes entières : toute chaîne de chiffres décimaux signés (le signe « + » peut être omis). La chaîne peut être placée entre guillemets simples et précédée du caractère « I ». Exemples : 1234, +1234, −567, I'1234'.
  • Constantes hexadécimales : toute chaîne de 255 caractères hexadécimaux maximum, placée entre guillemets simples et précédée des caractères « X » ou « S ». Exemples : X'FFFF', S'3A4F52', −X'3A4F52'.
  • Constantes octales : toute chaîne de caractères d’au maximum 255 chiffres octaux, placée entre guillemets simples et précédée du caractère « O ». Exemples : O’777’, O’347’, −O’34725107’.
  • Constantes décimales : toute chaîne de caractères d’au maximum 31 chiffres décimaux, éventuellement précédée ou suivie des signes «  » ou « + », placée entre guillemets simples et précédée du caractère « D ». Exemples : D’3456’, D’+3456’, D’3456+’, D’−3456’, D’908−’.
  • Constantes à virgule fixe : une séquence de caractères de la forme FX'±z1.z2 Eα Bβ', où « z1.z2 » est un nombre décimal, « Eα » est l'exposant décimal en notation E, et « Bβ » est le facteur d'échelle (également un exposant, comme E) nécessaire pour ramener le nombre à une valeur inférieure à l'unité. Exemples : FX'2.56E−1B2', FX'2.56', FX'256.E−3B4'.
  • Constantes à virgule flottante hexadécimale courte : séquence de caractères de la forme FS'±z1.z2 Eα', où « z1.z2 » est un nombre décimal et « Eα » est l'exposant décimal en notation E. Exemples : FS'5.7E10', FS'5.E−10', FS'−5.7+2'.
  • Constantes virgule flottante hexadécimale longue : séquence de caractères de la forme FL'±z1.z2 Eα' (avec un « E », et non un « D »), où « z1.z2 » est un nombre décimal et « Eα » est l'exposant décimal en notation E. Exemples : FL'5.7E10', FL'5.E−10', FL'−5.7+2'.

Les instructions du langage

Les instructions du langage peuvent être de trois types[11] :

  • Directives d'assemblage ;
  • Instructions exécutables ;
  • Macro-instructions.

Directives d'assemblage

Les directives d'assemblage sont des commandes qui communiquent diverses informations à l'assembleur. Ces directives sont présentées dans le tableau suivant[12].

Davantage d’informations Directive, Fonction ...
DirectiveFonction
DATADéclaration permettant de générer des constantes dont les valeurs sont données dans la zone d'arguments.
GENIdentique à la DATA, pour les constantes binaires.
TEXTIdentique à la DATA, pour les chaînes de caractères EBCDIC.
TEXTCIdentique à la TEXT, de plus, générer la longueur de la chaîne dans un octet avant le texte (max. 256 caractères).
COMDéfinit une commande utilisateur.
EQUAttribue une valeur d'adresse à une étiquette.
RESRéserver un espace mémoire.
ORGAttribue une valeur d'adresse au compteur de position.
BOUNDAligne le compteur de position sur un multiple de 2, 4 ou 8.
FETCHSCharge le programme source à partir d'une bibliothèque (au lieu de cartes).
CSECTDéfinit le début et le type d'une section. Une section peut être de type programme (argument : P), données (D) ou commun (C). Si l'argument est absent, la section est considérée comme un programme.
DSECTDéfinit le début d'une section factice. Une section factice peut contenir les directives RES, ORG, BOUND, EQU, TITLE, PAGE, LIST, NLIST, SPACE.
DEFDéclare une liste d'identificateurs comme références externes (qui sont également reconnus par d'autres sections).
REFDéclare une liste d'identificateurs comme références externes (utilise des identificateurs déclarés dans d'autres sections).
SEGREFDéclare une liste d'identificateurs comme noms de segments (implicit références externes).
ENTREFDéclare une liste d'identificateurs à la fois comme références externes et comme points d'entrée dans le segment.
USINGAttribue un registre de base à un segment externe.
USDAttribue un registre de base à une section factice (nécessaire pour l'assemblage des identificateurs dans cette section).
GOTODétermine si l'assemblage se poursuit à partir de l'une des étiquettes spécifiées, en fonction d'un index.
DO / FINGénère un certain nombre de séquences consécutives d'instructions similaires, qui dépendent d'un compteur spécifié dans la zone d'arguments.
ENDSignale à l'assembleur la fin du texte source de l'unité d'assemblage.
TITLEAffiche dans la liste de sortie (avec le texte source du programme) un titre après chaque saut de page.
PAGEInsère un saut de page dans la liste de résultats.
SPACEInsére un saut de n lignes dans la liste de sortie (laisse n lignes vides).
LISTReprendre l'impression de la liste imprimée, interrompue par la directive NLIST.
NLISTArrête l'impression de la liste imprimée.
Fermer

Instructions exécutables

Chacune de ces instructions est convertie en une seule instruction de code machine.

Format des instructions en représentation interne (code machine)

Toutes les instructions sont représentées sur 32 bits (un « mot »). Leur format est le suivant[13],[14],[15],[16] :

1 3 4 1 7 16 (largeur, en bits)
I B Q X F D  
0 1 3 4 7 8 9 15 16 31 (index de bits)*
* La documentation de CII numérote les bits de gauche à droite, de sorte que le bit le plus significatif soit le bit numéro 0.

La zone F contient le code de l'instruction à exécuter. Sur 7 bits, on peut représenter 128 instructions exécutables, mais le jeu d'instructions n'en compte que 102. Les 26 autres emplacements de code sont inutilisés[13],[16].

La zone B contient le numéro du registre de base avec un excédent de −8. Seuls les registres R9 à R15 pouvant servir de registres de base ; la zone B contient les 3 derniers bits de leur numéro. Si la zone B contient « 000 », la valeur de base prise en compte sera 0000000016 lors du calcul de l'adresse[13],[16].

La zone D contient le déplacement (adresse relative). Étant représentée sur 16 bits, elle peut avoir des valeurs couvrant une zone de mémoire de 64 Ki[13],[16].

La zone I contient le mode d'adressage. L'adressage direct est défini par 0, et l'adressage indirect par 1. En adressage direct, l'adresse calculée est la somme du contenu du registre de base utilisé (zone B) et du déplacement (zone D). En adressage indirect, l'adresse obtenue, comme en adressage direct, est l'adresse d'un mot mémoire qui, dans les zones I, B et D, contient les informations nécessaires au calcul d'une nouvelle adresse. Il existe cinq niveaux d'adressage indirect[13],[16].

La zone X contient le mode d'indexation. Pour 0, l'adressage est non indexé, et pour 1, indexé. En cas d'adressage non indexé, l'adresse est calculée comme est expliqué précédemment. En cas d'adressage indexé, le contenu du registre général (appelé ici « registre d'index ») dont le numéro est spécifié dans la zone Q est ajouté à l'adresse calculée. L'adressage indirect et l'adressage indexé peuvent être combinés, mais l'indexation est utilisée en dernier[13],[16].

La zone Q peut stocker diverses informations, en fonction du code d'opération : le numéro du registre d'index, un opérande, une constante ou un masque[13],[16].

Liste des instructions exécutables

La signification des symboles dans le tableau d'instructions est la suivante[17] :

Equation:Sintaxe:
C, D, S, ZDrapeauxAAdresse (explicite ou implicite)
EPRegistre contenant l'état programmeLExpression de longueur
ETIntersectionMMnémonique
ICDrapeaux (indicateurs de condition)RExpression de registre
OURéunionVExpression de valeur
PRégistre d'adresse programmmeXExpression d'index
QLa zone Q d'une instruction*Signe d'adressage indirect
RUn des régistres généraux
R5–7Les bits 5–7 d'un des régistres généraux
R0Registre général no. 0Option :
R05–7Les bits 5–7 du registre général no. 0DOpérateur de calcul décimal
YAdresse effective de l'instruction considereeMProtection mémoire
Y'Adresse définie par le contenu de l'un des régistres générauxSOpérator de calcul en virgule flotante
Y8–31Les bits 8–31 de l'adresse YPInstruction privillégiée
21–31YLes bits 21–31 de l'adresse Y, pris pour opérande
rangér à, ou charger dansExemple:
: :Comparaison(R0–7) : : (Y) →Z, C
Disjonction exclusiveLe contenu des positions binaires 0–7 du registre R
est comparé au contenu de l'adresse efectve Y.
Le résultat est chargé dans les drapeaux Z et C.
( )Contenu de
(( ))Contenu du contenu de

Les 102 instructions de code machine exécutables sont[18],[19],[20] :

Davantage d’informations Code hexa, Mnémo- nique ...
Code
hexa
Mnémo-
nique
FonctionEffet
01EX2Intersection demi-mot(R0–15) ET (Y) → R0–15
02EX4Intersection mot(R0–31) ET (Y) → R0–31
05MG2Reunion demi-mot(R0–15) OU (Y) → R0–15
06MG4Reunion mot(R0–31) OU (Y) → R0–31
08LDL2Chargement demi-mot droit(Y) → R16–31 et « 0 » → R0–15
09LDH2Chargement demi-mot gauche(Y) → R0–15
0ALD4Chargement mot(Y) → R0–31
0BLD8Chargement double-mot(Y) → R0–63
0CLASChargement mot et marquage(Y) → R0–31 et « 1 » → Y0
0DEO2Disjunction exclusive demi-mot(R0–15) ⊕ (Y) → R0–15
0EEO4Disjunction exclusive mot(R0–31) ⊕ (Y) → R0–31
10CP1Comparaison caractère(R0–7) : : (Y) → Z, C
11CP2Comparaison demi-mot(R0–15) : : (Y) → Z, S, D, C
12CP4Comparaison mot(R0–31) : : (Y) → Z, S, D, C
13CP8Comparaison double-mot(R0–63) : : (Y) → Z, S, D, C
15SBH2Soustraction demi-mot gauche(R0–15) − (Y) → R0–15
16SB4Soustraction mot(R0–31) − (Y) → R0–31
17SB8Soustraction double-mot(R0–63) − (Y) → R0–63
18LD1Chargement caractère gauche(Y) → R0–7
19LDC2Chargement opposé demi-mot−(Y) → R0–15
1ALDC4Chargement opposé mot−(Y) → R0–31
1BLDC8Chargement opposé double-mot−(Y) → R0–63
1CADL2Addition demi-mot droit(R0–31) + (Y) → R0–31
1DADH2Addition demi-mot gauche(R0–15) + (Y) → R0–15
1EAD4Addition mot(R0–31) + (Y) → R0–31
1FAD8Addition double-mot(R0–63) + (Y) → R0–63
20SH2Décalage(a) demi-mot(R0–15) → R0–15
21SH4Décalage (a) mot(R0–31) → R0–31
22NF4Normalisation flottant court(R0–31) → R0–31 (normalisé)
24CP1IComparaison caractère immédiat(R0–7) : : (24–31Y) → Z, C
26SB4ISoustraction mot immédiat(R0–31) − (8–31Y) → R0–31
27AD4IAddition mot immédiat(R0–31) + (8–31Y) → R0–31
28LD1IChargement caractère immédiat(24–31Y) → R0–7
29LD2IChargement demi-mot immédiat(16–31Y) → R0–15
2ALD4IChargement mot immédiat(8–31Y) → R8–31 et « 0 » → R0–7
2BLDDAChargement adresse décimaleY → R014–31 et L → R04–7
2CLDMChargement multiple(Y) → R0, (Y+4) → R1, (Y+8) → R2 etc.
2DSTMRangement multiple(R0) → Y, (R1) → Y+4, (R2) → Y+8 etc.
(2E)CSVAppeler le superviseur(Instruction inexistante, générant un déroutement.)
30MP2Multiplication demi-mot(R0–15) × (Y) → R0–30
31MPU2Multiplication arithmétique demi-mot(R0–15) × (Y) → R0–31
32DV2Division(c) demi-mot(R0–31) : (Y) → R0–31
33DVU2Division(b) arithmétique demi-mot(R0–31) × (Y) → R0–31
34BCFBranchement sur condition fause(b)Y → P si Q ET (IC) = 0
35BCTBranchement sur condition vraie(b)Y → P si Q ET (IC) ≠ 0
36BDFBranchement avec décrémentation
sur condition fause
Y → P si (R4–7) ET (IC) = 0
et si (R8–31) − (R0–3) ≥ 0
37BDTBranchement avec décrémentation
sur condition vraie
Y → P si (R4–7) ET (IC) ≠ 0
et si (R8–31) − (R0–3) ≥ 0
38BRUBranchement inconditionelY → P
39BALBranchement avec enchainement(P) + 4 → R0–31 puis Y → P
3AEXUExecutionY → P puis retour en séquence
3CANALNAnalyse instruction normaleExtraire des informations des zones d'instruction
3DANALDAnalyse instruction décimaleExtraire des informations des zones d'instruction
40STTMRangement masques de débordement(EP32–35) ET Q ou (Y0–3) ET Q → Y0–3
41LDTMChargement masques de débordement(Y0–3) ET Q ou (EP32–35) ET Q → EP32–35
42STCRangement drapeaux(IC) ET Q ou (Y0–3) ET Q → Y4–7
43LDCChargement drapeaux(Y4–7) ET Q ou (IC) ET Q → IC
44STS2Rangement sélectif demi-mot(R0–15) ET (R32–47) → Y
ou (Y) ET (R32–47) → Y
45LDS2Chargement sélectif demi-mot(Y) ET (R32–47) → R0–15
ou (R0–15) ET (R32–47) → R0–15
46IC2Incrémentation demi-mot(Y) + Q → Y
47IC4Incrémentation mot(Y) + Q → Y
48MVSLTransfert d'une chaine de caractères
de droite à gauche
(Y') → Y, (Y'−1) → Y−1, (Y'−2 ) → Y−2 etc.
49MVSRTransfert d'une chaine de caractères
de gauche à droite
(Y') → Y, (Y'+1) → Y+1, (Y'+2 ) → Y+2 etc.
4ACYBLRecopie d'un caractère dans une chaine
de droite à gauche
(24–31Y) → R, (24–31Y) → R−1, (24–31Y) → R−2 etc.
4BCYBRRecopie d'un caractère dans une chaine
de gauche à droite
(24–31Y) → R, (24–31Y) → R+1, (24–31Y) → R+2 etc.
4CCPSLCompaison de 2 chaines de caractères
de droite à gauche
(Y') : : (Y) → Z, C
4DCPSRCompaison de 2 chaines de caractères
de gauche à droite
(Y') : : (Y) → Z, C
4ETRTLTranscodage et test d'une chaine de caractères
de droite à gauche
(Y') : : (Y) → Z, C
4FTRTRTranscodage et test d'une chaine de caractères
de gauche à droite
(Y') : : (Y) → Z, C
50RDLecture directeInstructions d'Entrée / Sortie
51WDÉcriture directe
52SIODépart Entrée / Sortie
53HIOArrèt Entrée / Sortie
54TIOContrôle Entrée / Sortie
55TDVContrôle de périphérique
56AIOAquittement intrerrupt Entrée / Sortie
57WTAttente
58ST1Rangement caractère gauche(R0–7) → Y
59ST2Rangement demi-mot gauche(R0–15) → Y
5AST4Rangement mot(R0–31) → Y
5BST8Rangement double-mot(R0–63) → Y
5CSTPARangement adresse programme(P8–29) → Y et „0” → Y30–31
5DLPKChargement des clés de protection(P8–29) → Y et „0” → Y30–31
5ELPSChargement Etat-Programme(Y) → EP0–63
5FSHDDécalage décimal(Y') → Y (aprés décalage)
60ZADTransfert décimal(Y) → Y'
61ADDAddition décimale(Y') + (Y) → Y'
62SBDSoustraction décimale(Y') − (Y) → Y'
63CPDComparaison décimale(Y') : : (Y) → Z, S, D, C
64MPDMultiplication décimale(Y') × (Y) → Y'
65DVDDivision décimale(Y') : (Y) → Y'
66PACKCondensation (décimale)(Y') (dilaté) → Y (condensé)
67UNPKDilatation (décimale)Y (condensé) → (Y') (dilaté)
68DV4Division fractionnaire(d) mot(R0–63) : (Y) → R0–63
69MP4Multiplication fractionnaire mot(R0–31) × (Y) → R0–62
6BSH8Décalage(a) double-mot(R0–63) → R0–63
6CADF4Addition flottant court(R0–31) + (Y) → R0–31
6DSBF4Soustraction flottant court(R0–31) − (Y) → R0–31
6EMPF4Multiplication flottant court(R0–31) × (Y) → R0–31
6FDVF4Division flottant court(R0–31) : (Y) → R0–31
7CADF8Addition flottant long(R0–63) + (Y) → R0–63
7DSBF8Soustraction flottant long(R0–63) − (Y) → R0–63
7EMPF8Multiplication flottant long(R0–63) × (Y) → R0–63
7FDVF8Division flottant long(R0–63) : (Y) → R0–63
Fermer
(a) Les décalages peuvent être logique, arithmétique, circulaire ou une normalisation, à droite ou à gauche, selon le contenu des bits 20 à 23 de la zone d'adresse. Le nombre de positions à déplacer est donné par le contenu des bits 26 à 31 de la zone d'adresse (63 positions maximum). Pour simplifier la déclaration des décalages, l'assembleur reconnaît 20 mnémoniques « étendues », exemples : SLL2, SRC4, SRA8, SN4 etc.
(b) Pour simplifier la déclaration de branchements, l'assembleur reconnaît 11 mnémoniques « étendues », exemples : BZ, BLZ, BLEZ, BC, BNC, BOV etc.
(c) Le quotient est dans R0–15, et le reste dans R16–31.
(d) Le quotient est dans R0–31, et le reste dans R32–63.

Macro-instructions

Une macro-instruction transforme un mnémonique en une séquence d'instructions. Le langage ASSIRIS ne permet pas à l'utilisateur d'écrire ses propres macros, mais de nombreuses macros prédéfinies sont disponibles dans la bibliothèque du système d'exploitation. Pour les utiliser, il suffit de connaître les fonctions exécutées ; il n'est pas nécessaire de connaître les séquences générées. Le tableau suivant présente quelques exemples de macros ASSIRIS (cette liste n'est pas exhaustive)[4].

Davantage d’informations Mnemo- nique, Effet ...
Mnemo-
nique
Effet
ABORTArrêt anormal de l'exécution du programme
ASSIGNAssocie les périphériques nécessaires à l'exécution d'un programme.
CALLCharge un segment dans la mémoire de l'ordinateur et le lance en exécution.
CBFournit au superviseur un bloc de commande d'Entrée / Sortie
CLOSEFerme (interdit l'accès à) le fichier après avoir terminé les opérations en cours
DLTSupprime (en plaçant un indicateur d'invalidation) le dernier article lu
EXUPDemande au superviseur d'exécuter un programme d'Entrée / Sortie défini par l'utilisateur
GETLit l'article suivant d'un fichier séquentiel
IOCDécrit le programme d'unité d'echange (pour les Entrées / Sorties)
LDSGCharge un segment dans la mémoire de l'ordinateur
MSTMessage destiné à un périphérique système, généralement la console (1) et l'imprimante (2).
OPENOuvre (permet d'accéder à) un fichier
PUTÉcrit un article à la position suivante dans un fichier séquentiel
RELEASELibère les périphériques précédemment associés au programme par l'instruction ASSIGN
RPLRemplace un article dans un fichier séquentiel ; le positionnement est effectué avec GET
RSTReprend la séquence d'Entrée / Sortie bloquée.
SFDDécrit un fichier séquentiel
SXRDemande la gestion d'un événement exceptionnel via une séquence de retour exceptionnel
TERMArrêt normal de l'exécution du programme
TIMEFournit l'heure (HMS) basée sur l'heure déclarée lors de l'initialisation du système.
TYPEDemande l'exécution d'un programme d'Entrée / Sortie à console défini par l'utilisateur dans TWB
TWBFournit au superviseur un bloc de commande d'Entrée / Sortie pour la macro TYPE
VXRDemande la fin de la séquence de retour exceptionnel et sa revalidation.
WAITMet le programme en attente jusqu'à ce qu'un événement externe se produise,
généralement à la fin d'une opération d'Entrée / Sortie
Fermer

Exemple de séquence générée par la macro « LDSG nom, EB: adresse1, LA: adresse2 » :

          LD4I,2     adresse1
          LD4I,3     adresse2
          CSV        X'06', code

 :

  • adresse1 est l'adresse du mot de commande permettant à l'utilisateur de contrôler lui-même le chargement ; si elle n'est pas nécessaire, la macro est utilisée avec l'argument « NEB », ce qui génère adresse1 = 0 ;
  • adresse2 est l'adresse où le segment est chargé ; si c'est celle définie par l'éditeur de liens, la macro est utilisée avec l'argument « NLA », ce qui génère adresse2 = 0 ;
  • code est le code d'identification du segment « nom ».

Exemple de programme en ASSIRIS

Exemple de programme « Hello World » :

* AFFICHER « BONJOUR LE MONDE » SUR LA CONSOLE DE L'OPERATEUR

DEBUT    MST   1,MESSAGE       ECRIRE LE MESSAGE SUR L'UNITE 1
         WAIT  1               ATTENDEZ LA FIN DE L'UNITE 1
         TERM  0               ARRET NORMAL DU PROGRAMME

MESSAGE  DATA  C'BONJOUR LE MONDE'  TEXTE DU MESSAGE
         END   DEBUT           FIN, ADRESSE DE LANCEMENT

En cet exemple, DEBUT et MESSAGE sont des identificateurs (qui seront convertis en adresses), MST, WAIT et TERM sont des macro-instructions, et DATA et END sont des directives. Le reste sont des commentaires.

Références

Bibliographie

Voir aussi

Related Articles

Wikiwand AI