当前位置:  开发笔记 > 小程序 > 正文

x86使用XOR而不是减法的比较指令

如何解决《x86使用XOR而不是减法的比较指令》经验,为你挑选了1个好方法。

我听说过x86比较指令:cmp x, y进行减法并根据结果设置各种标志.

现在,如果我只想测试两个操作数是否相等怎么办?不能做XOR而不是减法要快得多吗?我的问题是,是否有一个指令与XOR进行比较,以判断两个操作数是否相等?也许它看起来像这样:cmpeq x, y或者cmpxor x, y.

我猜想如果我只是想测试相等性,使用a cmpxor会比cmp减去更快.有这样的指示cmpxor会给我一个加速吗?

我也想说,我知道xor会设置zero flag.但如果我这样做xor x, y,它就会改变x.我不希望这样.我想要一个比较指令,只留下两个操作数.



1> Ira Baxter..:

诸如XOR,SUB,CMP,TEST等基本机器操作都非常简单,因此它们都能非常快速地运行.它们还设置相同的条件码位.从比较相等的角度来看,这些都将Z位设置为相同的方式; 其他位设置不同,因为这些操作计算不同的结果.

对于x86 CPU,这些CPU的执行时间没有差别,因为它们都在芯片中使用相同的路径.因此,您可以在不计算性能的情况下使用它们来计算您想要的答案.(从技术上讲,SUB应该比XOR更长,因为进位必须"波动"所有位,而XOR是逐位并行的.CPU设计人员已经找到了构建极快进位计算逻辑的方法,因此有效时差并不重要.他们有很大的动力这样做,因为计算机的大部分功能都是"添加"]).

作为样式约定,如果您认为"正在比较两个(机器字大小)值",则应该使用CMP指令,因为它将您正在思考的内容传达给代码的读者.它的优势在于它不会破坏其中一个操作数,一旦你编写了足够多的代码,你最终会发现这是一个非常有说服力的论据,可以使用它而不是XOR.(TEST有这个很好的属性,对于检查位也很有用).

其他x86指令更好的其他类型值的比较:浮动比较,字符串比较,向量寄存器比较等.这些指令与基本操作的时间不同,因为它们必须做更复杂的事情(比如比较多个数据字) ).


英特尔的性能优化手册只有这样的表格
这些表的一个非常着名的资源是Agner Fog的优化指南,http://www.agner.org/optimize/-第4项.这些资源也包括非Intel x86兼容的CPU(AMD和其他).
推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有