Nios II Gen2 プロセッサー・リファレンス・ガイド

ID 683836
日付 10/28/2016
Public
ドキュメント目次

8.5.64. mul

命令 乗算
演算

rC ←  (rA x rB) 31..0

アセンブラー構文

mul rC, rA, rB

mul r6, r7, r8

説明

rA に rB を乗算し、生成される下位 32 ビットを rC に格納する。結果は、オペランドが符号付きまたは符号なし整数として扱われるかどうかと同じである。

mul命令が未実装の Nios II プロセッサーは未実装命令例外を発生する。

使用法

キャリー検出 ( 符号なしオペランド ) :

乗算演算の前または後に、rC の MSB のキャリーアウトは次の命令シーケンスを使用して検出が可能。

mul rC, rA, rB

mulxuu rD, rA, rB

cmpne rD, rD, r0

# The mul operation (optional)

# rD is nonzero if carry occurred

# rD is 1 if carry occurred, 0 if not

mulxuu命令は符号なし数値の乗算がキャリー ( 符号なしオーバーフロー ) を生成する場合、rD に非ゼロ値を書き込む。0/1 の結果が必要な場合はcmpne命令のmulxuuに従います。

オーバーフロー検出 ( 符号付きオペランド ):

乗算演算後、次の命令シーケンスを使用してオーバーフローの検出が可能。

mul rC, rA, rB

cmplt rD, rC, r0

mulxss rE, rA, rB

add rD, rD, rE

cmpne rD, rD, r0

# The original mul operation

# rD is nonzero if overflow

# rD is 1 if overflow, 0 if not

cmplt–mulxss–add命令シーケンスは、rC の積が 32 ビット ( 符号付きオーバーフロー ) で表現できない場合、rD に非ゼロ値を書き込む。0/1 の結果が必要な場合は、cmpne命令で命令シーケンスに従う。

例外

未実装命令

命令型

R

命令フィールド

A = オペランド rA のレジスター・インデックス

B = オペランド rB のレジスター・インデックス

C = オぺランド rC のレジスター・インデックス

ビットフィールド
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
A B C 0x27
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0x27 0 0x3a