首页
社区
课程
招聘
[求助]一个简单的算法公式,有些地方不懂。请指教
发表于: 2008-10-24 11:36 4427

[求助]一个简单的算法公式,有些地方不懂。请指教

2008-10-24 11:36
4427
004F5140  /$  53            PUSH EBX
004F5141  |.  56            PUSH ESI
004F5142  |.  57            PUSH EDI
004F5143  |.  8BD9          MOV EBX,ECX                              ;  EBX=ECX
004F5145  |.  8B30          MOV ESI,DWORD PTR DS:[EAX]   ;  ESI=DS:[EAX]
004F5147  |.  33F2          XOR ESI,EDX                              ;  ESI^=EDX
004F5149  |.  33C9          XOR ECX,ECX                              ;  清空ECX
004F514B  |.  8ACB          MOV CL,BL                                ;  CL=BL
004F514D  |.  51            PUSH ECX
004F514E  |.  B9 20000000   MOV ECX,20                               ;  ECX=20h
004F5153  |.  5F            POP EDI
004F5154  |.  2BCF          SUB ECX,EDI                              ;  ECX-=EDI
004F5156  |.  8BFE          MOV EDI,ESI                              ;  EDI = ESI
004F5158  |.  D3EF          SHR EDI,CL                               ;  EDI>>CL
004F515A  |.  8BCB          MOV ECX,EBX                              ;  ECX=EBX
004F515C  |.  D3E6          SHL ESI,CL                               ;  ESI<<CL
004F515E  |.  0BFE          OR EDI,ESI                               ;  EDI|=ESI
004F5160  |.  8BF7          MOV ESI,EDI                              ;  ESI=EDI
004F5162  |.  03D6          ADD EDX,ESI                              ;  EDX+=ESI
004F5164  |.  8910          MOV DWORD PTR DS:[EAX],EDX               ;  DS:[EAX]=EDX
004F5166  |.  5F            POP EDI
004F5167  |.  5E            POP ESI
004F5168  |.  5B            POP EBX
004F5169  \.  C3            RETN

上面是代码,如果转换成C样式的代码怎么转的。
主要是输入的参数怎么看得出来,以及输入的结果又是怎么样出来的。
刚学,不懂的地方别见笑

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
delphi的函数
2008-10-24 11:57
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
(*p)^val 然后从第idx个bit切开对调
我猜的

func(*p, val, idx)
2008-10-24 12:22
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
void _fastcall foo( int * p, int a, char shift)
  {
  
  int n = a[0];
  n ^= a;
  p[0] = a + ( ( n << shift ) | ( a >> 0x20 - shift ) )
  }

sessiondiy分析得非常正确,但最后还有一个累加没有说。

希望你看得明白。我写得比较丑
2008-10-24 13:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
太感谢你们的帮助了。

看得明白,不过还要思考一下是怎么转换的。呵呵

通过例子学习一种方法是好不过啦。
谢谢
2008-10-24 13:30
0
游客
登录 | 注册 方可回帖
返回
//