- Apa
rep; nop
maksudnya - Apakah itu sama dengan
pause
instruksi? - Apakah sama dengan
rep nop
(tanpa titik koma)? - Apa bedanya
nop
instruksi sederhana ? - Apakah itu berperilaku berbeda pada prosesor AMD dan Intel?
- (bonus) Di manakah dokumentasi resmi untuk instruksi ini?
Motivasi untuk pertanyaan ini
Setelah beberapa diskusi di komentar dari pertanyaan lain , saya menyadari bahwa saya tidak tahu apa rep; nop;
artinya dalam perakitan x86 (atau x86-64). Dan juga saya tidak dapat menemukan penjelasan yang bagus di web.
Saya tahu itu rep
adalah awalan yang berarti "ulangi instruksi cx
kali berikutnya " (atau setidaknya itu, dalam perakitan x86 16-bit lama). Menurut ini tabel ringkasan di Wikipedia , tampaknya rep
hanya dapat digunakan dengan movs
, stos
, cmps
, lods
, scas
(tapi mungkin keterbatasan ini telah dihapus pada prosesor yang lebih baru). Jadi, saya akan berpikir rep nop
(tanpa titik koma) akan mengulangi waktu nop
operasi cx
.
Namun, setelah mencari lebih jauh, saya semakin bingung. Tampaknya rep; nop
dan pause
memetakan ke opcode yang persis sama , dan pause
memiliki perilaku yang sedikit berbeda dari sekadar nop
. Beberapa surat lama dari tahun 2005 mengatakan hal yang berbeda:
- "cobalah untuk tidak membakar terlalu banyak tenaga"
- "Ini setara dengan 'nop' hanya dengan pengkodean 2 byte."
- "Ini sihir bagi intel. Ini seperti 'nop tapi biarkan saudara HT lainnya lari'"
- "Ini adalah jeda pada intel dan padding cepat di Athlon"
Dengan pendapat yang berbeda ini, saya tidak dapat memahami arti yang benar.
Ini digunakan di kernel Linux (di i386 dan x86_64 ), bersama dengan komentar ini: /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
Ini juga digunakan di BeRTOS , dengan komentar yang sama.