こんばんは、川合です。 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/