Existait-il des packages de macros de «programmation de niveau supérieur» pour IBM Macro Assembler?
Le langage d'assemblage de macros IBM / 360 était assez puissant, permettant une manipulation non triviale des chaînes lors de la compilation.
Existait-il des packages de macros qui faciliteraient la programmation à un niveau (légèrement) supérieur, comme l'écriture d'expressions sous forme d'infixe, permettant une forme de programmation structurée, normalisant les conventions d'appel de sous-programmes, accédant facilement aux champs de bits, etc.?
La raison pour laquelle je lui demande que l'un des langages d'assemblage BESM-6 était un port de niveau syntaxe de l'assembleur IBM / 360, y compris le langage de macro, par exemple
macro
mnop &a,&b,&c,&d,&e,&f,&g,&h
aif (&a eq '').x
gbla &cnt global arith. variable
mnote * comment &cnt
&cnt seta &cnt+1
nop &a
mnop &b,&c,&d,&e,&f,&g,&h
.x anop
mend
MNOP FIRST,SECOND,THIRD,FOURTH
s'étend à
0001 0001 MACRO
0002 0002 MNOP &A,&B,&C,&D,&E,&F,&G,&H
0003 0003 AIF (&A EQ ’’).X
0004 0004 GBLA &CNT GLOBAL ARITH. VARIABLE
0005 0005 MNOTE * COMMENT &CNT
0006 0006 &CNT SETA &CNT+1
0007 0007 NOP &A
0008 0008 MNOP &B,&C,&D,&E,&F,&G,&H
0009 0009 .X ANOP
0010 0010 MEND
0011 0011 MNOP FIRST,SECOND,THIRD,FOURTH
0012 0005 * COMMENT 0
0013 +0007+ NOP FIRST
0014 0005 * COMMENT 1
0015 +0007+ NOP SECOND
0016 0005 * COMMENT 2
0017 +0007+ NOP THIRD
0018 0005 * COMMENT 3
0019 +0007+ NOP FOURTH
Mais le package de macros précompilé pour la programmation "de niveau supérieur" (probablement également porté depuis IBM / 360 avec les modifications appropriées dépendant de l'architecture) est manquant.
Voici quelques exemples d'utilisation des macros du package:
RЕG (М1 = 1,М2 = 2,М3 = 3,М4 = 4,М5 = 5)
КТ1 ВINDА (А(PAGE1)+KMD+М14)
FКТ3 SТRIТ (NCMD,0,0,8),(NARCH,0,40,8),(SND,0,16,8)
ЕХРR (FNM = $) FILE NAME
ЕХРR (SND = (OWNER,ADDR)) SENDER
ЕХРR (NUMREQ = (OWNER,REQ)) REQUEST NUMBER
IFА (QUEUE),Z=DISCRD NO REQUEST
Rechercher sur le Web les noms de macro les plus distinctifs BINDA
et STRIT
n'aide pas.
Si un package de macros avec ces macros ou des macros similaires existait pour l'assembleur de macros IBM / 360, accéder à son code source serait d'une grande aide.
Réponses
Le langage d'assemblage de macros IBM / 360 était assez puissant, permettant une manipulation non triviale des chaînes lors de la compilation.
Eh bien, le réduire à la "manipulation de chaînes" pourrait ne pas fonctionner, car il n'y a pas de similitude avec les langages de manipulation de chaînes habituels. C'est un langage de programmation impératif plutôt complet. Les programmes sont exécutés lorsqu'ils sont «assemblés». Il fournit des variables globales et locales typées (booléen, entier, chaîne), des tableaux (selon la version de l'assembleur) et plus encore.
Existait-il des macros qui permettraient de faciliter la programmation à un niveau (légèrement) supérieur,
Pas seulement «légèrement» plus haut.
comme écrire des expressions sous forme d'infixe, permettre une forme de programmation structurée, normaliser les conventions d'appel de sous-programmes, accéder facilement aux champs de bits, etc.?
Pour la programmation structurée (qui ofc inclut les conventions d'appel et les structures de données), cela a déjà été répondu dans une question sur les piles sur des machines sans pile:
Comment C a-t-il été porté sur des architectures sans pile matérielle?
Exemple de programme factice, appelant une fonction et vérifiant le résultat, copié à partir de la réponse:
@ENTR TYPE=M,NAME=MAIN ** Main programm, execution starts here
...
@PASS NAME=FUBAR,PLIST=(FCB,RECORD)
@IF NE
LTR R15,R15 * Return Code Not Zero?
@THEN
@EXIT RC=#UNSATISFIED * Finish Program with Return Code UNSATISFIED
@BEND
...
@EXIT RC=#HAPPYENDING * Finish Program with Return Code HAPPYENDING
@END
@ENTR TYPE=L,NAME=FUBAR,PLIST=(FCB,RECORD) * Function FUBAR, called by MAIN
...
(do whatever needed with FCB and RECORD)
...
@EXIT RC=0 * Finish Function with Return Code Zero
@END
Alors que le package COLUMBUS Assembler (* 1) mentionné était AFAIK un développement spécifique à Siemens, il s'agissait d'un code macro 100% F-Assembler. En plus de la bibliothèque de macros, il y avait aussi des formateurs de listes qui transformaient une liste d'assembleur simple en une liste prévue ou Nassi / Shneiderman .
En plus de cela, les projets / entreprises ont bien sûr construit des macros pour permettre une gestion aisée de problèmes plus complexes. De plus, bien sûr, chaque système d'exploitation fournissait également des macros pour tous les services dont ils disposaient.
accéder à son code source serait d'une grande aide
Eh bien, j'ai encore quelque part une cassette avec plusieurs versions (nous l'avons beaucoup modifiée par rapport à sa version originale). De plus je l'ai porté il y a longtemps sur ORCA / M pour l'Apple II. Juste, trouver l'un ou l'autre peut prendre un certain temps.
Là encore, la construction d'une telle bibliothèque pour la programmation structurée est, avec les macros F-Assembler (ou mieux) ou supérieures / compatibles, une tâche essentiellement triviale de construction d'une pile d'analyse pour vérifier la syntaxe et générer des étiquettes. Envoyez-moi un mot, si vous aimez quelques indices.
D / E / F-Assembler (et son langage macro) a été publié peu de temps après l'introduction du / 360, F étant la version `` complète '', mais aussi avec un énorme besoin de RAM de 64 Kio :)) Donc c'est très probable la base de votre colis.
* 1 - Le même package était disponible pour COBOL, juste à ce moment-là, la génération de code était effectuée par un préprocesseur.
Il existe un groupe de macros appelé Concept 14 , qui a été écrit par un employé d'IBM Federal Systems nommé Marvin Kessler. Ils ont fonctionné sur IFOX00 (l'assembleur F) et ont été utilisés comme base pour le HLASMTK SPM.
Un ancien de mes collègues, Paul Scott, les fournit au format IEBUPDTE. Il a également un scan de la documentation; malheureusement, il manque une page.
Je crois qu'ils ont également fait leur entrée dans les mondes Hercules et z390.