ASKAのページ †
NASMとの文法比較 †
- NASM (NASKも同じ:NASKについてはGOを参照)
XOR EAX,EAX
XOR ECX.ECX
loopsum:
ADD EAX,ECX
INC ECX
CMP ECX,10
JLE loopsum
- ASKA
int sum == EAX, i == ECX;
sum = 0; i = 0;
do {
sum += i;
i++;
} while (i <= 10);
- 一見するとASKAはC言語のように見えますが、結局はただのアセンブラで、ASKAは上記NASMコードと全く同じコードを生成することを保障します。
- ASKAはアセンブラなので、たとえばsum += i++;みたいなことはできません。原則として一文=一命例です。
- ASKAはニーモニックがC言語風なので、他のCPU、たとえばZ80版になっても似たような記述で書けます。しかしもちろん、レジスタ数もレジスタ名も違いますし、それぞれの挙動だって微妙に違いますので、移植可能なわけではありません。そもそも移植可能になることを目指した言語ではなく、単に文法をC言語風にしたアセンブラなのです。それ以上を期待してはいけません。・・・逆にこの割り切りがあったからこそ、ASKAは実用的なレベルに到達したんだとも思っています。
現状のASKAの問題点 †
- 処理系の完成度がいまいちで、正規文法では表現可能だけど、うまくコンパイルできない表現がまだたくさんあります(LEA構文とか、IMUL構文とか)。このせいでほとんどの人にはお勧めしかねる状況です。ただ、読むのには結構向いている言語だとは思います。
こめんと欄 †
|