Я попытался выяснить разницу в скорости между обычными циклами, циклами 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
Программа 2
_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
, если инструкция, следующая за ними, не является строковой инструкцией?
rep nop
. Что происходит с другими инструкциями? Пожалуйста, постарайтесь прочитать вопрос полностью, прежде чем проголосовать за его закрытие. - person fuz   schedule 21.04.2012rep
не работает должным образом сnop
, а также сcmp $0,%ecx
. Я новичок в сборке, поэтому хотел спросить, прежде чем копать дальше. - person fuz   schedule 21.04.2012