IMUL 指令用于执行整数乘法运算。在 8086 处理器中,根据操作数的数量,IMUL 指令可分为三种类型,它们在乘积字长和溢出位 (OF) 的含义方面存在差异。

1. 乘积字长的差异

  • 单操作数 IMUL: 当只有一个操作数时,乘积的字长是源操作数和目标操作数字长的两倍。这意味着如果使用寄存器 AX 作为操作数,则乘积将存储在 DX:AX 寄存器对中。
  • 双操作数和三操作数 IMUL: 使用两个或三个操作数时,乘积的字长与源操作数和目标操作数字长相同。

2. 溢出位 (OF) 的含义

  • 单操作数 IMUL: 即使 OF 位被置 1,乘积结果也可能是正确的。这是因为单操作数 IMUL 指令默认将结果存储在双倍字长的寄存器对中,即使结果超出目标操作数的字长范围,也不会导致溢出。
  • 双操作数和三操作数 IMUL: 当 OF 位被置 1 时,表示乘积结果不正确。这是因为结果的字长受限于目标操作数的字长,如果结果超出该范围,则会发生溢出。