ぼくのかんがえたさいきょうCPU:eval

 ぼくのかんがえたさいきょうCPUは最大長で32768バイトの汎用レジスタを定義しているが実現性はさておきこれをどう活用するか。

 レジスタに命令列を入れて実行させるEVAL命令というのはどうか。

 EVAL レジスタ番号,実行ステップ数

 この命令に当たると、レジスタ番号で指定された汎用レジスタの内容をフェッチする直前のIB(Instruction Buffer)に転送し実行する。プログラムカウンタは一時停止し、EVAL実行中のプログラムカウンタ(uPC)で実行中の命令を指し示す。EVAL実行中のステップ数をカウントし、指定した実行ステップ数に達したらEVAL実行を終了し、プログラムカウンタの実行が再開される。

 ここから制限事項を考えていく。なんでもEVAL命令で実行してよいのだろうか。

 制約としてPCを一時停止させるのでPCが更新されない。汎用レジスタ内をEVAL実行している時は相対分岐のみで、EVALの範囲内とする。範囲外への分岐はトラップ発生、もしくはEVAL終了。
 実行ステップ数の制限を設けたのは無限ループ対策。実行ステップ数オーバーで終了したらEVAL命令終了時にエラーステータスを上げる。または実際に実行したステップ数を返したらいいかも。
 トラップを明に発生させる命令は使えない。戻れないから。
 EVAL命令自体はEVALで実行できない。これも戻れないから。ただし戻らない前提だと可能。
 EVAL中のメモリ操作命令はどうだろうか。どんなセキュリティリスクがあるか想像できないが、実行させること自体に問題はない。ではEVAL命令に実行レベルを付けて、メモリアクセス禁止/リードのみ/ライトのみ/メモリ読み書き可としようか。

 利点としてはIBに転送するので最速で実行できる。マクロ命令的な使い方ができる。
 現代のプロセッサは自己書き換えコードを推奨しないが、この方式だと似たようなことができないだろうか。


伊藤園 Evian(エビアン) ミネラルウォーター 330ml×24本 [正規輸入品]伊藤園 Evian(エビアン) ミネラルウォーター 330ml×24本 [正規輸入品]

伊藤園 2013-07-29
売り上げランキング : 29931

Amazonで詳しく見る
by G-Tools


ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック