[OSASK 3992] Re: nask00i..

  こんばんは、川合です。


I.Tak. さんは 2002/07/11 17:02:13 の「[OSASK 3989] Re: nask00i..
」で書きました:

>>これでgccで最適化しても大丈夫になるかもしれません。
> できました!gccのバグじゃなくて良かった……

  おお、これは嬉しいです。この辺を指摘してくださった光成さんやGa
kuさんに感謝です。Gakuさんのメールでは、なぜ最適化しないときにと
ても大きなバイナリになるのかもよくわかりました。ありがとうござい
ます。

> ところが、
>label:mov eax, ebx
>などとラベルと命令をくっつけるとエラーを返します。(^^;

  NASKではコロンは一般的なセパレータではないというのが方針です。
パラメータの区切りでは、コンマなどとともにセパレータとして扱いま
すが(もちろんふさわしくないところに書けばエラーです)、ニーモニ
ックを検出するまでは、コロンは単なる文字です。

  これがなんの役に立つのかといわれれば、それはよくわかりません。
でもコロンを含むニーモニックを許すことになります。そんなものが将
来にわたって出てくるのかどうか分かりませんが。ニーモニックは数字
で始まってもいいです。たとえば、

    486::MOV

なんていうニーモニックがあってもいいわけです。まあ、結局は役に立
たない仕様かもしれませんが。

  ということで、「label: mov eax, ebx」とスペースやタブ、もしく
は改行を入れてください。・・・この仕様はお気に召さないでしょうか
???

>>  NASKのBINモードでは、ラベルの差をとらなくても全ての演算が可能です。(LABEL1+L
>>ABEL2)/2とか、LABEL1*5とか、もう好きなようにやってください。$$は恒等的に0です
>>。COFFモードではまた挙動が変わりますが。
>$$=0 はまずいと思います。org はどうなっちゃうんですか。

  うーん、なるほど。確かにまずいかもしれません。

  base_at.nasで示したように、NASKでは同一セクションに対し何度で
もORGができます。

    ORG 0x0000
    DB $,..$
    ORG 0x0008
    DB $-1,0x12
    ORG 0x0005
    DW $

なんていうのをアセンブルすると、

  0x00 0x02 0x07 0x12 0x05 0x00

なんていうバイト列が出力されます。MASMのORGとは異なり、間を何ら
かのバイトで埋めようとはしませんし、戻っても何のエラーにもなりま
せん。これでプログラムを特定のアドレスに転送するようなプログラム
が簡単にかけます。

  さて、一番最初にNASKは暗黙のORG 0を実行しています。それゆえ、
「セクションの最初」という意味では「$$ == 0」なわけです。しかし
これはこれで、NASMとの互換性で問題になるともいえます。というこ
とで改善案を提案します。それは、$$がもっとも最後にORGされたアド
レスを返すという仕様に変更することです。

  この仕様だと、

    ORG 0x0000
    DB $$
    ORG 0x0008
    DB $$
    ORG 0x0005
    DB $$

をアセンブルすると、「0x00 0x08 0x05」というバイト列が返ることに
なります。・・・という案はいかがでしょうか?>I.Tak.さん。問題が
ないということでしたら、その方針でnask00jを作ります。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/


ML番号でジャンプ
ML単語検索