2021:BKSC 算術演算命令

1_001_xxxx 算術演算命令

 算術演算命令は数値とみなした入力から加減乗除などを行い結果は数値。引数はオペランドで指定する。
整数の演算は加減算については2の補数でも符号なしでも同様に可能。
乗算についてはそのまま行うと結果のサイズが入力A,Bのビット幅の合計になる。乗算だけ結果を倍幅にするという例外は採用したくない。そこで演算結果は入力Aのビット幅の範囲内に収まることを前提とし、これを越えたらオーバーフローとする。正しい結果が欲しければ、入力で与えるデータの幅をあらかじめ大きくしておくことにする。また、演算は2の補数の符号付きのみとする。
除算についても2の補数の符号付きのみ対象とする。レジスタ幅は変わらない。同時に剰余が発生するので、これを取り出す工夫をしなければならない。除算の演算結果については商が出力されるが剰余を予備出力とし、予備出力をレジスタに書き込む命令、出力と予備出力を入れ替える命令があればよさそう。また、符号付きの除算については剰余の求め方を決めておかねばならない。
 浮動小数点演算も形式に関わらず加減乗除は4種類。ただし除算に剰余はない。

000 ADD - 加算
001 SUB - 減算
010 MUL - 乗算
011 DIV - 除算

 3つの入力を使う積和演算がある。これはオペランドのバリエーションとしてADDに積和演算、SUBに積差演算を含める。
以降は追加すると便利な命令。トラップを発生させてもいい。

100 MAX - 最大値 (3入力可?)
101 MIN - 最小値 (3入力可?)
110 SQRT - 平方根 (浮動小数点のみ?)
111 RCPE - 逆数 (浮動小数点のみ)

必要ならまだ8命令分が空いている。ここに算術演算拡張トラップを入れてもいい。

入力が1つしかない単項演算は次のとおり。

00 INC - 1加算
01 DEC - 1減算
10 ABS - 絶対値
11 NEG - 符号反転

 数値の型と型の変換について。これらの命令だけで算術演算を行うためには、入力にどのような数値の型かという情報が必要になる。従来のアーキテクチャは命令で与えられるビット列を決められた数値の型とみなして演算していた。もしオペランドに数値の型の情報を記述すれば従来と同じ扱い方になる。

整数○整数
整数○浮動小数点
浮動小数点○整数
浮動小数点○浮動小数点

整数同士の演算はオペランド追加なし、浮動小数点はIEEE754や独自形式など複数あるとすると、3bitで1つが整数、7つが浮動小数点の形式、これが引数2つ分で6bit必要。

浮動小数点演算については丸めの指示が必要。これもオペランドに含めるか。

ブログ気持玉

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

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

→ログインへ

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

気持玉数 : 0

この記事へのコメント