- Ne anlama
rep; nop
geliyor? pause
Talimatla aynı mı?rep nop
(Noktalı virgül olmadan) ile aynı mı ?- Basit
nop
talimattan farkı nedir ? - AMD ve Intel işlemcilerde farklı mı davranıyor?
- (bonus) Bu talimatlar için resmi belgeler nerede?
Bu soru için motivasyon
Başka bir sorunun yorumlarında biraz tartıştıktan sonra rep; nop;
, x86 (veya x86-64) derlemesinde ne anlama geldiğini bilmediğimi fark ettim . Ayrıca internette de iyi bir açıklama bulamadım.
Bunun "sonraki talimat zamanlarını tekrarla"rep
anlamına gelen bir önek olduğunu biliyorum (veya en azından eski 16 bit x86 derlemesinde öyleydi). Buna göre Wikipedia özet tablosunda , bu görünüyor ancak kullanılabilir , , , , (ama belki bu sınırlama yeni işlemciler üzerinde uzaklaştırıldı). Bu nedenle, (noktalı virgül olmadan) bir ameliyat zamanını tekrar edeceğini düşünürdüm .cx
rep
movs
stos
cmps
lods
scas
rep nop
nop
cx
Ancak daha fazla araştırmadan sonra kafam daha da karıştı. Öyle görünüyor rep; nop
ve pause
tam olarak aynı işlem koduyla eşleşiyor ve pause
sadece biraz farklı bir davranışa sahip nop
. 2005 tarihli bazı eski postalar farklı şeyler söylüyordu:
- "çok fazla güç yakmamaya çalışın"
- "sadece 2 bayt kodlamayla 'nop'a eşdeğerdir."
- "Bilgide sihir var. Bu 'hayır ama diğer HT kardeşinin kaçmasına izin ver' gibi."
- "Intel'de duraklama ve Athlon'da hızlı doldurma"
Bu farklı görüşlerle doğru anlamı anlayamadım.
O (her ikisi üzerinde Linux çekirdeği daha kullanıldığı i386 ve x86_64 birlikte bu yorum ile,): /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
Aynı zamanda bir Bertos kullanılan aynı yorum ile.