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

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



  こんにちは、川合です。


I.Tak. さんは 2001/11/11 13:23:17 の「[OSASK 2426] Re: Readme.ht
m」で書きました:

(ドキュメント供給)
> だいたい同じようですしやりましょう。

  ありがとうござます。よろしくお願いします。とりあえず、ver.1.9
からということで。

>>です。やっぱりテキストはいいです。これをベースに見出し記号を「・
>>」に統一して、インデントをそろえたりしていくという方針はいかがで
>>しょうか?
> 出力の目標はそうなると思いますが、ベタテキストを手動で整形する
>のも面倒なので、テキストフォーマッタを使いたいと思います。

  はい、それはもう一向にかまいません。

>OSASK/TOWNS1.8 改造版、今回はスクロールです。
>http://home1.catvmics.ne.jp/~msy/tak/osask/ostwkai4.htm
>あ、縦スクロールしない手抜きなので、下の方のえせタスクバーは見え
>ません(640x480の場合)。

  またすごいものを・・・。まだ肝心のバイナリーは試していないので
すが、面白かったらMonzaSPに反映させたいです。

---

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

>    asmout("jb #mos_left");     /* moves to the left */

  この文は、

    if ((unsigned) <) goto mos_left;

と書けます。この表記が気に入らなければ、他にこのような表記でも同
じです。

    if ((unsigned) < 0) goto mos_left;
    if (CF == 1) goto mos_left;
    if (CF != 0) goto mos_left;

  ラベルも、

>    asmout("#mos_left:");

ではなく、C言語風に、

    mos_left:

と普通に書いても同じ効果を得られます。

> ASKA が eax は未定義の変数だとか言い張ってエラーを出す。なわ
>けあるかい! とにかく ASKA はかなり面妖なコンパイル言語である。

  とのことですが、ええ、まずASKAが「かなり面妖」であることは認め
ます(笑)。

  で、どうしてeaxがエラーになるのかといえば、それはASKAがCと同じ
く大文字小文字を明確に区別しているせいです。もし、これが不便だと
いうことでしたら、ソースの上の方に、

    #define eax EAX

とでも書いておいてください。これで文句を言わなくなります(笑)。
また、その後ろに

>    int foo == EAX ;
>    int *var == [EAX];
>    int *var == EAX ;
>    int *(var = EAX);

という一連の問題が指摘されています。ええ、これは僕と今原さんとの
間でもかつて議論しました。今の仕様は、できるだけC言語を踏襲した
文法になっています。たとえばC言語で以下のような文を書くことはあ
ると思います。

    int *a = 0;

これの意味は、

    int *a; a = 0;

なのであって、

    int *a; *a = 0;

とは解釈しません。このような文法との整合性を取るために、

>    int *var == [EAX];

という文法を没にしました。

> さらに混乱すると,セグメント付きメモリアクセスを NASM のよう
>に 48ビット論理アドレスという風情で [ES:EDI] などと書く。うーむ
>…… ASKA の出力は 386|ASM 形式だったはずだがなあ。

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

  僕はいつもポインタはfarで書くべきだと思っています。だから常に4
8bit形式です。OSASKでは6つのセグメントレジスタが同じセグメントを
指しているわけではありません。ですからこの区別を心がけるのはそれ
なりに意味があります。僕にとって、セグメントを指定することは「プ
リフィクス」ではなくて、必然なのです。そんなわけで、僕のソースで
は、

    int *p == EAX;

という表記はほとんどなくて、

    int *p == DS:EAX;

になっているでしょう。もちろんASKAは不要なプリフィクスを自動的に
省いてくれることを保証しています(もちろん、これを抑制することも
仕様上ではできますが)。

  とにかくこのような僕の「好み」のために、セグメント付きのアドレ
ッシングがNASM風の表記になっているんです。

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


  それでは。

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