-
-
[求助]关于乘法指令的疑惑。
-
发表于:
2007-9-2 20:37
1942
-
在看资料的时候看到几种不同的IMUL指令形式。
三个操作数的:imul eax,eax,0ch
两个操作数的:imul edi,dword ptr [edx+eax*8+4]
我翻看了我的汇编学习笔记,上面是这样解释的:
[label=乘法指令]指令MUL(无符号数乘法指令)
MUL r8/m8;AX←AL*r8/m8,字节乘
MUL r16/m16;DX,AX←AX*r16/m16,字乘
注:指令指定的是乘数,被乘数是隐含的。如乘数类型为字节,则被乘数为AL,16位乘积用AX;如乘数类型为字,则被乘数为AX,32位乘积用DX高16位,AX低16位。
影响CF、OF标志:如果乘积的高一半为零,则CF=OF=0,否则,CF=OF=1。对其他标志无定义。
指令IMUL(有符号数乘法)
指令用法与“MUL”指令基本相同,只是专用于有符号数的相乘。
CF=OF=0,那么乘积的高一半为低一半的符号扩展(不是有效乘积);CF=OF=1,则乘积的高一半为乘积的一部分,对其他状态标志无定义。
相同的二进制数,看做无符号数相乘于与看作有符号数相乘,结果是不同的。如0B4H与11H相乘,使用“MUL”指令结果为0BF4H(无符号数3060);如使用IMUL指令,则结果为0FAF4H,将其看作补码,真值为-1292。[/label]
既然被乘数是隐含的,且都为EAX。那前面两种另类的IMUL操作数做何解?
同样有多种使用方法的指令还有哪些?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课