2021:算術演算 整数

 算術演算は入力で与えられたビット列を数値とみなして加減乗除などを行う。整数の表現としては2の補数の形式が一般的で、反転して+1すれば符号反転できるので加算と減算は1つの加算器で扱える。符号なしの数値として扱う場合もある。整数の乗算は乗算器の回路規模から1サイクルでの計算が終了しないことが多い。除算器は加減乗除の中では最も複雑で、演算中の状態を持たなければならないことから計算完了までのステップ数はまちまちである。初期の集積度の低かったRISCアーキでは乗算器と除算器はコプロセッサ扱いだったりステップ乗算といった特別な方法で扱われた。除算器についてはAlphaなど持っていないアーキテクチャもあった。
 入力Aと入力Bの乗算の結果のサイズはAとBのビット長の合計になる。入力A,Bがともに32bitの場合の結果は64bit長で、汎用レジスタが32bit長
ならオーバーフローとなる。オーバーフローの場合、乗算結果の上位が得られれば連結することで正しい結果が得られる。
 整数除算は結果である商と剰余の2つが同時に得られる。符号付き除算での剰余はいくつかのバリエーションが存在する。これはいずれかに決めておかなければならない。
剰余演算(Wikipedia)
 ゼロ除算が発生した時はゼロ除算割り込みを発生させるか、結果とフラグで示す。算術演算の結果が正確に表現できない場合はオーバーフローをフラグで示すが、言語によってはオーバーフローを無視する場合がある。Alphaでは同じ演算命令でオーバーフロー発生時にトラップを起こす/起こさないを選択できる。キャリー/ボロー発生で割り込みが発生するアーキテクチャもある(Am29000)。
 飽和演算は例えばグラフィックスの明るさを計算していて結果がラップアラウンドし、一番明るい状態にしなければならないはずが暗くなってしまうような場合に結果を最大値に張り付けたままにしておく。これは加減算で有効。あるいはレジスタ幅を小さいサイズに変換するときに有効。飽和演算はマルチメディア命令といった拡張がなされた頃に採用された(SPARCのVIS命令セットなど)。


以上から考えた必要なもの:
・整数演算について 加減算必須。乗算は実行に数サイクル、除算は終了サイクルが読めない。
・オーバーフローやゼロ除算での算術トラップの扱い
・飽和演算などの拡張

ブログ気持玉

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

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

→ログインへ

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

気持玉数 : 0

この記事へのコメント