两个x86 IA32 ISA指令之间的区别?

时间:2014-11-02 08:56:24

标签: x86

我注意到在x86 IA32 ISA中将寄存器设置为0的表示法通常表示为:

xorl %eax, %eax

我想知道这个符号和

之间是否有区别
movl $0, %eax

因为两者似乎基本上都在做同样的事情。这只是效率问题吗?

1 个答案:

答案 0 :(得分:2)

是的,这只是效率问题。英特尔建议使用 xorl 而不是 movl ,因为其处理器会认识到xor与其自身的寄存器结果始终为0 - 它不依赖于最初的内容登记册(See section 3.5.1.8)。这使得关于其他指令清除寄存器是独立的操作,并且可以提高指令级并行性和性能。英特尔不承诺 Movl 拥有此属性。