@ IMUL source |
dest = AH:AL/DX:AX/EDX:EAX source = reg/mem |
| dest はsource のサイズから自動的に決まりsource の2倍のサイズとなります。
|
A IMUL dest,source 【186】 |
dest = reg16/reg32 source = imm 【186】 = reg16/reg32/meml6/mem32/imm【386】 |
| イミディエイトを除き、dest とsource のサイズは等しくなります。
|
B IMUL dest,source,imm 【186】 |
dest = reg16/reg32 source = reg16/reg32/meml6/mem32 |
| イミディエイトを除き、dest とsource のサイズは等しくなります。 |
【フラグ】
| OF
| DF
| IF
| TF
| SF
| ZF
| ??
| AF
| ??
| PF
| ??
| CF
|
| X
| −
| −
| −
| ?
| ?
| −
| ?
| −
| ?
| −
| X |
|
【動作】
書式により、以下の符号付き乗算を行います。
| @
| dest = regH : regLとするとregLとsource の値を乗じた結果をdest に設定します。
| regH : regL ← regL×source
|
|
|
| A
| dest とsource の値を乗じた結果をdest に設定します。
|
| B
| source とイミディエイトを乗じた結果をdest に設定します。
|
結果が正常にdest (@の場合はregL)へ設定できれば、OFとCFを0にします。 そうでなければOFとCFを1にします。 |
- A,Bの場合のimmはdest,source と同一サイズに符号拡張されます。
- 書式@の場合、2倍長のサイズの結果regH : regLはOFとCFの値に関わらずらず常に正しくなります。 OF(CF)が0ならば上位半分を無視して下位半分を結果として採用できます。
- mビットとmビットの乗算結果の下位mビットは、オーバーフローが生じなければ符号付きと符号なしで同一となりますので、書式AとBは符号なしの乗算にも使用できます。
|