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