IBM Macro Assembler用の「高レベルのプログラミング」マクロパッケージはありましたか?

Nov 21 2020

IBM / 360マクロ・アセンブリー言語は非常に強力であり、コンパイル時の文字列操作が簡単ではありませんでした。

中置形式での式の記述、構造化プログラミングの形式の許可、サブルーチン呼び出し規約の標準化、ビットフィールドへの便利なアクセスなど、(わずかに)高いレベルでのプログラミングを容易にするマクロパッケージは存在しましたか?


BESM-6アセンブリ言語の1つが、マクロ言語を含むIBM / 360アセンブラの構文レベルのポートであると私が尋ねる理由。

 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

に展開します

 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

しかし、「高レベル」プログラミング用にプリコンパイルされたマクロパッケージ(適切なアーキテクチャー依存の変更を加えてIBM / 360から移植された可能性が高い)がありません。

パッケージのマクロを使用するいくつかの例を次に示します。

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

最も特徴的なマクロ名BINDAをWebで検索STRITしても、役に立ちません。

これらのマクロまたは同様のマクロを含むマクロパッケージがIBM / 360 Macro Assemblerに存在する場合、そのソースコードにアクセスすることは非常に役立ちます。

回答

5 Raffzahn Nov 21 2020 at 05:37

IBM / 360マクロ・アセンブリー言語は非常に強力であり、コンパイル時の文字列操作が簡単ではありませんでした。

通常の文字列操作言語との類似性がないため、「文字列操作」に減らすことは不十分かもしれません。これは、かなり完全な命令型プログラミング言語です。プログラムは「アセンブル」時に実行されます。型指定されたグローバル変数とローカル変数(bool、integer、string)、配列(アセンブラーのバージョンによって異なります)などを提供します。

(わずかに)高いレベルでのプログラミングを容易にするマクロパッケージは存在しましたか?

「わずかに」高いだけではありません。

中置形式で式を書く、構造化プログラミングの形式を許可する、サブルーチン呼び出し規約を標準化する、ビットフィールドに便利にアクセスするなどのように?

構造化プログラミング(多くの場合、呼び出し規約とデータ構造が含まれます)の場合、これはスタックレスマシンのスタックに関する質問ですでに回答されています。

Cはハードウェアスタックのないアーキテクチャにどのように移植されましたか?


答えからコピーされた、関数を呼び出して結果を確認するダミープログラムの例:

    @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

前述のCOLUMBUSアセンブラ(* 1)パッケージは、ジーメンス固有の開発であるAFAIKでしたが、100%Fアセンブラマクロコードでした。マクロライブラリに加えて、ストレートアセンブラリストを意図されたリストまたはNassi / Shneidermanリストに変換するリストフォーマッタもありました。

それに加えて、プロジェクト/企業はもちろん、より複雑な問題を簡単に処理できるようにマクロパッケージを構築しました。さらに、もちろん、すべてのOSは、提供しているサービスにマクロを提供していました。


ソースコードにアクセスすることは非常に役立ちます

まあ、私はまだどこかにいくつかのバージョンのテープを持っています(元のバージョンからかなり変更しました)。さらに、私はずっと前にそれをAppleII用のORCA / Mに移植しました。ただ、どちらかを見つけるのに時間がかかるかもしれません。

繰り返しになりますが、構造化プログラミング用にこのようなライブラリを構築することは、F-アセンブラー(またはそれ以上)のマクロ以上/互換性がある場合、構文をチェックしてラベルを生成するための解析スタックを構築するというほとんど簡単な作業です。ヒントが必要な場合は、私にメモを送ってください。


D / E / F-アセンブラー(およびそのマクロ言語)は、/ 360が導入された直後に公開されました。Fは「フル」バージョンですが、64 KiBの巨大なRAM要件もあります:))したがって、これはおそらくパッケージのベース。


* 1-同じパッケージがCOBOLで使用可能でしたが、その直後にコード生成がプリプロセッサによって実行されました。

2 zarchasmpgmr Nov 22 2020 at 08:42

マーヴィン・ケスラーという名前のIBM連邦システムの従業員によって書かれたコンセプト14と呼ばれるマクロのグループがあります。それらはIFOX00(Fアセンブラー)で実行され、HLASMTKSPMの基礎として使用されました。

私の元同僚であるPaulScottは、IEBUPDTE形式でそれらを提供しています。彼はまた、ドキュメントのスキャンを持っています。残念ながら、ページがありません。

彼らはヘラクレスやz390の世界にも進出したと思います。