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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 十進演算命令

<<   作成日時 : 2009/10/20 00:21   >>

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

 COBOL向けに十進演算命令群を定義。従来のCISCではメモリ上の値に対して演算していたが、これらはすべて汎用レジスタで計算する。128ビットレジスタ長だと31桁+符号が一回で扱える。
十進四則演算、パック/アンパック操作ではトラップは発生しない。すべてフラグで判断する。

・四則演算
BCDADD GR1,GR2,GRd
 パック化10進数の加算。桁あふれがおこるとキャリーフラグが立つ。
BCDSUB GR1,GR2,GRd
 パック化10進数の減算。桁借りがおこるとキャリーフラグが立つ。
BCDMUL GR1,GR2,GRd
 パック化10進数の乗算。結果の下位半分が格納される。結果の桁があふれるとキャリーフラグが立つ。
BCDMULH GR1,GR2,GRd
 パック化10進数の乗算。結果の上位半分が格納される。キャリーフラグはクリアされる。
BCDDIV GR1,GR2,GRd
 パック化10進数の除算。ゼロ除算を行った場合は結果は不定、キャリーフラグが立つ。

演算中に入力データのチェックを行い、不正なデータだとオーバーフローフラグが立つ。演算結果は保証されない。

・パック、アンパック命令
BCDPACK GR1,GR2,GRd
 8ビット文字列から4ビットBCD数に変換する。
 1バイト単位で上位4ビットが間引かれ、右詰めで格納される。格納先のレジスタの上位半分はGR2の上位半分。
 結果を格納したレジスタについてデータのチェックが行われる。最下位4ビット(符号)以外の桁が数値0-9でない場合だとオーバーフローフラグが立つ。
BCDUNPK GR1,GRd
 レジスタの下位半分について、4ビットBCD数から8ビット文字列に変換する。1バイト単位で変換され、上位4ビットにはSR.bcd9で設定した4ビットの値(デフォルトで0x30)が挿入される。
 最下位がa,C,e,fの符号だった場合はSR.bcdp(デフォルトで0x2b "+")に、b,Dだった場合はSR.bcdm(デフォルトで0x2d "-")に変換される。
BCDUNPKZ GR1,GRd
 BCDUNPKと動作は同じだが、上位のBCD数で0が連続している場合は、上位4ビットにはSR.bcdzで設定した4ビットの値(デフォルトで0x20)が挿入される。ゼロ・サプレス動作。

・PACK,UNPKで使用する特殊レジスタ ASCII符号への変換を想定しているが、書き換えればEBCDICにも対応できる。
SR.bcdp 正の符号 8bit 初期値0x2b ("+")
SR.bcdm 負の符号 8bit 初期値0x2d ("-")
SR.bcd9 数値変換 4bit 初期値0x30
SR.bcdz ゼロサプレス 4bit 初期値0x20
SR.bcd BCD演算が有効がどうかを示すビット。1で有効。0で無効(十進演算命令を使うとトラップ発生) 1bit

※SR.bcd*の各設定値については専用レジスタではなく汎用レジスタを使う方法もある。(現在アンパック命令はGR2を使用していない)
→その方がコンテキストスイッチ切り換え時に楽か?もうちょっと考える。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文




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