我试图找出普通循环、loop
循环和内置rep
循环之间的速度差异。我写了三个程序来比较行为:
程序 1
_start: xor %ecx,%ecx
0: not %ecx
dec %ecx
jnz 0b
mov $1,%eax
xor %ebx,%ebx
int $0x80 # syscall 1: exit
节目二
_start: xor %ecx,%ecx
not %ecx
loop .
mov $1,%eax
xor %ebx,%ebx
int $0x80
方案 3
_start: xor %ecx,%ecx
not %ecx
rep nop # Do nothing but decrement ecx
mov $1,%eax
xor %ebx,%ebx
int $0x80
事实证明,第三个程序没有按预期工作,一些研究人员告诉我,这rep nop
又pause
做了一些完全不相关的事情。
当rep
,repz
和repnz
前缀后面的指令不是字符串指令时,它们在做什么?