111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:2030回复:0

经典汇编语言教程:5.2.3-3乘法指令

楼主#
更多 发布于:2013-01-24 14:22

计算机的乘法指令分为无符号乘法指令和有符号乘法指令,它们的唯一区别就在于:数据的最高位是作为“数值”参与运算,还是作为“符号位”参与运算。
乘法指令的被乘数都是隐含操作数,乘数在指令中显式地写出来。cpu会根据乘数是8位、16位,还是32位操作数,来自动选用被乘数:AL、AX或EAX。
指令的功能是把显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中。
、无符号数乘法指令MUL(UnsignedMultiply 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(SignedInteger Multiply Instruction)
指令的格式:IMULReg/Mem
IMULReg, Imm;80286+
IMULReg, Reg, Imm;80286+
IMULReg, 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等指令。

喜欢0 评分0
游客

返回顶部