竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU スタック

<<   作成日時 : 2016/09/13 03:07   >>

ナイス ブログ気持玉 1 / トラックバック 0 / コメント 1

 レジスタに属性をつけることによって何のデータを扱うかを明確にすると、命令セットも単純化できるし便利そうに思える。
ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつける その2
 が、割り込みなどが発生するとレジスタの値だけではなく属性と一緒に退避しなければならない。どうするか。

 まずはレジスタの値に加えて属性情報もメモリ上にロード/ストアできるようにしなければならない。アドレス変換のページ設定で、属性と値をペアで保存できる領域を用意し、ここに専用のロード/ストア命令で保存するという方法がある。
 が、保存したり復元したりするためには保存先を指すポインタが必要になる。少なくともユーザモードではこれを隠したい。ということでスタックについて考えてみる。

 スタック領域はスーパーバイザモードで管理され、ユーザモードからは不可視。スタックのオーバーフローやアンダーフローは割り込みが発生してスーパーバイザモード側で処理される。
スタックの残りサイズを得る命令や指定数分DROPする命令はあったほうがいいかもしれない。
 スタックへのPUSH/POPは ST Rxx/LD Rxx のようにアドレッシングモードを空欄にする。これで属性とともにレジスタの値が保存される。さらに演算命令でも ADD Raのようにすれば Ra ← スタックの1番目 + スタックの2番目 で演算される。このときスタックポインタの操作はしないようにもできそうだ。これが便利そうな場面はサブルーチンコールでの引数処理。渡したい引数はスタックに積み、戻り値はレジスタで受け取ってもよい。逆も可。
もうちょっと考えるとサブルーチンからの戻り番地や割り込み処理でつかうシステムスタックと引数を渡すユーザスタックがあればよさそう。
 スタックポインタを不可視にすると、別にメモリ上にスタック領域があることを前提にしなくてもよくなる。大量の物理レジスタがあれば、その中でスタック操作が完結する。物理レジスタがあふれた時はメモリ上に退避させればよい。
 物理レジスタの存在を前提にすると、レジスタウィンドウや割り込み時に現れるワーク用のレジスタといった従来の工夫をスタックで扱えそうだ。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
ナイス

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(1件)

内 容 ニックネーム/日時
初めましてkousozと申します。
このブログ面白いですね。
大変興味深く読ませていただいております。

恥かしながら私もオリジナルCPUを作っております。
お読みいただけると幸いです。
http://blogs.yahoo.co.jp/kousoz
それではこれからのご活躍を期待しております。
kousoz
2017/03/10 19:39

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU スタック 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる