intel x86 里以下机器码的执行快慢

orange4reg 2016-07-25 02:52:17
1.90 nop
2.E8 xx xx xx xx call 偏移地址

3.FF 15 xx xx xx xx call dword ptr [xx xx xx xx]


以上代码1、2和3都是6个字节,都是call同一个函数,请问哪一种执行的更快更好?最好有一些官方的说明,谢谢。
...全文
104 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2016-07-26
  • 打赏
  • 举报
回复
要看什么 cpu 下吧,早期的两个 call 后者比前者多点儿时间,现在的实际运行基本是一样的了;nop 占用的时间,比较于其它普通指令,也是越来越少了。
http://www.agner.org/optimize 里的 4. 有各类 cpu 的各指令的时耗的,可以看看。
orange4reg 2016-07-26
  • 打赏
  • 举报
回复
测试过了,两组代码效率差不多,不过第一组的少读一次内存还是要快一点,不过在平时代码里可以忽略不计啦。
orange4reg 2016-07-25
  • 打赏
  • 举报
回复
引用 2 楼 baidu_29183065 的回复:
E8是near call,应该是3字E8是有两种字节call的节,和far call的分别就是后者多push一个cs值,多花那么一些clock rate
我说的是保护模式下的。还要考虑nop所占的时间,因为要字节对齐,必须加nop
baidu_29183065 2016-07-25
  • 打赏
  • 举报
回复
E8是near call,应该是3字节,和far call的分别就是后者多push一个cs值,多花那么一些clock rate
orange4reg 2016-07-25
  • 打赏
  • 举报
回复
有高手分析一下吗?

21,459

社区成员

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

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