IBM Macro Assembler用の「高レベルのプログラミング」マクロパッケージはありましたか?
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に存在する場合、そのソースコードにアクセスすることは非常に役立ちます。
回答
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で使用可能でしたが、その直後にコード生成がプリプロセッサによって実行されました。
マーヴィン・ケスラーという名前のIBM連邦システムの従業員によって書かれたコンセプト14と呼ばれるマクロのグループがあります。それらはIFOX00(Fアセンブラー)で実行され、HLASMTKSPMの基礎として使用されました。
私の元同僚であるPaulScottは、IEBUPDTE形式でそれらを提供しています。彼はまた、ドキュメントのスキャンを持っています。残念ながら、ページがありません。
彼らはヘラクレスやz390の世界にも進出したと思います。