使用xor reg,reg优于mov reg,0吗?

这个问题在这里已经有了答案:

  • 在x86汇编中将寄存器设置为零的最佳方法是什么?xor,mov或and? 1个答案

  • 为你的实际答案:

    Intel 64和IA-32体系结构优化参考手册

    3.5.1.8节是你想看的地方。

    总之,在某些情况下,xor或mov可能是首选。 这些问题围绕依赖链和条件代码的保存。


    在我售出我的1966HR旅行车后,我停止了修理自己的汽车。 我在与现代CPU类似的修复:-)

    它确实取决于底层的微码或电路。 CPU很可能识别出"XOR Rn,Rn"并简单地将所有位全部清零而不用担心内容。 但是,当然,它也可以用"MOV Rn, 0"做同样的事情。 一个好的编译器会为目标平台选择最好的变体,所以这通常只是一个问题,如果你使用汇编编码。

    如果CPU足够智能,则XOR依赖关系会消失,因为它知道该值无关紧要,并将其设置为零(这又取决于正在使用的实际CPU)。

    然而,我早已过去关心我的代码中的几个字节或几个时钟周期 - 这看起来像微优化发疯了。


    x86具有可变长度指令。 MOV EAX,0需要比XOR EAX,EAX多一个或两个字节的代码空间。

    链接地址: http://www.djcxy.com/p/15061.html

    上一篇: Does using xor reg, reg give advantage over mov reg, 0?

    下一篇: Why does the enhanced GCC 6 optimizer break practical C++ code?