符号なし乗算命令(機械語)

機械語において、符号なし乗算命令とは、最も単純化した場合、あるプロセッサレジスタ(以降、レジスタ)の値と、別のレジスタの値もしくは即値を符号なし2進数として扱い、それらを掛け算する命令のことです。

なお、複数桁の2進数の掛け算の仕組みより、nビット同士の掛け算の答えは、2nビットになります。

符号なし乗算命令のオペランド

最も単純化した符号なし乗算命令では、少なくとも以下の二つのオペランドを指定します。

・乗算先となるレジスタを指定するオペランド

・乗算するレジスタや即値を指定するオペランド

符号なし乗算命令の実行の流れ

機械語の命令の実行を基礎として、符号なし乗算命令は、以下のように実行されます。

レジスタAの値にレジスタBの値を乗算する場合

1. 「レジスタAを指定するオペランド」を制御信号として、レジスタAの値が符号なし2進数の乗算器に入力される。(詳細は、レジスタの指定を参照)

2. 「レジスタBを指定するオペランド」を制御信号として、レジスタBの値が符号なし2進数の乗算器に入力される。

3. 乗算結果がデータバスに出力される。

4. 「レジスタAを指定するオペランド」を制御信号として、レジスタAの書き換えが有効にされる。

5. クロックの立ち上がりエッジでレジスタAにデータバスの値が書き込まれる。

レジスタAの値に即値を乗算する場合

上記の手順2が以下の手順に変わるだけです。

2. 「即値を指定するオペランド」の値が符号なし2進数の乗算器に入力される。(詳細は、即値の指定を参照)

メインメモリの値を用いた掛け算

メインメモリの値を用いて掛け算を行いたい場合は、ロード命令でメインメモリの値をレジスタにコピーしてから符号なし乗算命令を実行します。

1ワード同士の掛け算

符号なし乗算命令で掛け算を行うレジスタの値が1ワードの半分のビット数を超えている場合、乗算結果を格納するには二つのレジスタが必要です。

例えば、1ワード64ビットだった場合、1ワード同士の掛け算の答えは、128ビット(2ワード)になります。

レジスタは、通常1ワードの値しか格納できないため、この場合、下位64ビットの値を格納するレジスタと上位64ビットの値を格納するレジスタが必要です。

このような1ワード同士の掛け算は、通常、別途、専用の乗算命令が存在します。