首页
社区
课程
招聘
[求助]如何模拟 imul 。。计算方法。。求教
发表于: 2011-10-16 23:36 6189

[求助]如何模拟 imul 。。计算方法。。求教

2011-10-16 23:36
6189
汇编

mov     eax,0x93516     
mov     esi, 0x181702E1 ;      
imul    esi;   
     

C#

int eax,0x93516   ;
int esi,0x181702E1;

怎么用 C# 计算得到   imul 指令的  eax   和  edx  结果呀。。

大家能给个具体例子吗,谢谢大家了?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
int64 a = 0x93516 *0x181702E1

结果高32位在EDX中,低32位在EAX中
2011-10-17 09:20
0
雪    币: 227
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不知道在 C# 中怎么取  高 32位  和低 32位呢

谢谢指教了。
2011-10-17 17:07
0
雪    币: 645
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
高 32位=a>>32 & 0xFFFFFFFF   
         低 32位=a & 0xFFFFFFFF
2011-10-17 17:15
0
雪    币: 227
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不行呀。我测试了

eax = 14F8B589
esi  = 00093516
imul esi 后

eax = ACC5F6C6
edx = C117


我的C#代码:
long ll = 0x00093516 * 0x14F8B589;
string s = Convert.ToString(ll, 2);
Console.WriteLine("int64:{0}  \n高32位:{1}    \n低32位:{2}", Utils.x16(ll) , s.Substring(0, 32) , s.Substring(32)); return;

输出结果:
int64:FFFFFFFFACC5F6C6
高32位:11111111111111111111111111111111         高32位是错误的
低32位:10101100110001011111011011000110


为什么我的 测试  输出的高  32位结果是  0xFFFFFFFF  呢。
2011-10-17 17:20
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
你这long ll是64位么。。。。。
2011-10-17 17:32
0
雪    币: 227
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
long 在C#里面是64位有符号整数        

我用 Int64 ll = 0x00093516 * 0x14F8B589;

结果也是一样。。不知道怎么回事 。。郁闷
2011-10-17 17:39
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
那是你的写法有问题,你用计算器calc.exe算下看看,肯定是对的
2011-10-17 17:47
0
雪    币: 227
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
。。行了。谢谢楼上了。。让我明白  imul 的运算呢。

我都用  long 就好了。

                long ll = ((long)0x00093516 * (long)0x14F8B589);
2011-10-17 17:54
0
雪    币: 227
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
在百科看介绍   imul 指令的技术文章。。。一堆堆的文字。。

其实用计算器。算一次就明白呢。呵呵
2011-10-17 17:57
0
游客
登录 | 注册 方可回帖
返回
//