3.3.2.3 乘法指令
MUL src 无符号数乘法(unsigned multiple)
IMUL src 带符号数乘法(signed multiple)
字节操作: (AX) ← (AL)×(src)
字操作: (DX, AX) ← (AX)×(src)
MUL和IMUL指令的区别仅在于操作数是无符号数还是带符号数,它们的共同点是,指令中只给出源操作数src,它可以使用除立即数方式以外的任一种寻址方式。目的操作数是隐含的,它只能是累加器(字运算为AX,字节运算为AL)。隐含的乘积寄存器是AX或DX(高位)和AX(低位)。
乘法指令只影响CF和OF,其它条件码位无定义。无定义是指指令执行后,条件码位的状态不确定,因此它们是无用的。
MUL指令的条件码设置为:
CF OF= 0 0 乘积的高一半为0(字节操作的(AH)或字操作的(DX))
CF OF= 1 1 乘积的高一半不为0
这样的条件码设置可以指出字节相乘的结果是8位(CF=0)还是16位(CF=1),字相乘的结果是16位(CF=0)还是32位(CF=1)。
IMUL指令的条件码设置为:
CF OF= 0 0 乘积的高一半为低一半的符号扩展
CF OF= 1 1 其他情况
符号扩展是指做字节乘法时,乘积低8位的最高位为0,高8位也扩展为0,或者低8位的最高位为1,高8位也扩展为1的情况。对两个字相乘,符号扩展是指乘积的低16位的最高位为0,高16位也扩展为0,或者低16位的最高位为1,高16位也扩展为1的情况。
|
|