参考リンク: http://www.answers.com/Q/What_is_the_basic_difference_between_MUL_and_IMUL_instruction_in_8086_microprocessor
MUL は符号なし乗算に使われ、IMUL は符号付き乗算に使われます。
8086の命令セットでは、どちらの命令もアキュムレータに指定されたオペランドを掛けますが、オペランドの値の解釈が異なります。
MULは値を符号なし整数として扱います。IMULは値を2の補数表現による符号付き整数として扱います。
基本的な結果の格納先は同じです。
- オペランドがバイトの場合:
```asm
AX = AL * operand
```
- オペランドがワードの場合:
```asm
DX:AX = AX * operand
```
たとえば、オペランドがバイトの場合、AL 内の8ビット値に8ビットのオペランドが掛けられ、16ビットの結果が AX に格納されます。オペランドがワードの場合、AX 内の16ビット値に16ビットのオペランドが掛けられ、32ビットの結果が DX:AX にまたがって格納されます。このとき上位ワードは DX、下位ワードは AX に入ります。
したがって、主な違いは結果がどこに格納されるかではなく、乗算の前にCPUが数値をどう解釈するかです。MUL は符号なし、IMUL は符号付きとして解釈します。
