首页
社区
课程
招聘
[求助]关于乘法指令的疑惑。
发表于: 2007-9-2 20:37 1942

[求助]关于乘法指令的疑惑。

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直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tiz
2
第一种就是:eax=eax*0ch
第二种就是:edi=edi*(dword ptr [edx+eax*8+4])

有什么疑问?
2007-9-2 20:53
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上同学的解释。
那同样有多种形式的指令还有那些呢?
2007-9-2 20:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tiz
4
这个问题还不会,会的同学解释下
2007-9-2 21:15
0
雪    币: 177
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习了~
看到了,没有多想过这个~
估计除法指令也有这样的吧~
2007-9-2 22:29
0
游客
登录 | 注册 方可回帖
返回
//