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

アクセスカウンタ

zoom RSS マイクロプロセッサの乗算命令 その1

<<   作成日時 : 2012/03/01 02:33   >>

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

 マイクロプロセッサの乗算命令縛りで調べてみた。

 乗算器は加算器よりも規模が大きくなり、古いマイコンでは内部で筆算のように桁ごとに計算しては合計を加算して求めていた。そのため複数サイクルがかかる。
 積のbit数は被乗数と乗数のbit数の合計分ないと収まらない。マイコンによっては下位半分のみ保存し、範囲内に収まらなかったらオーバーフローを発生させるものもある。
 サイクル数から、初期の16bitプロセッサで70サイクル以上かかっているが後継のシリーズでは改善されていることがわかる。
(RISC系を調べたその2に続く)

□6809 (8bit)
 8bitのA,Bレジスタを連結して16bitのDレジスタとして使える。
・MUL 符号なし乗算
D=A×B、11サイクル。キャリーフラグはBレジスタのMSBを反映する。これは、切り上げ/切り捨ての判断に使える。
参考:MC6809-6809E マイクロプロセッサ プログラミング マニュアル 日本モトローラ

□63C09 (8bit)
 8bitのA,Bレジスタに加えE,Fレジスタがあり、A:B:E:Fを連結して32bitのQレジスタとして使える。
・MULD 16bit×16bit=32bit
A:Bを連結したDレジスタとオペランドで指定した16bitの値を掛けて32bitのQレジスタに保存する。

参考:6809活用研究 工学社

□Z8000 (16bit)
 Z8000のレジスタは16bitだが、連結して32bitとしても使える。R1:R0はRR0、R3:R2はRR2、……さらに連結してRR1:RR0はRQ0、と64bitとしても使える。符号付き乗算のみ。
・16bit×16bit
 MULT RR,n RR=RR×adrsx(32bitレジスタまたはメモリ)
・32bit×32bit
 MULTL RQ,n RQ=RQ×adrsx(64bitレジスタまたはメモリ)

70-75clk(MULT)
282,283,287+7m clk(MULTL,mは反復数)
参考:Z8000 マイクロプロセッサ・ハンドブック オズボーン/ケイン著 中山隼雄訳 マグロウヒル

□68030 (16/32bit)
 符号付きと符号なしがある。
・16bit×16bit→32bit
 MULS.W 符号付き乗算/MULU.W 符号なし乗算
・32bit×32bit→32bit 結果には求まった積の下位32bitを保存
 MULS.L 符号付き乗算 求まった積の上位32bitが符号拡張でない場合オーバーフロー(V=1)
 MULU.L 符号なし乗算 求まった積の上位32bitが0以外の場合オーバーフロー(V=1)
・32bit×32bit→64bit
 MULS.L 符号付き乗算/MULU.L 符号なし乗算

68000:74clk以下
68030:28clk(MUL*.W)/44clk(MUL*.L)
参考:MC68030 ユーザーズマニュアル 日本モトローラ

□x86 (8/16/32bit)、AMD64/EM64T(64bit)
 符号付きと符号なしがある。また、1,2,3オペランド形式がある。

 1オペランド形式 MUL src
・8bit×8bit→16bit AX=AX×src
・16bit×16bit→32bit DX:AX=AX×src
・32bit×32bit→64bit EDX:EAX=EAX×src
・64bit×64bit→128bit RDX:RAX=RAX×src
 2オペランド形式 MUL dest,src
・16bit×16bit→16bit dest=dest×src
・32bit×32bit→32bit dest=dest×src
・64bit×64bit→64bit dest=dest×src
 3オペランド形式 MUL dest,src,imm
・16bit×16bit→16bit dest=imm×src
・64bit×64bit→64bit dest=imm×src

8086:70-133clk(MUL),80-154clk(IMUL)
286:13-24clk
386DX:12-44clk、386SX:12-46clk
486:13-42clk+1clk(cache penalty)

※386について:これは32bitバスと16bitバスによる違い。最小clk数が同じなのはレジスタ間演算で、内部の乗算器は同じ構成と考えられる。

2,3オペランド形式では、乗数と積のbitが同じ場合は積の上位半分が捨てられる。

 MUL 符号なし乗算 結果の上位が0以外の場合CF=1,OF=1
IMUL 符号付き除算 結果の上位が符号拡張でない場合CF=1,OF=1

参考:TECHI Vol.31 x86アセンブラ入門 大貫広幸著 CQ出版
   Intel 64 and IA-32 Architectures Developer's Manual: Combined Volumes[pdf]

□TRONチップ (32bit)
・MUL src,dest 符号付き乗算。destのサイズはsrc以下の場合がある。積がdestのサイズ内に符号付きの値としておさまらない場合オーバーフローフラグが立つ。
・MULU src,dest 符号なし乗算。destのサイズはsrc以下の場合がある。積がdestのサイズ内に符号なしの値としておさまらない場合オーバーフローフラグが立つ。
・MULX src,dest,ext
 ext:dest=src×dest 符号なし多倍長乗算。extは積の上位32bit、destは下位32bit。指定するレジスタがext=destの場合、積の下位32bitが格納される。

※サイクル数は実装依存

参考:トロン仕様チップハンドブック パーソナルメディア

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




マイクロプロセッサの乗算命令 その1 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる