这两段代码哪个快一些

cfvmario 2011-12-14 11:38:32
代码1

00549A0C mov eax,dword ptr [esi+4Ch]
00549A0F mov ecx,eax
00549A11 and ecx,14h
00549A14 mov dword ptr [esp+34h],ecx
00549A18 mov ecx,eax
00549A1A and ecx,8
00549A1D and eax,0FFFFFFE3h
00549A20 mov dword ptr [esp+30h],ecx
00549A24 mov dword ptr [esi+4Ch],eax

代码2

00549983 mov eax,dword ptr [esi+4Ch]
00549986 test al,14h
00549988 je 0054998E
0054998A mov dword ptr [esp+34h],ecx
0054998E test al,8
00549990 je 00549996
00549992 mov dword ptr [esp+30h],ecx
00549996 and eax,0FFFFFFE3h
00549999 mov dword ptr [esi+4Ch],eax

代码2是多了两个跳转,想去掉跳转,修改了下程序,发现编译器生成的代码变成了代码1的样子。跳转去掉了,可是多了条指令。到底哪个效率高呢
...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
masmaster 2011-12-14
  • 打赏
  • 举报
回复
控制相关会影响指令的乱序调度,当然会影响处理器的效率。
  • 打赏
  • 举报
回复
实现功能不一样,没法比。非比较的话,2要比1快一些。
cfvmario 2011-12-14
  • 打赏
  • 举报
回复
关键就是想知道在各种CPU上跳转的额外开销具体有多大。。
我推测
在很老的CPU上流水线浅可能影响不大
在中等CPU上影响最大
在很新的CPU上又会针对跳转做更好的特殊预测优化什么的,影响相对又要比中等CPU的小
在ARM上我推测可能效率一样,因为ARM根本没这么多分支指令,编译器编出来的结果应该永远像代码1这个样子才对
yh_no_code 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 cfvmario 的回复:]
代码1

Assembly code


00549A0C mov eax,dword ptr [esi+4Ch]
00549A0F mov ecx,eax
00549A11 and ecx,14h
00549A14 mov dword ptr [esp+34h],ecx
00549A18 mov ……
[/Quote]

哪个效率高就不说啦:是否要跳转是要判断的,是要消耗时间的。这个应该好理解吧

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧