[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