8086マイクロプロセッサにおけるMUL命令とIMUL命令の基本的な違いは何か?

参考リンク: 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 は符号付きとして解釈します。

Leave a Reply