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

[OSASK 2429] Re: ASKA(Re: Readme.htm).



こんばんは。I.Tak. です。

> ところで、このページにはASKAについていろいろ書いてあったので、
>僕なりにコメントします(なお、ASKAの文法仕様の9割は僕の好みで決
>めました)。

 ぐう、ということは川合さんはCが好きなんですね。

>>    asmout("jb #mos_left");     /* moves to the left */
>    if ((unsigned) <) goto mos_left;
>と書けます。この表記が気に入らなければ、他にこのような表記でも同
>じです。

 あ、Cにも(ASKAにも)gotoがあるとは知りませんでした。
別に気に入らないわけではありません。でも
    if (ae) 文
    if (l) 文
とか書けたら少し嬉しいかなあ……あ、変数と紛らわしくなりますね。

>  ラベルも、
>>    asmout("#mos_left:");
>ではなく、C言語風に、
>    mos_left:
>と普通に書いても同じ効果を得られます。

 ああそれは多分、どっかにそういう風に書いてあったのをマネしたの
だと思います。

>> ASKA が eax は未定義の変数だとか言い張ってエラーを出す。なわ
>  で、どうしてeaxがエラーになるのかといえば、それはASKAがCと同じ
>く大文字小文字を明確に区別しているせいです。もし、これが不便だと

 大小の区別は慣れてますが(NASM使いですから)、普段全て小文字で
書いてなんの問題も無かったんですよ。何がエラー?って悩みました。

>いうことでしたら、ソースの上の方に、
>    #define eax EAX
>とでも書いておいてください。これで文句を言わなくなります(笑)。

 あれ、ASKAにもマクロが? ってlccがやるんでしたね。repマクロとか
マクロ変数とかはなさそうですね。

>間でもかつて議論しました。今の仕様は、できるだけC言語を踏襲した
>文法になっています。たとえばC言語で以下のような文を書くことはあ
>ると思います。
>    int *a = 0;
>これの意味は、
>    int *a; a = 0;
>なのであって、

 えっそうなんですか。ああ、でも確かにそうですね。
int *a = NULL; ですね。

>とは解釈しません。このような文法との整合性を取るために、
>>    int *var == [EAX];
>という文法を没にしました。

(しばらく悩みましたが)分かりました。なるほどです。
しかし…… alias int var = [DS:EAX]; とかなかったんですか。

>  そうです。ASKAは386|ASM形式で出力しますが、それは単にダイレク
>トにバイナリーを出力するバージョンを作るのが面倒だっただけで、38
>6|ASMの文法を踏襲するためのものではありません。

 じゃあeaxもレジスタですよねえ(^^;
他にもニモニック関数(と勝手に呼んでしまう)がみんな大文字に
なってるのとか。

>  ASKAへの理解が深まれば幸いです(より一層嫌われたりして・・・笑
>)。

 これさえ分かってしまえば、あとは大丈夫です、おそらく。

------------------------------------------------------------
I.Tak. <msy !Atmark! catvmics.ne.jp>
http://home1.catvmics.ne.jp/~msy/takhome.htm