Gab es Makropakete für die Programmierung auf höherer Ebene für den IBM Macro Assembler?

Nov 21 2020

Die IBM / 360 Macro Assembly-Sprache war sehr leistungsfähig und ermöglichte eine nicht triviale Manipulation von Zeichenfolgen zur Kompilierungszeit.

Gab es Makropakete, die das Programmieren auf einer (etwas) höheren Ebene erleichtern würden, wie das Schreiben von Ausdrücken in Infixform, das Ermöglichen einer strukturierten Programmierung, das Standardisieren von Konventionen zum Aufrufen von Unterprogrammen, das bequeme Zugreifen auf Bitfelder usw.?


Der Grund, warum ich darum bitte, dass eine der BESM-6-Assemblersprachen ein Port auf Syntaxebene des IBM / 360-Assemblers war, einschließlich der Makrosprache, z

 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

erweitert sich zu

 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

Das vorkompilierte Makropaket für die "übergeordnete" Programmierung (wahrscheinlich auch von IBM / 360 mit den entsprechenden architekturabhängigen Änderungen portiert) fehlt jedoch.

Hier einige Beispiele für die Verwendung der Makros aus dem Paket:

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

Sie suchen nach den markantesten Makronamen BINDAund STRIThilft nicht.

Wenn für den IBM / 360 Macro Assembler ein Makropaket mit diesen oder ähnlichen Makros vorhanden wäre, wäre der Zugriff auf den Quellcode eine große Hilfe.

Antworten

5 Raffzahn Nov 21 2020 at 05:37

Die IBM / 360 Macro Assembly-Sprache war sehr leistungsfähig und ermöglichte eine nicht triviale Manipulation von Zeichenfolgen zur Kompilierungszeit.

Nun, die Reduzierung auf "String-Manipulation" könnte zu kurz kommen, da es keine Ähnlichkeit mit den üblichen String-Manipulationssprachen gibt. Es ist eine ziemlich vollständige imperative Programmiersprache. Programme werden ausgeführt, wenn sie zusammengesetzt sind. Es bietet typisierte globale und lokale Variablen (Bool, Integer, String), Arrays (abhängig von der Assembler-Version) und mehr.

Gab es Makropakete, die die Programmierung auf einer (etwas) höheren Ebene erleichtern würden?

Nicht nur "etwas" höher.

wie das Schreiben von Ausdrücken in einer Infix-Form, das Ermöglichen einer Form der strukturierten Programmierung, das Standardisieren von Konventionen zum Aufrufen von Unterprogrammen, das bequeme Zugreifen auf Bitfelder usw.?

Für die strukturierte Programmierung (zu der auch Aufrufkonventionen und Datenstrukturen gehören) wurde dies bereits in einer Frage zu Stacks auf stapellosen Maschinen beantwortet:

Wie wurde C auf Architekturen ohne Hardware-Stack portiert?


Beispiel eines Dummy-Programms, das eine Funktion aufruft und das Ergebnis überprüft, kopiert aus der Antwort:

    @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

Während das erwähnte COLUMBUS Assembler (* 1) -Paket AFAIK war, eine Siemens-spezifische Entwicklung, war es 100% F-Assembler-Makrocode. Zusätzlich zur Makrobibliothek gab es auch Formatierer, die aus einer direkten Assembler-Liste eine beabsichtigte oder eine Nassi / Shneiderman- Liste machten .

Außerdem haben Projekte / Unternehmen natürlich Makropakete erstellt, um die einfache Behandlung komplexerer Probleme zu ermöglichen. Außerdem lieferte natürlich jedes Betriebssystem Makros für alle Dienste, die es auch hatte.


Der Zugriff auf den Quellcode wäre eine große Hilfe

Nun, ich habe noch irgendwo ein Band mit mehreren Versionen (wir haben es ziemlich viel von seiner ursprünglichen Version geändert). Außerdem habe ich es vor langer Zeit für den Apple II auf ORCA / M portiert. Es kann einige Zeit dauern, bis Sie eines der beiden gefunden haben.

Andererseits ist das Erstellen einer solchen Bibliothek für strukturierte Programmierung mit F-Assembler- Makros (oder besser) oder höher / kompatibel eine meist triviale Aufgabe, einen Parsing-Stack zu erstellen, um die Syntax zu überprüfen und Beschriftungen zu generieren. Schreiben Sie mir eine Nachricht, wenn Sie einige Hinweise mögen.


D / E / F-Assembler (und seine Makrosprache) wurde kurz nach der Einführung von / 360 veröffentlicht, wobei F die 'Vollversion' ist, aber auch einen enormen RAM-Bedarf von 64 KiB aufweist :)) Dies ist also höchstwahrscheinlich die Basis für Ihr Paket.


* 1 - Das gleiche Paket war für COBOL verfügbar. In diesem Moment wurde die Codegenerierung von einem Präprozessor durchgeführt.

2 zarchasmpgmr Nov 22 2020 at 08:42

Es gibt eine Gruppe von Makros namens Concept 14 , die von einem Mitarbeiter von IBM Federal Systems namens Marvin Kessler geschrieben wurden. Sie liefen auf IFOX00 (dem F-Assembler) und wurden als Basis für das HLASMTK SPM verwendet.

Ein ehemaliger Mitarbeiter von mir, Paul Scott, stellt sie im IEBUPDTE-Format zur Verfügung. Er hat auch einen Scan der Dokumentation; Leider fehlt eine Seite.

Ich glaube, sie haben es auch in die Welten Hercules und z390 geschafft.