首页
社区
课程
招聘
[旧帖] [求助]帮忙看下这段代码的作用?是不是经常要用到的? 0.00雪花
发表于: 2010-3-21 10:05 1339

[旧帖] [求助]帮忙看下这段代码的作用?是不是经常要用到的? 0.00雪花

2010-3-21 10:05
1339
0040110F  |.  BF 306B4000   mov     edi, 00406B30                    ;  ASCII "49838"
00401114  |.  83C9 FF       or      ecx, FFFFFFFF
00401117  |.  33C0          xor     eax, eax
00401119  |.  83C4 1C       add     esp, 1C
0040111C  |.  F2:AE         repne   scas byte ptr es:[edi]
0040111E  |.  F7D1          not     ecx
00401120  |.  2BF9          sub     edi, ecx
00401122  |.  8BF7          mov     esi, edi

帮帮忙.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人来看么..
2010-3-21 11:02
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
自己顶一下 ..
2010-3-21 11:41
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
汗,lz对这么一个strlen函数问了至少三个帖子了。

这是vc优化出来的一个strlen函数,都是这样写的:

lea     edi, xxx                                 ; 字符串首地址
or      ecx, FFFFFFFF                        ;ecx存放字符串长度,初始化为-1
xor     eax, eax                                ;al清零
repne   scas byte ptr es:[edi]            ;开始扫描,遇到0结束
not     ecx
dec     ecx                                      ;得到字符串长度

中间夹杂了一些其它指令,是编译器对程序进行优化时使用了交叉代码的方法,可以提高程序的运行效率,例如xor eax,eax之后紧跟repne scab的话,需要等到前一条指令执行完才能执行下一条指令(貌似这被称为数据相关,记不清了),会造成填不满cpu的流水线,影响了cpu的工作效率,中间加进去一个add esp,1C就不用等待了,可以保持流水线一直被填满,不让cpu空闲。

ok,就到这里了。
2010-3-21 12:56
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持楼主支持楼主
2010-3-21 13:12
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢了 讲的很清楚了
2010-3-21 15:12
0
雪    币: 134
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
嗯,讲得不错了。
2010-3-21 20:15
0
雪    币: 6664
活跃值: (957)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢学习中!
2010-3-22 09:29
0
游客
登录 | 注册 方可回帖
返回
//