本文是纯干货。

由于现代的处理器支持乱序执行代码,另一个说法叫做cpu指令重拍。为了测量的准确性,本例中使用了cpuid指令,属于序列化指令。它可以保证汇编指令的执行的有序性。用来避免cpu指令重拍。
注意,这里说的是cpuid汇编指令,不是java和c中的volatile关键字,更不是什么内存屏障。
这个问题可以参考文章https://stackoverflow.com/questions/12631856/difference-between-rdtscp-rdtsc-memory-and-cpuid-rdtsc
这里的循环次数的设置在cpuid指令之后,因为cpuid指令会修改rcx寄存器的值。

tsc寄存器在每个cpu时钟信号到来时+1。比如,主频为 1M Hz 的 CPU,这个寄存器每秒就递增 1 000 000 次。服务器 x86-64 的 CPU 主频一般都在 1G Hz 以上,所以通过这个指令,我们可以获得纳秒级别的时间精度。

本文汇编代码是在linux 64位cpu x86-64架构下编写的。

现在直接上代码。

;test.asm
extern printf
section .datafmt0            db      "test speed",10,0fmt4            db      10,"number of loops: %d",10,0fmt5            db      "A: %d",10,0fmt6            db      &#

如何测量两组汇编指令的执行效率相关推荐

  1. ARM 原子操作里的两个汇编指令

    今天一个读者朋友给我留言,问了这个问题,ARM原子操作的汇编代码,还给我截图了两个不同的解释,让我说哪个是正确的. 原子操作的起因是为了内核同步,保证数据在正确性,之前已经吹过一波,可以看这几篇文章. ...

  2. 如何执行一条汇编指令

    在电脑中执行一条指令主要又三个步骤: (1)在指定地址上写入一条汇编指令 (2)使cs寄存器与ip寄存器指向指令所在的地址 (3)开始执行 (1)在指定地址写入一条汇编指令: 终端上常用的命令有:R命 ...

  3. 实验一 查看CPU和内存 用机器指令和汇编指令编程

    一. Debug的使用 1. 什么是Debug Debug是Dos.Windows都提供的实模式(8086方式)程序调试的工具.使用它,可以查看CPU各种寄存器的内容.内存的情况和在机器码级跟踪程序运 ...

  4. 汇编为什么分段执行总是执行不了_iOS汇编教程(六)CPU 指令重排与内存屏障...

    系列文章 iOS 汇编入门教程(一)ARM64 汇编基础 iOS 汇编入门教程(二)在 Xcode 工程中嵌入汇编代码 iOS 汇编入门教程(三)汇编中的 Section 与数据存取 iOS 汇编教程 ...

  5. c语言将两个16位变为一个32位,16位汇编第六讲汇编指令详解第第三讲(示例代码)...

    16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时 ...

  6. 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137  转载请著名出处 本博客相关文档下载 :  -- A ...

  7. 两组的数据平均值合并_地理信息系统导论学习笔记(10)—数据探查

    点击上方蓝字可加关注 微信公号:ArcGisdada 互助.共享.学习 上面这本书就是学习的教材,大家需要一起学习的可以点击购买.一共十八章(第一章绪论.第二章坐标系统.第三章矢量数据模型.第四章栅格 ...

  8. S5PV210体系结构与接口02:ARM编程模型 汇编指令

    目录 1. ARM的基本设定 1.1 ARM数据类型 1.1.1 基本数据类型 1.1.2 浮点数据类型 1.1.3 存储器大小端 1.2 支持的指令集 2. Cortex-A8编程模型 2.1 处理 ...

  9. 小于等于0_从0开始学ARMARM汇编指令其实很简单

    学习ARM,就必须要学习ARM指令,ARM指令是CPU提供给我们的接口,是我们打开CPU这个潘多拉魔盒的钥匙. ARM指令有很多,为了让大家能快速上手,一口君整理了一些对我们最有帮助的指令.keil软 ...

最新文章

  1. 【01】为什么需要UML
  2. java批量事物管理_[疯狂Java]JDBC:事务管理、中间点、批量更新
  3. codeforces 706B B. Interesting drink(二分)
  4. CTS/APIO后文化课游记
  5. html如何与php,html页面怎么跟php文件连接
  6. HDU 3306 Another kind of Fibonacci
  7. 为什么苹果不再需要谷歌地图?
  8. #define的高级用法
  9. 工科学生考研能选择计算机专业么,这8个“工科专业”考研后发展会更好,毕业生紧缺度高,前途很好!...
  10. elementui下拉框选择图片_Element UI系列:Select下拉框实现默认选择
  11. iphone微信美颜插件_iOS13.5 插件分享
  12. *第十三周*数据结构实践项目一【验证Prim算法】
  13. Cygwin-安装和配置ssh服务
  14. 微信授权+JS-SDK
  15. 大学计算机ppt学校题材实验报告,PPT实验报告模板2篇
  16. windows下Vue安装教程(超级详细,一些细节坑)
  17. 五十位名嘴用文字悼念心中永远的榜样罗京
  18. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之③完善Defender植物和Attacker的相关细节(脚本,碰撞体)
  19. SIM800C AT指令编程
  20. 腾讯云TCP架构高级工程师认证考试大纲、考题下载及说明

热门文章

  1. Polkadot + DeFi | 透明公平、高效交易的去中心化金融未来可期
  2. 视频画中画效果制作,原来这么简单就可以做出
  3. 如何制作视频画中画?制作画中画视频的方法
  4. Linux虚拟机遇到的一些问题
  5. windows+中标麒麟双系统启动优先顺序调整方法
  6. linux宝塔面板打不开 ssh也连不上,SSH能访问,但是宝塔面板打不开,输入bt命令无任何反应!...
  7. SQL注入漏洞(postgresql注入)
  8. 拼多多开店有哪些优势?
  9. Spring框架的基本使用
  10. IIS 6 UrlRewrite 步骤