「メインフレーム・コンピューター」で遊ぼうこんな時代に今さらメインフレーム・コンピューターに取り組むハメになったみんなが助けあうサイトです。RSSWordPress.orgコスパのいい社内システムの作り方メインフレームを扱っていると、軽い開発やメンテナンスにリソースを割けない、しかし、BPCも考えねば。解決策のひとつがクラウドにおくFileMakerです。Comment印刷用ページの表示これから汎用機のアセンブラーに関してプログラミングを覚えようとする方向けに、基本的な命令の動きや、レジスターやメモリーに設定した内容を簡単に見るためのひな型プログラムを用意しました。JCLと一体になっているので必要な命令とデータを記述してサブミットすれば、実行結果をSYSOUTに出力できます。z/OS(MSPやVOS3を含む)で実際に動かせるアセンブラープログラムを作るには、単に実行させたい命令やデータを書くだけでは済みません。OSから呼び出された時点での最低限必要な手続きや、実行結果の編集・出力が必要になります。そのためには、OSやデータ管理のAPIも合わせて学ばねばなりません。実行させたい命令の直後でわざとABENDさせてダンプを出力し、そのダンプリストからレジスターやメモリーの内容を見るかです。どちらの方法も、全くのビギナーには少々敷居が高いです。このひな型を使えば、純粋に試して見たい命令やデータを書くだけでテストすることができます。そのため、基本的な命令の動きを実際に動かして理解してから次のステップへ進むことが出来ます。書いたプログラムに誤りがあればそのプログラムは異常終了しますが、どの命令が誤っているのかなどを調べるにはダンプの解析が必要で、これも面倒な作業です。このひな型では基本的な機械命令の使用誤りに関しては、異常終了をトラップしてメッセージで通知します。正常であれ、エラーであれ、記述した命令とデータによってCPUが何を行い、メモリー内容がどう変わったかを簡単に見ることができるようにしてあります。アセンブラー学習用のひな型プログラム制御用マクロ命令アセンブラー学習用のひな型プログラムJCL(z/OS用)z/OSの他、フリーで利用できるMVS3.8、MSPおよびVOS3でも実行できます。z/OS以外で試したい方は、ダウンロード後にJCLのアセンブラーとローダーのステップを、各OSに合わせて修正してください。制御部分のコードが使っているOSのAPIは古典的なものなので互換OSであるMSPとVOS3でもプログラム自体はそのまま動かすことができます。ひな型プログラムJCLの使い方このひな型自身はJCLになっています。JCLのストリーム内データセットとしてアセンブラー言語のプログラムが記述してあり、その中の指定された部分に試してみたい命令とデータを書いてサブミットすれば実行されます。コーディングの構文に誤りがあれば、アセンブルのステップでエラーになりジョブは終了します。アセンブルが通れば続いてローダーが実行されロードモジュールが作成されてプログラムが実行されます。用意されたひな型コードの先頭、最後の命令の直後、プログラムの終わり、の3箇所にアセンブラー学習用として動くための制御コードを埋め込むマクロ命令が記述されています。このマクロ命令の記述は変更しないで下さい。マクロ命令とひな型プログラムJCLのメンバー・データをダウンロードして適当なデータセットに格納すれば実行できます。ひな型プログラムとひな型プログラムが使用する制御用マクロ命令を格納するソース・データセットを用意するソース・データセット名は、使用するシステムの規約に従って決めます。自由に決めてよいなら、TSOのユーザーIDを第1修飾子にして、第2修飾子をASMにします。このDSNは、ひな型のJCLが想定したものです。DSORGは、区分データセットまたはPDSEです。容量とDIRブロック数は適当でかまいません。10TRKで10DIRもあれば十分でしょう。最初に、ひな型プログラム制御用マクロ命令をダウンロードして下さい。その後に、ひな型プログラムJCLをダウンロードして使用します。ひな型プログラムJCLを修正する以下のJCLは「アセンブラー学習用のひな型プログラムJCL(z/OS用)」の内容です。JOBステートメントを使用するシステムの規約に合わせて修正して下さい。DDステートメントの先頭に定義した「DSN=&SYSUID..ASM」のDSNを@EDUCNTLマクロを格納した区分データセットの名前に変更します。z/OSでは、&SYSUID.の部分がTSOのユーザーIDに自動的に置き換わります。DDステートメントの先頭に定義する@EDUCNTLマクロ格納データセットの名前変更だけでなく、各OS用のアセンブラーに合わせて修正を追加する必要があります。以下に示す例を見て使用するOS用に修正を追加します。太字部分が修正箇所です。:MVS3.8およびMSP用は、ここ「アセンブラー学習用のひな型プログラムJCL(MVS3.8,MSP用)」からダウンロードできます。VOS3用は、どちらかを選んでダウンロードして修正して下さい。オブジェクト・モジュールの出力先DD名に注意します。z/OSとVOS3はSYSLINですが、MVS3.8とMSPはSYSGOです。各OS毎のアセンブラーJCLの作り方については「アセンブラープログラムの作成(アセンブルJCL)」にも解説があります。記述されたひな型コード内の「ここに実行したい機械命令コードを書いて下さい。」のところに、試してみたい機械命令を書いて下さい。命令が参照するデータは「ここに機械命令で参照するデータを書いて下さい。」のところに定義します。※@EDUCNTLマクロ命令の記述部分はいじらないで下さい。意味がわからなくてもかまいません。そのままにしておいて下さい。それから、このひな型プログラムではレジスター13番はいじらないようにします。このプログラムに関する決まり事だと思ってください。命令とデータを書いたら、サブミットします。ジョブが開始すると、最初にアセンブラーが実行されて記述したアセンブラー・プログラムが翻訳されてオブジェクト・モジュールが作成されます。続けてローダーが実行されてオブジェクト・モジュールをロード・モジュールに変換してメモリーに読み込み実行します。ここに実行したい機械命令コードを書いて下さい。ここに機械命令で参照するデータを書いて下さい。END////このひな型プログラムは、基本的な命令の動きを学習するレベルのプログラムを前提に作ってあります。OSのAPIを呼び出したり、データセットのアクセスをしたりの少しレベルの高いプログラムも記述は可能ですが、そのような箇所でエラーが起きても正しくトラップしたり、実行結果を出力させたりすることはできません。自力でABENDダンプなどを解析する必要があります。そのようなプログラムが書けるレベルになればこのひな型はもう不要でしょう。このひな型で制御できるのは24ビット・モードのプログラムです。ひな型をそのまま使えば24ビット・モードのプログラムになります。プログラム内で直接アドレッシング・モードを変更するような命令を使わない限りアドレッシング・モードは気にしなくてもいいです。アセンブル・リストと実行結果の見方アセンブラー言語でのプログラミングにおいてはアセンブル・リストは非常に重要です。細かな見方はマニュアルを見るとして、まずは自分が書いた命令やデータがプログラム内のどの位置に置かれ、どのようなバイナリーコードに変換されたかぐらいはわかるようにしてください。このぐらいはマニュアルを見なくてもリストを見れば簡単にわかります。COBOLやC言語などと違ってアセンブラーではアセンブル・リストがなければデバッグできないと言っても過言ではありません。アセンブル・リストはASMステップのDD名SYSPRINTのSYSOUTに出力されます。EXITマクロの直前の命令)の終了時点における完了コード(GR15の値)、汎用レジスターの内容とメモリーの内容です。メモリー内容は、書かれた命令コードとデータの部分がダンプ形式で出力されます。出力先はGOステップのDD名SYSPRINTのSYSOUTです。実行結果リストの説明プログラムが異常終了した場合プログラムに誤りがあって異常終了(ABEND)すると、プログラムの実行は停止されます。*ABENDEDに続くS0CxがABENDコードです。システム・コードのマニュアルを見て原因を調べます。S0C4ならメモリーのアクセス違反、S0C7はデータ例外、S0C9なら0で除算しようとしたです。OFFSETが示す値はプログラムのどこでABENDしたかを示すオフセット値です。+073Aであれば、プログラムの先頭からx73A番地の直前の命令でABENDしたことを示します。分岐命令を間違えプログラム外のとんでもない所へジャンプしたような場合、オフセットは正しく表示されない場合があります。飛び先をラベルでなくレジスターで指定する場合は十分に注意して下さい。オフセットがどの命令に対応するかはアセンブル・リストを見れば簡単にわかります。それがエラーになるのかは、機械語命令のマニュアルやリファレンスなどを参考にして調べます。ABENDして実行が停止しても実行結果は出力されています。汎用レジスター2から15の値やメモリーの内容はABENDした時点の内容です。+3EQUステートメントをプログラムの後ろ(END命令の前)に定義します。10z/OSであれば、OSが提供するYREGSマクロを利用できます。ひな型内の以下の部分のコメントを外して、マクロ命令を有効にします。自分でEQUステートメントを定義します。