メインフレームのアセンブラー入門に使えるz390エミュレーター
z390 Portable Mainframe Assembler and Emulator
「z390 Portable Mainframe Assembler and Emulator」(以下z390と表記)は、IBMのzアーキテクチャーのCPU命令の実行をエミュレートするWindows/Linuxで動くソフトウェアです。
IBMのメインフレーム用アセンブラー言語で書かれたプログラムをアセンブルしてオブジェクトコードを生成し、それを入力にしたリンケージエディターを実行して実行形式ファイルを作り、PC上で実行させることができます。z390では、単一イニシエーターによるバッチジョブのイメージでメインフレーム・プログラムを実行できます。一般的なAPIとファイルアクセスがサポートされているので、基本的なプログラムであればメインフレームのアセンブラーまたはCOBOLで書いたプログラムをWindowsのコマンド・プロンプトで実行させることができます。
無料で利用できるオープンソースのソフトウェアで、アセンブラー言語の学習には十分な機能を備えています。企業の業務処理用にアセンブラー言語のプログラムが作られることはほとんどなくなりましたが、メインフレーム・コンピューターとz/OSの内部の仕組みや機能をより深掘りして勉強したい、という方にはうってつけのツールです。インストーラーなしで使えるのでPCを汚すこともなく手軽に試すことができます。
「はろーわーるど」を動かしてみる
*********************************************************************** * IBM z/Architecture Assembler Program * * ===================================================== * * * *********************************************************************** MAINENTR CSECT , DEFINE CODE SECTION USING *,R12 DEFINE BASE REGISTER LR R12,R15 GR12 --> OUR 1ST BASE ADDRESS *=====================================================================* WTO 'Hello World !!' WRITE MESSAGE TO CONSOLE SLR R15,R15 CLEAR GR15 *=====================================================================* *====================================== GR15 <--- RETURN CODE SVC 3 EXIT TO MVS *=====================================================================* DS 0D DC CL8'DATAAREA' EYE-CATCHER *=====================================================================* YREGS , EXPAND GPR EQUATIONS END
簡単なアセンブラーのプログラムです。もちろんz/OSで実際に動きますが、z390エミュレーターによってアセンブルしWindows上で動かしてみます。

※図をクリックすると拡大できます。
アセンブル・リスト、リンケージ・リスト、実行ログなども出力されます。本物のz/OSのものとは異なりますが、zアーキテクチャーやアセンブラー・プログラミングの学習には十分利用できるものです。アセンブル・リストは、z/OSの高水準アセンブラーと同じ出力ではありませんが、覚えるべき部分は似たような形式で出力されますから、z390で学習したことはそのまま実機のz/OSで活かすことができます。
z390エミュレーターの実行ログ、アセンブル・リスト、リンケージ・リストのサンプルレジスターやメモリーの内容を見る
プログラムがABENDすれば、実機同様に実行ログには徴候ダンプが出ます。ABEND箇所やレジスターの内容が確認できます。

レジスター内容だけでなく、メモリーの内容も見る場合はダンプ・リストを追加出力することもできます。

COBOLで書いたプログラムを動かしてみる
000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. SAMPLE. 000300 PROCEDURE DIVISION. 000400 DISPLAY 'Hello World !!'. 000500 STOP RUN.
先ほどのHello WorldをCOBOLで書いたものです。z390エミュレーターは、アセンブラーだけでなくCOBOLもコンパイルできます。アセンブラーなんて無理、という方はCOBOLで試すこともできます。ただし、z390エミュレーターのCOBOLサポートは、コンパイラーというよりは、COBOLのステートメント名に対応したアセンブラー・マクロによるアセンブラー・プログラム・ジェネレーターなので、COBOLそのものの勉強にはあまり役立たないかも知れません。例えば、誤ったステートメント名で記述してもCOBOLコンパイラー自体はエラーにせずにそのままアセンブラーのソースプログラムを生成してしまいます。後続のアセンブラーではエラーになりますがCOBOL言語としてどこが誤っているかは指摘してくれません。

z390エミュレーターのCOBOLコンパイラーは、オブジェクト・モジュールを直接作るのではなく、アセンブラー言語に変換したソース・プログラムを出力します。生成されたアセンブラーのソースプログラムを後続の処理でアセンブルしてオブジェクト・モジュールに変換します。
z390エミュレーターのインストール
z390エミュレーターは、配布元のWebサイト(http://www.z390.org/)からダウンロードして入手します。

配布元サイトに繋げたら、画面左側ナビゲーションの「Download Links」を選択します。

ダウンロードするファイルは、Linux用の「z390 v1506 files.zip」です。Windowsであってもこれを選択します。Windows用のSetupファイルでもかまいませんが、インストーラーによって導入され、Cドライブのuserフォルダーから先の奥深いフォルダーに作られてしまい、コマンドプロンプトで使うには面倒です。コマンドプロンプトではなく、Guiウィンドウで試したい場合はそちらを選択してもいいと思います。その場合は、以降の解説はあてはまりませんのでヘルプやドキュメント・ファイルを参照して進めて下さい。
「z390 v1506 files.zip」をダウンロードしたら、zipファイルの中にあるz390フォルダーをフォルダーごと適当な場所(デスクトップなど)にコピーします。
続いて以下に示す3つのファイルをダウンロードして、z390フォルダーにコピーします。
※以下のファイルは配布元のz390には含まれていない、当サイトが独自にカスタマイズしたものです。
-
z390エミュレーターを起動するコマンドプロンプトのショートカット(Windows用)
アセンブルから実行までを行うバッチファイル(Windows用)
Hello Worldサンプル・プログラムのソースコード
以下のファイルは必要ならばダウンロードして下さい。
z390フォルダー内に適当な名前のサブフォルダーを作ります。例えば「myasm」です。そのフォルダーに適当な名前(例えば「myprog.txt」)でアセンブラーのソースプログラム・ファイルを作ります。メモ帳などのテキストエディターで作成して保管すればいいでしょう。
@z390.lnkをダブルクリックしてコマンドプロンプトを起動して、asmgoバッチファイルでアセンブルと実行を試すことができます。なお、z390エミュレーターはJavaで作られているので、実行にはJavaのランタイムがインストールされている必要があります。ほとんどのパソコンにはJavaはインストールされているでしょう。
asmgo myasm\sample
asmgoコマンドの後、空白を置いてサブフォルダー名\プログラム名を第1パラメーターとして指定します。プログラム名はソースプログラムのファイル名から拡張子を取ったものです。sample.txtならsampleと指定します。
第2パラメーターには追加のオプションを指定できます。
オプション名 | 意味 |
---|---|
noobj | アセンブルのみを行い、リンケージと実行はしない |
dump | 実行時にABENDしたらダンプ・リストも出力する |
asmgo myasm\sample noobj asmgo myasm\sample dump
asmgoバッチファイルは、z390エミュレーターのコマンドを実行するためにカスタマイズしたものです。ただのテキストファイルなので、必要ならばメモ帳などで内容を見て自由に直して下さい。z390エミュレーター自体の詳細については、Webサイトにあるドキュメントを参照するかダウンロードして下さい。
アセンブル・リストやダンプ・リストの形式、PSWの設定値など実機のz/OSとは異なりますが、メインフレームの機械命令の動きを確認したり、アセンブラー言語プログラムの書き方に慣れるには十分利用できるツールです。DC命令で定義した値が実際にどのようにメモリーに格納されるか、命令の実行によってレジスターやメモリー内容がどう変化するか、といったことは実機同様に確認することができます。