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

アクセスカウンタ

zoom RSS BCD演算について 調査

<<   作成日時 : 2009/09/29 21:03   >>

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

 まずは基本的なところから。
BCD演算では4ビットを使って十進数の0〜9を表す。文字コードでは8ビット(ASCIIで0x30〜0x39)なので、上位4ビットを落として詰める必要があり、これをPACK操作と言う。
BCD演算は基本的にPACK形式で行われる。元の8ビットの文字列に戻すにはUNPACK操作を行う。
RISCアーキにはBCD演算はない。RISCではばっさり切り捨てられた。(PowerISA2.06で追加されているが)
COBOLを使う商用計算機では欠かせない機能だった…はずだが、今は内部で二進数で計算している。SPARC用COBOLコンパイラのコンパイル結果を見て驚いた覚えがある。アタリマエだが。

・x86 8ビットの8080の頃を引きずっている。
通常の二進演算 ADD,ADC,SUB,SUBB,MUL,DIVに対し、1バイト単位で補正を行う。
パック加減算補正 DAA,DAS / アンパック加減乗除補正 AAA,AAS,AAM,AAD

・68000 1バイト単位の演算
ABCD.B Dn,Dn / ABCD.B -(An),-(An) BCD加算
SBCD.B Dn,Dn / SBCD.B -(An),-(An) BCD減算
NBCD.B <ea> Xフラグ=0のとき10の補数/Xフラグ=1のとき9の補数をとる

・PowerISA 2.06 通常の二進演算に対し変換を行う
3.3.14章 BCD Assist Instructions
cdtbcd RA,RS RSの下位20ビットを6個のBCD(4bit)に変換してRAに入れる。RAの余りビットは0。
cbcdtd RA,RS cdtbcdの反対。BCDの値が9より大きい場合はUndfined。
addg6s RT,RA,RB RA,RBを加算し、4ビットごとにキャリーを生成してRTに代入。
なお5章には十進浮動小数点についての定義がある。

・System/360 コンピュータ・アーキテクチャ定量的アプローチ第一版から
PACK パック形式(BCD)に変換
UNPK アンパック形式に変換
AP パック形式加算
CP パック形式比較
DP パック形式除算
MP パック形式乗算
SP パック形式減算
ZAP ZERO and add packed

・Gmicro (TRONチップ) レジスタ長32bit=BCDで8桁まで計算できる
基本十進命令
ADDDX 十進数加算
SUBDX 十進数減算
PACK パック
UNPACK アンパック
強化十進命令
符号付き十進数を扱う(0xa,0xc,0xe,0xfが正、0xb,0xdが負)
DCADD/DCSUB 符号付き十進数加算/減算
DCADDU/DCSUBU 無符号十進数減算/減算
DCX 拡張十進加算
DCADJ/DCADJU 符号付き/無符号十進補正
DCADJX 拡張十進補正
DCCMP/DCCMPU 符号付き/無符号十進比較

 扱えるサイズと機能で言ったらGmicro最強。System/360は乗除算がある。いずれも専用のALUを持っているっぽい。(か、ALUがBCD演算機能を持っている)
 PowerISA2.06は二進と十進の変換機能を持っているので演算自体は二進数でやっている。変換器がちょっと大変か。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
RISCのBCD補正命令
 以前調べたBCD演算について 調査の続き。 ...続きを見る
竹下世界塔の計算機よもやま話
2012/08/19 04:13

トラックバック用URL help


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

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
いくつか事実の指摘:

* メインフレームの十進演算は(符号つき)十進31桁(参考: z/Architecture Principles of Operation 8章)

* POWER ISA 2.06 の対応する実インプリは POWER6 になりますが、POWER6 では十進浮動小数点演算は内部的には倍精度 BCD (十進16桁?)にして十進演算器で演算している 。またμアーキ上は4倍精度まで対応(内部のマイクロコードか何かで倍精度にして演算)

* IEEE754-2008 で定義された十進浮動小数は、4倍精度だと十進34桁程度の精度がある。スペック上はこれが最強でしょう。
m.ukai
2009/09/30 10:41
ご指摘ありがとうございました。
System/360とIEEE754-2008は資料にあたれなかったので参考になりました。
houmei
2009/09/30 20:40

コメントする help

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




BCD演算について 調査 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる