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なスタックを使ってはいないものの、独自に管理しているスタック状のデータ構造体は持っている。そうしないと再帰などができないから。
こめんと欄
- このページにこめんと欄はありません。このページの内容にコメントしたいときはimpressionsにお願いします。