gg02_0004
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 第三世代OSASKの仮想CPUの仕様
-(by K, 2013.02.27)
--(osask.netに書こうと思ったんだけどパスワードを忘れて新...
** 目的
-今回のバージョンでは性能はとりあえず追求しない(速度、サ...
--相応の速度が出ればそれでよい
--ネイティブコードには到底かなわなくてよい
--互換性のための代償はしょうがない
--その代わりネイティブコードとバイトコードの混在を許して...
---バイナリの中に一部の関数の機種依存コードがアーカイブさ...
-シンプルさを重視
--その方が移植しやすい
-4bitや8bitのCPUから64bitやそれ以上のbit数のCPUに幅広く対応
--つまり特定のbit数のアーキテクチャに最適化しない
-一方でハードウェアへの要求を小さくするために、割り込み、...
--将来FPGAでCPUの自作をするために、ハードルを小さくしてお...
--これでもそれなりには高速に動作する環境を構築できると思...
--キャッシュメモリもCPUとしては不要だが、特定のアドレスに...
---キャッシュ管理のための複雑な回路は不要
** 仕様
-整数レジスタ 256bit 64本
--すべて符号付整数
-アドレスレジスタ 64本
--ビット幅は規定されない
-フラグレジスタはない。
-割り込み命令も持たない。
--ただし割り込み要求が来ているかどうかを調べるポーリング...
--割り込みが来ていれば分岐する。
-MOV系の命令のみ、メモリオペランドがある。
-MOV系の命令のみ、即値を指定できる。
-JMP命令はなく、インストラクションポインタへのMOVで代用す...
-ほとんどの演算命令は三項形式である。(例)reg0=reg1+reg2;
-CMPとSETccが合成されたような命令がある。
--CMPcc(reg0, reg1, reg2);
--reg1とreg2を比較してccが真ならreg0は-1になる、偽なら0に...
--つまり整数レジスタをフラグレジスタの代用にしているとも...
-条件分岐命令は用意されていない。代わりに条件プリフィクス...
--条件プリフィクスはコンディションを指定する代わりに整数...
-メモリアドレッシングにおいては、かならず一つのアドレスレ...
-アドレスレジスタから整数レジスタへのMOVはできないし、逆...
-メモリには型があり、たとえばアドレス値を格納しているメモ...
-ADDやSUBやシフト命令でキャリーフラグを得る方法がないが、...
--これは後日考える。まあ256bit以内の演算であればそもそも...
-演算命令:
--NOTやNEGはない。それらは-1のXORや、0からのSUBで代用でき...
--ADD, SUB, OR, XOR, AND, TEST, MUL, DIV, MOD, SHL, SHR, ...
---整数レジスタは全て符号付にしたので、SHRはいらないかも。
-PUSHやPOPなど、スタックを操作する命令はない。メモリにレ...
-実はそもそもスタックという概念がない。関数をコールする命...
--このせいで呼び出しは結構めんどい。
-メモリアドレスの単位はバイトではない。ビットである。そも...
** 補足
-レジスタ本数が異様に多いのは、命令セット上、演算系の命令...
--NULLポインタなど比較用のアドレスもレジスタに入れておか...
--定数レジスタ属性というものを設定する予定(バイトコード...
-レジスタのbit長が256bitもあるが、それぞれの命令には(整...
-整数レジスタは、AXがALとAHに分割されるみたいな機能はない...
-レジスタが2本しかなくても書ける処理はこのアーキテクチャ...
-一方で64bitの演算をしたいならそう書けばいい。レジスタを1...
-しかしx64などではこれはすべて実レジスタに載って高速に動...
-割り込みがないってどういうこと?
--何かの操作の途中で割り込みが入ると面倒になることがある...
--これならずっとCLIしておいて、STIするタイミングで割り込...
-レジスタ番号48~63は定数用のレジスタである。定数レジスタ...
-スタックがないせいでいろいろ不便を強いる。たとえば再帰処...
--スタック操作命令がないだけであって、ポインタ操作などは...
--不便であることは認める。
-このほかにもいろいろと不便なことがあることは想定されるが...
-なぜ汎用レジスタではなく専用レジスタ?
--アドレスレジスタと整数レジスタを汎用レジスタとして実装...
--レジスタを分けたおかげで、両レジスタのビット幅をそろえ...
** バイナリフォーマット
-特記のない限り、全ての数値はhh4でエンコードする
--http://osask.net/w/634.html
-ADDとかはreg0~6だけしか使わずに書くのなら、20bitでかけ...
--reg7~63ばかり使うのなら、32bitを要するだろう。
--reg0~6に1を足す(というか定数レジスタを加える)なら、8...
--結構長いなー。まあしょうがないか。サイズ競争用のコード...
--レジスタ番号はhh4でエンコードされているから、その気にな...
** 考察
-Z80用のバイナリ生成器を作ることは十分に考えられるが、そ...
-レジスタをたくさん使ったり、長いbit幅の演算を使ったもの...
* こめんと欄
#comment
終了行:
* 第三世代OSASKの仮想CPUの仕様
-(by K, 2013.02.27)
--(osask.netに書こうと思ったんだけどパスワードを忘れて新...
** 目的
-今回のバージョンでは性能はとりあえず追求しない(速度、サ...
--相応の速度が出ればそれでよい
--ネイティブコードには到底かなわなくてよい
--互換性のための代償はしょうがない
--その代わりネイティブコードとバイトコードの混在を許して...
---バイナリの中に一部の関数の機種依存コードがアーカイブさ...
-シンプルさを重視
--その方が移植しやすい
-4bitや8bitのCPUから64bitやそれ以上のbit数のCPUに幅広く対応
--つまり特定のbit数のアーキテクチャに最適化しない
-一方でハードウェアへの要求を小さくするために、割り込み、...
--将来FPGAでCPUの自作をするために、ハードルを小さくしてお...
--これでもそれなりには高速に動作する環境を構築できると思...
--キャッシュメモリもCPUとしては不要だが、特定のアドレスに...
---キャッシュ管理のための複雑な回路は不要
** 仕様
-整数レジスタ 256bit 64本
--すべて符号付整数
-アドレスレジスタ 64本
--ビット幅は規定されない
-フラグレジスタはない。
-割り込み命令も持たない。
--ただし割り込み要求が来ているかどうかを調べるポーリング...
--割り込みが来ていれば分岐する。
-MOV系の命令のみ、メモリオペランドがある。
-MOV系の命令のみ、即値を指定できる。
-JMP命令はなく、インストラクションポインタへのMOVで代用す...
-ほとんどの演算命令は三項形式である。(例)reg0=reg1+reg2;
-CMPとSETccが合成されたような命令がある。
--CMPcc(reg0, reg1, reg2);
--reg1とreg2を比較してccが真ならreg0は-1になる、偽なら0に...
--つまり整数レジスタをフラグレジスタの代用にしているとも...
-条件分岐命令は用意されていない。代わりに条件プリフィクス...
--条件プリフィクスはコンディションを指定する代わりに整数...
-メモリアドレッシングにおいては、かならず一つのアドレスレ...
-アドレスレジスタから整数レジスタへのMOVはできないし、逆...
-メモリには型があり、たとえばアドレス値を格納しているメモ...
-ADDやSUBやシフト命令でキャリーフラグを得る方法がないが、...
--これは後日考える。まあ256bit以内の演算であればそもそも...
-演算命令:
--NOTやNEGはない。それらは-1のXORや、0からのSUBで代用でき...
--ADD, SUB, OR, XOR, AND, TEST, MUL, DIV, MOD, SHL, SHR, ...
---整数レジスタは全て符号付にしたので、SHRはいらないかも。
-PUSHやPOPなど、スタックを操作する命令はない。メモリにレ...
-実はそもそもスタックという概念がない。関数をコールする命...
--このせいで呼び出しは結構めんどい。
-メモリアドレスの単位はバイトではない。ビットである。そも...
** 補足
-レジスタ本数が異様に多いのは、命令セット上、演算系の命令...
--NULLポインタなど比較用のアドレスもレジスタに入れておか...
--定数レジスタ属性というものを設定する予定(バイトコード...
-レジスタのbit長が256bitもあるが、それぞれの命令には(整...
-整数レジスタは、AXがALとAHに分割されるみたいな機能はない...
-レジスタが2本しかなくても書ける処理はこのアーキテクチャ...
-一方で64bitの演算をしたいならそう書けばいい。レジスタを1...
-しかしx64などではこれはすべて実レジスタに載って高速に動...
-割り込みがないってどういうこと?
--何かの操作の途中で割り込みが入ると面倒になることがある...
--これならずっとCLIしておいて、STIするタイミングで割り込...
-レジスタ番号48~63は定数用のレジスタである。定数レジスタ...
-スタックがないせいでいろいろ不便を強いる。たとえば再帰処...
--スタック操作命令がないだけであって、ポインタ操作などは...
--不便であることは認める。
-このほかにもいろいろと不便なことがあることは想定されるが...
-なぜ汎用レジスタではなく専用レジスタ?
--アドレスレジスタと整数レジスタを汎用レジスタとして実装...
--レジスタを分けたおかげで、両レジスタのビット幅をそろえ...
** バイナリフォーマット
-特記のない限り、全ての数値はhh4でエンコードする
--http://osask.net/w/634.html
-ADDとかはreg0~6だけしか使わずに書くのなら、20bitでかけ...
--reg7~63ばかり使うのなら、32bitを要するだろう。
--reg0~6に1を足す(というか定数レジスタを加える)なら、8...
--結構長いなー。まあしょうがないか。サイズ競争用のコード...
--レジスタ番号はhh4でエンコードされているから、その気にな...
** 考察
-Z80用のバイナリ生成器を作ることは十分に考えられるが、そ...
-レジスタをたくさん使ったり、長いbit幅の演算を使ったもの...
* こめんと欄
#comment
ページ名: