计算机的乘法指令分为无符号乘法指令和有符号乘法指令,它们的唯一区别就在于:数据的最高位是作为“数值”参与运算,还是作为“符号位”参与运算。
乘法指令的被乘数都是隐含操作数,乘数在指令中显式地写出来。CPU会根据乘数是8位、16位,还是32位操作数,来自动选用被乘数:AL、AX或EAX。
指令的功能是把显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中。
指令的格式:
MUL Reg/Mem
受影响的标志位:CF和OF(AF、PF、SF和ZF无定义)
指令的功能是把显式操作数和隐含操作数(都作为无符号数)相乘,所得的乘积按表5.2的对应关系存放。
乘数位数 | 隐含的被乘数 |
乘积的存放位置 |
举例 |
8位 |
AL |
AX |
MUL BL |
16位 |
AX |
DX-AX |
MUL BX |
32位 |
EAX |
EDX-EAX |
MUL ECX |
指令的格式:
IMUL Reg/Mem IMUL Reg, Imm ;80286+ IMUL Reg, Reg, Imm ;80286+ IMUL Reg, Reg/Mem ;80386+
受影响的标志位:CF和OF(AF、PF、SF和ZF无定义)
在指令格式2~4中,各操作数的位数要一致。如果乘积超过目标寄存器所能存储的范围,则系统将置溢出标志OF为1。
下面是学习和掌握乘法类指令的控件,可模拟执行MUL和IMUL等指令。