Existait-il des packages de macros de «programmation de niveau supérieur» pour IBM Macro Assembler?

Nov 21 2020

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 BINDAet STRITn'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

5 Raffzahn Nov 21 2020 at 05:37

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.

2 zarchasmpgmr Nov 22 2020 at 08:42

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.