OSECPUのQ&A #0000
これはなあに?
- 今まで寄せられた質問にこちらで答えることにします。誰かが分からないことは、他の人にもきっとわからない。二度同じことを答える余裕はきっと僕にはないから。
Q&A
- [Q0000] CND命令って何ですか?
- CND命令は、後続の1命令が条件付きであることを示します。CND(R11); R12 = 1; みたいにすると、R11の内容によって、 R12=1; を実行したりしなかったりします。
- CND命令は指定されたRxxレジスタの最下位ビットだけを見ます。つまり奇数か偶数かしか見てないわけです。最下位ビットが1だと後続の1命令を実行します。0だと実行しません。
- OSECPUは条件分岐や条件MOVなどの命令を持っていないのですが、このCNDプリフィクスを使うことで、普通の分岐命令を条件分岐命令に変えることができますし、普通の代入命令を条件代入命令に変えることができるのです。
- [Q0001] C言語からASKAに変えるツールはありませんか?ないとしたら作る予定は?
- 現状ではそのようなツールはありません。作る予定も今のところはないです。ASKAはアセンブラとしては結構優秀なので、C言語はなくても困らないかなーとK自身は思っています。
- もちろんそう思わない人もいるでしょう。その人が作ることを妨げるつもりは全くありません。もしうまくできたら教えてください。
- なおASKAだけでも最終的にはmemo0003の 2013.04.13 Sat の理想形くらいのソースは処理できるようになります。結構C言語っぽくて満足かなと自分では思っているのですが・・・。
- [Q0002] OSECPUのスタックの使い方は?
- OSECPUでは、バイトコードのJITコンパイルにあたっては、PUSH/POP/CALL/RET命令を使わずに翻訳しています。そのためESPレジスタの値は基本的に不変です。
- ただ例外があって、それはバイトコード側からosecpu.c内のC言語の関数を呼び出すときです。このときは引数をPUSHしますし、呼び出しもCALL命令を使っています。これはやむをえずそうしているのです。こうしなければC言語で書かれた関数は呼び出せません。
- ESPのスタックを基本的に使わない理由はいくつかあります。
- スタックをいじってしまうと、スタックにまつわるセキュリティ問題に巻き込まれやすい(気がする)。
- OSECPUの命令セットはそもそもスタックを前提にしていないので、特に使う理由がない。
- ちなみにESPなスタックを使ってはいないものの、独自に管理しているスタック状のデータ構造体は持っている。そうしないと再帰などができないから。
- [Q0003] OSECPUはgithubを使わないんですか?
- [Q0004] OSECPUのライセンスはどうなっているのですか?
- そうですね、今まで手抜きでライセンスについて全く触れてきませんでした。KL-01というオープンソースライセンスを適用します。
- ライセンス文はここで読めます。→ http://osask.net/w/497.html
- KL-01には明記されてなかったと思いますが、派生物(改造したもの)にOSECPUを名乗らせるのは原則としてはできません(事前の許可を取ればできます)。ドキュメント及び著作者名表示も含めて無改造なら問題ありません。名称問題は商標権などにも関係する問題で、これはオープンソースとは別の問題です。
- [Q0005] ASKAがよくわかりません!
- すみません!!それはつまりドキュメントが足りないということですよね?それとも文法がC言語の方言みたいになっていて気持ち悪くて生理的に受け付けないということですか?もし文法のほうが問題なのでしたら、それはすぐにはいかんともしがたいので、言語を作っていただくか、もしくはOSECPUを当面の間スルーするしかないように思います。残念ではありますが。
- ドキュメントが少ないということでしたら、それはセキュリティキャンプの事前学習が始まるまでには準備します。そうしないと始まりませんからね・・・。
- で、文法が気持ち悪いのほうに話を戻しますが、まずASKAはアセンブラです。アセンブラというのはCPUごとにすごく違っていて、代入一つとっても、MOVだったりLOAD/STOREだったり、まあいろいろあるのです。僕はそれを覚えるのがだんだん嫌になってきました。条件分岐のJccのccの部分も嫌いでした。そういえば分岐命令がBccのCPUもありますね。
- そこで代入はイコールでいいじゃないか、条件分岐はifで書けばいいじゃないかということになりました。ただそれだけのアセンブラがASKAです。その割り切りさえ飲み込めば、ASKAにいろいろな制約があることもきっと受け入れられます。アセンブラなのですから、できないことがたくさんあるのは当たり前なのです。
- ASKAのいいところは、とりあえずなんとなく「読める」ことです。書けるようになるためには禁止事項を覚えなければいけませんが、読むだけならそんなの関係ないわけです。他のCPUのアセンブラではこうは行きません。まず読めないのです。その分だけマシなんです。・・・とりあえずそういうことにしておいてください。
- 詳しいことはドキュメント待ちということで。
- ちなみにどうしてドキュメントをなかなか書かないのかといえば、ASKAがまだ未完成だからです。現状の文法でもいろいろ書けはしますが、しかし実装予定の機能をもう少し足せば、ドキュメントが一気に書きやすくなるんです。だからそれができてからドキュメントを書きたいんです。それだけのことなんです。あなたがプログラマなら、この気持ち、きっと分かりますよね?
- あとOSECPUで使うASKAはOSECPU-ASKAで、Google検索で出てくるASKA(以降これをOSASK-ASKAと書き分ける)とは別物です。はっきり言ってOSECPU-ASKAのほうが完成度高いです。でも代入が=で書けるとかif文があるなどの基本コンセプトは同じです。
こめんと欄
- このページにこめんと欄はありません。このページの内容にコメントしたいときはimpressionsにお願いします。