loop
プレーンループ、ループ、ビルトインループの速度の違いを調べてみましたrep
。動作を比較するために3つのプログラムを作成しました。
プログラム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
3番目のプログラムは期待どおりに機能しないことが判明しました。一部の研究者は、rep nop
別名pause
はまったく関係のないことをしていると言っています。
それに続く命令が文字列命令でない場合rep
、repz
およびプレフィックスは何をしますか?repnz