Bazı NOP kodları diğerlerinden farklı mı işlem görüyor?


12

Bunu merak ediyorum, diyelim ki:

00000000001 90                              nop        
00000000002 90                              nop        
00000000003 90                              nop 

Tam olarak bununla aynı mı?

00000000001 0F1F00                          nop        dword [ds:rax]

İkinci örneğin birincisinin aksine ne bir etkisi olurdu?


1
İkincisinin 3'ten ziyade bir talimat olduğu için ilkinden daha hızlı çalışacağını düşünmeye meyilli olurum, ancak modern boru hattının bunu değiştirmesi mümkündür.
Loren Pechtel

1
Bu neden c olarak etiketlendi ?
Keith Thompson

Google için multi byte nop, oldukça az sonuç çıkıyor.
phant0m

1
@KeithThompson - C ve kodlama tarzı etiketleri çektim; onlar ait değildi.

@ phant0m - bu yorumu bir cevap haline getirir ve daha alakalı bazı sonuçları özetler misiniz? Hepimiz, bu arama sorgusundan ne geleceğini doğru bir şekilde anlamak için arka plana sahip değiliz.

Yanıtlar:


2

Makine mimarisine bağlıdır. Klasik KA-10'un (pdp-10) çok sayıda nop kodu vardı, muhtemelen son derece düzenli talimat setinin bir sonucu ve hepsinin mikro kodla değil ayrı bileşenler tarafından uygulanmış olması. Bazı NOP'lar belleğe başvurdu, bazıları hiç atlanmayan atlama testleridir, ancak yine de bir atlamaya neden olabilecek durumu test etti ve bu böyle devam etti. "JFCL 0," kılavuzda en hızlı nop olarak ilan edildi.


Birden çok NOP'u tek bir JMP komutuyla değiştirme seçeneği sunan bir (8085?) Derleyicisi üzerinde çalıştım. Performans cezasını ödemeden istediğiniz hizalamayı aldınız. PIC'de dizeler olduğunda kullanışlı, CPU tabanlı zamanlama döngüleriniz varsa çok kullanışlı değil (bu yüzden varsayılan olarak kapalı idi).
TMN

Çoğu zaman NOP talimatı, genellikle bazı donanım bağımlılığı veya cihazdaki hatalar nedeniyle kısa bir gecikme eklemek için kullanılır. Performans cezası, NOP'un kullanılmasının nedenidir.
uɐɪ

1
nopsların pek çok aesoterik kullanımı vardır. Bazı mimarilerin atlamalar için bayt hizalama gereksinimleri vardır. Kendini değiştiren kod (dehşet!), Düğümleri ekleme noktaları olarak kullandı. Hata sistemleri başarısız iddialar hakkında bilgi depolamak için nops kullandı.
ddyer

@ddyer: Bazı işlemcilerin bellek baytını getirecek ve getirilen değeri tamamen göz ardı edecek veya programcının umursamayacağı set bayrakları dışında hiçbir şey yapamayacak talimatları (bazen belgelendirilmiş, bazen belgelendirilmemiş) vardır. 6502'de, "BIT abs" talimatını sonraki iki baytı hafifletmek için kullanmak oldukça yaygındı; Ayrıca, herhangi bir bayrağını güncellemedikleri sürece, benzer şekilde davranan belgelenmemiş bazı kodlamalar da vardır. Bununla birlikte, bu tür hilelerle bir uyarı: adres alanının bir baytının okunmasına neden olur. Bazı 6502 çevre birimleri okuma işlemlerine tepki verebilir.
supercat

0

İkinci örneğin birinciden daha hızlı çalışması gerektiği anlaşılıyor. İlk örnekte, üç ayrı talimat yürütülecektir. İkincisinde, sadece bir talimat. Çok baytlı NOP'ların CPU "ipuçları" için kullanılması amaçlanmıştır (tam olarak nasıl ve ne zaman görünürde gizlidir ). Hizalama amaçları için yararlı olabilirler (önbellek satırında sıkı bir döngü başlatmak için), ancak şu anda başka bir kullanımları yoktur. CPU'nun argümanları gerçekten değerlendirip değerlendirmediği belirsizdir, bu nedenle komutun kod çözme süresini artırıp artırmayacağını veya bellek erişim cezasına çarptırıldığını söylemek mümkün değildir. ICE'si iyi olan biri bunlardan birini test etmek ve bir otobüs izinde hangi adreslerin açıldığını görmek ister mi?


Birçok 6502 montajcısı, bellek getirme (ör. NOP $ 1FF9) gerçekleştiren belgesiz opcodelar için anımsatıcı "NOP" kullanmasına rağmen, 0x1FF9 adresini okuyan ve okunan değeri yok sayan iki baytlık bir komut olacaktır. Belirli bir adresler (0x1FF9 gibi) eylemleri tetikleyen donanıma (örneğin kod bankası 1'e geçiş) donanıma bağlanmayacağının garantisi olmadığından, program sayacı / talimat işaretçisini ilerletmenin ötesinde bir şey yapan bir talimat için "nop" terimini kullanın. ) ve bu tetikleme tam olarak "işlem yok" değildir.
supercat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.