MASM 1.0のサンプルプログラムを動かしてみる [PS/55]
昨日に引き続きのプログラミング環境ネタ。昔処分した会社のPCのバックアップデータを整理していたら、ASM.EXEやらMASM.EXEやら、MASMのファイル一式?と思わしきものが出てきた。
アセンブラはNASM(とCASLⅡも資格で勉強したけど忘れた)を使ったことがあるけど、MASMは知識で知っているだけで使ったことはないな。
ファイルのタイムスタンプは83年5月31日。んー、昭和83年だとしたら🤔…西暦だと2008年だから、そこまで古くないな🙂
とりあえず、MASM.EXEを実行してみるか。
The IBM Personal Computer MACRO Assembler Version 1.00!! 著作権表示も1981年で、いかにもIBM PCの発売と同時にリリースされた感がある。
しかし、タイムスタンプは1983年なんだな。海外のサイトではIBM Macro Assembler 1.00 | PCjs Machinesから実際にIBM PCのDOS上で動かすところまでエミュレーションできるが、タイムスタンプはこちらと一致しない。ファイルサイズも実行ファイル以外は違いがある。
ちなみに、若干サイズが小さいASM.EXEはマクロをサポートしていない。なぜこれが用意されているかというと、初代IBM PCでDOSが動作するモデルの基本仕様はメモリが64KBで、MASM.EXEではメモリに入らないからだろう。というか、MASMってMicrosoft Assemblerの略称だと思ってた。それも間違いではないのかもしれないけど。
サンプルプログラムらしきファイルを見てみると、なんと説明書きが日本語だった。
たぶん、これはIBM PC用のMASMじゃなくて、日本IBMから出ていたIBM 5550用の「マクロ・アセンブラー」だ。
バッチファイルの中身も微妙に違っていて、押すべきキーの名称が変わっている。
全然意識していなかったが、初代IBM PCのキーボードにはPauseキーがなかったのか。
MASM 1.0のサンプルプログラムを動かしてみる
サンプルプログラムをアセンブルしてみる。まず、DOS用のリンカー(LINK.EXE)はMASMに添付されていないので、別途用意する必要がある。PS/55の場合は日本語DOS K3.xに付属しているのでこれを使う。DOS J4.0以降には付属しない。まあ、MASM自体は汎用なので必ずしもPS/55のDOSで実行する必要はないけど、サンプルプログラムは分からん。
LINK.EXEをMASMと同じディレクトリーに置いたら、$MASML EXMP1M
を実行する。拡張子(.ASM)をつけて実行するとソースファイルが消失するので注意。
次に$MASML EXMP2M
を実行する。バッチファイルのコマンドによってEXEファイルが生成されるが、このファイルは正常に動作しない。2つのオブジェクトファイルを結合するようリンカーに指定する必要がある。
LINK EXMP1M+EXMP2M
を実行する。後ろにセミコロンをつけると、それ以降のパラメーターをデフォルトで指定したことになり、プロンプトは表示されない。
EXMP1M.EXEが生成されるので、これを実行する。
25行目の表示が壊れるが、半角・全角切り替えなどで直る。
しかし、サンプルプログラムを見て何をやっているかは分かるけど、これだけ見てMASMで一からプログラムを作れるかというと難しいな。EDLINで開発することを考えるとなおさら恐ろしい。いや、IBMユーザーならパーソナル・エディターか。あれも現代のテキストエディターに比べると癖があって使いにくそう。