Что происходит, когда префикс rep присоединяется к нестроковой инструкции?

Я попытался выяснить разницу в скорости между обычными циклами, циклами 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 nopaka pauseделает что-то совершенно несвязанное.

Что делают префиксы rep, repzи repnz, когда следующая за ними инструкция не является строковой инструкцией?

7
задан fuz 21 April 2012 в 12:58
поделиться