Я попытался выяснить разницу в скорости между обычными циклами, циклами loop
и встроенными циклами rep
. Я написал три программы для сравнения поведения:
_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
_start: xor %ecx,%ecx
not %ecx
rep nop # Do nothing but decrement ecx
mov $1,%eax
xor %ebx,%ebx
int $0x80
Оказалось, что третья программа работает не так, как ожидалось, и некоторые исследователи говорят мне, что rep nop
aka pause
делает что-то совершенно несвязанное.
Что делают префиксы rep
, repz
и repnz
, когда следующая за ними инструкция не является строковой инструкцией?