[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1166] MASM32計画.



  こんばんは、川合です。

  今まで、386|ASMが入手できない場合に、代わりにNASMを使うことを
推奨してきましたが、この方針を変えることにします。NASMは出力する
コードをきめ細かく制御できるのは立派なのですが、制御せずに自動に
任せることがあまりできません(任せようとすると無駄の多いコードを
出力する)。

  また、公開を予定しているソースの一部はコンパイルしても走りませ
んでした(アセンブルエラーは出ないが、生成した実行ファイルを走ら
せるとうまくいかない)。

  この問題を克服するために、nasmcnvをバージョンアップしてnasmcnv
1を作ったりもしましたが、それでも駄目でした。でも、せっかく書い
たのでnasmcnv1は一応公開しておきます。

  さて、代わりのアセンブラを求めてあれこれ追求してみましたが、一
番いいのは、小柳さんに教えていただいたMASMのようです。特に、自動
のコード生成能力が理想的のようで、テストした範囲では386ASMに優る
最高のコードを出力しています(たとえば、OSASKBS0.BINをMASMで生成
すると、空きが20バイトも増えます・・・僕の考えうる範囲で、全く文
句の付け所がない良い出力です)。

  ということで、今からMASM向けのコンバーターを書く予定です。

---

  まず、MASMの入手方法についてまとめておきます。今から書くことは
、[OSASK 1077]で紹介していただいたページに書いてあったことをまと
めただけです。

1."ML.EXE"、"ML.ERR"、"DDK_EULA.TXT"、"SDK_EULA.TXT"

  この4つのファイルは、

    http://www.pbq.com.au/home/hutch/masm.htm

のページから、「masm32v6.zip」というアーカイブをダウンロードして
解凍してインストールすることで入手できます。ちなみに、このアーカ
イブは3.90MBもあります。上記4のファイルを合わせても399KBにしか
ならないことを思うと、このダウンロードはなんだか割に合いません。

  みなさんが僕と同じ気分になるのは申し訳ないので、僕の方で4ファ
イルをまとめてアーカイブにしてアップロードしようかとも思ったので
すが、ライセンス上の問題があるかもしれず、ためらっています。当た
り前なんですがライセンスは全部英語で書かれていて、よくわかりませ
ん。ちなみに、上記4つのファイルのうち後ろ2つは、そのライセンス
ドキュメントです。

  なお、僕がこの方法によって入手したMASMのバージョンは、6.14.844
4です。

2."LINK.EXE"

  このファイルは、

    ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe

から持ってきたファイルを解凍すると得られます。やっぱりいらないフ
ァイルが含まれていますが、「lnk563.exe」は274KBですし、「LINK.EX
E」は356KBなので、まあそんなに損した気分にはなりませんでした。

  なお、僕がこの方法によって入手したLINKのバージョンは、5.60.339
Dec  5 1994です。

---

  masmcnv0を書きましたが、これを使っているうちに、MASMといえども
完璧ではないということがわかりました。弱いのはセグメントレジスタ
が絡む代入です。セグメントレジスタに関する代入に、余計なオペラン
ドサイズプリフィクス(0x66)が付きます。これはよろしくないです。こ
れがなければ最高なんですが・・・。

  それでも、aball1などを再アセンブルすると、386|ASMの時よりも184
バイトも小さくなります。これは偉いです。もちろんちゃんと走ります
。

  MASMに感動したので、masmcnv1を近いうちに作りたいと思います。ma
smcnv1はMASMの不得意なセグメントレジスタ関係の代入をコンバーター
側でカバーする予定です。

---

  ということで、今日のベータリリースのリストです。

1.nasmcnv1
  MASMが強力だと分かった今となっては、ほとんど存在価値のないコン
  バーターになりました。

2.masmcnv0
  これはおすすめです。ASKAを使う方は、是非MASMに乗り換えましょう
!

3.exp2bin1
  exp2bin0のバージョンアップ版です。コンバーター自身がコンパクト
になったのでバージョンアップをおすすめします。MASMを使うと.BIN
ファイルをダイレクトに生成することはできないので、このexp2bin1を
exe2binの代わりに使うことになります。

  詳しい使い方などは、アーカイブ内のドキュメントや添付のバッチフ
ァイルを参照してください。

  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/