ぼくのかんがえたさいきょうCPU:型とサイズとNull、符号なし演算の扱い

型:
整数型(符号付き2の補数) ー 符号なしの演算結果は%Re側に保存
アドレス型 ー 整数型に追加する属性。アドレッシングモード側に指定されたレジスタに付加。

以下はオプション:
浮動小数点型 ー IEEE754準拠と非準拠。FP16,FP32,FP64,FP128,... DP32,DP64,DP128,...
BCD型 ー 十進数演算
文字列型 ー 連結、比較などが可能

Nullの扱い:
型の指定でNullにする。このときデータサイズは0にする。

ぼくのかんがえたさいきょうCPU データ(スライド)


 整数型で符号付き整数と符号なし整数の混在した四則演算を検討していたが面倒だった。かつ従来のほとんどのプロセッサと互換性を損なう。iAPX432ではINTEGER型とCARDINAL型で区別して演算が混在したらトラップを起こすような実装だったが厳密に過ぎる。ということで整数どうしの四則演算では引数%Ra,%Rb(,%Rc)をすべて符号付き整数とみなした演算結果を%Rdに、引数をすべて符号なし整数とみなした演算結果を%Reに出力する。

ALU.png

 加算と減算では符号付き整数を2の補数とするため結果のビット列はどちらの場合でも変わらず%Rdの結果だけでOK。
 比較(MAX/MIN)では符号付き同士の比較結果は%Rdに、符号なし同士の比較結果は%Reに出力。

 さて問題は乗算と除算では整数の演算については符号付きと符号なしを分けていたが再検討する。そのままでもよいのだけれど。

 整数の乗算は、演算結果のサイズが倍になる。このため%Rdと%Reに結果の下位と上位を分割するように考えていた。そして符号付きの乗算と符号なしの乗算については命令を分けていた。乗算命令を1つにして符号付きと符号なしを同時に扱うには、符号付き乗算結果の下位を%Rdに、符号なし乗算結果の下位を%Reに出力する。上位の結果も欲しければ、追加の拡張命令でサイズを2倍にして返す。どのみち上位の結果が欲しいときは結果の全体も必要なので、従来の%Re:%Rdと分けてあとで連結するよりいいかもしれない。

 整数の除算は%Rdに商を、%Reに剰余を結果とする仕様だった。これを除算命令DIVと剰余命令MODに分け、%Rdに符号付き、%Reに符号なしの演算結果を出力する。商と剰余を同時に得るのは実装でどうにでもなる。

 ついでながら整数をBCDとみなすような演算後に行う補正命令はいれない。それぞれの四則演算は自然に行えるようにやるべきで、補正命令を入れるよりも型を新設してそれ用の演算器を動かしたほうがよい。

 アドレス型は整数型の属性で、ロードストア命令のオペランドに指定されたときに付加される。特に何もしなければ従来のプロセッサと変わらない。デバッグ時の情報として役立つかもしれない。これはプログラマからは不可視でもよい。なおアドレッシングの範囲チェックはオペランドで得られるEffective Addressでやるべきなので、アドレス型が付加されたレジスタそのものでやってもあまり役立たない。

 レジスタの型を破棄するには型をNullに設定する。このとき型の指定でNullにするかレジスタのサイズを0にすることでNullにするか検討する。ロード命令のレジスタサイズで0が指定できればこれをNull設定にすることもできるが、サイズ指定が1つ分目減りする。型設定命令があればそこでNullにしたほうがいい。型をNullにしたらサイズも0にしたほうがよさそう。


型抜き(かたぬき) 易しい&難しいタイプ 計100枚入 型見本・削り棒付き
型抜き(かたぬき) 易しい&難しいタイプ 計100枚入 型見本・削り棒付き

ブログ気持玉

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

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

→ログインへ

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

気持玉数 : 0

この記事へのコメント