[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 2428] ASKA(Re: Readme.htm).
- Subject: [OSASK 2428] ASKA(Re: Readme.htm).
- From: Hidemi KAWAI <kawai !Atmark! imasy.org>
- Date: Sun, 11 Nov 2001 06:53:58 -0000
こんにちは、川合です。
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/