標準的なサブルーチン規約に従った、アセンブラモジュールのハウスキーピングのまとめ。
ENTRY
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
PRINT NOGEN
SAMPLE CSECT
AMODE 31
RMODE ANY
YREGS
*
STM R14,R12,12(R13)
BALR R12,0
USING *,R12
LA R15,SAVEAREA
ST R15,8(,R13)
ST R13,SAVEAREA+4
LR R13,R15
-
PRINT NOGEN: リスト上でマクロの展開を表示しない。 -
CSECT: CSECTの開始宣言。 -
AMODE 31,RMODE ANY: そのままの意味。 -
YREGS: レジスタ名をシンボル定義で宣言するマクロ。R0~R15でレジスタ0~15を表す。 -
STM R14,R12,12(R13): 呼び出し元のR14〜R12をR13+12のアドレスに保存する。 -
BALR R12,0: 次の命令のアドレスをR12に格納してベースレジスタを確立する(分岐はしない)。 -
USING *,R12: R12をベースレジスタとする。 -
LA R15,SAVEAREA: SAVEAREAのアドレスをR15にロードする。 -
ST R15,8(,R13): 呼び出し元のSAVEAREA+8に呼び出し先のSAVEAREAのアドレス(R15)を保存する。 -
ST R13,SAVEAREA+4: 呼び出し先SAVEAREA+4に呼び出し元SAVEAREAのアドレス(R13)を保存する。 -
LR R13,R15: R13にSAVEAREAのアドレスをロードする。
EXIT
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
RETURN L R13,SAVEAREA+4
LM R14,R12,12(R13)
LHI R15,0
BR R14
SAVEAREA DS 18F
LTORG
END
-
L R13,SAVEAREA+4: 呼び出し元のSAVEAREAアドレスをR13に戻す。 -
LM R14,R12,12(R13): 呼び出し元SAVEAREAに保存されていたR14~R12を復元する。 -
LHI R15,0: RCを0に設定。 -
BR R14: 呼び出し元のアドレス(R14)に分岐。 -
SAVEAREA DS 18F: SAVEAREA領域の定義。 -
LTORG: リテラルプールを配置。 -
END: CSECT終端を示す。
