Ciekawi mnie to, powiedzmy, że mam:
00000000001 90 nop
00000000002 90 nop
00000000003 90 nop
Czy jest wykonywany dokładnie tak samo jak ten?
00000000001 0F1F00 nop dword [ds:rax]
Jaki wpływ miałby drugi przykład w porównaniu z pierwszym?
multi byte nop
, pokazuje całkiem sporo wyników.Odpowiedzi:
To zależy od architektury maszyny. Klasyczny KA-10 (pdp-10) miał wiele kodów nop, prawdopodobnie konsekwencją bardzo regularnego zestawu instrukcji oraz faktu, że wszystko to zostało zaimplementowane przez komponenty deskryptowane, a nie mikrokod. Niektóre NOP odwoływały się do pamięci, niektóre były testami pomijania, które nigdy nie pomijały, ale mimo to testowały stan, który mógł powodować pomijanie itd. „JFCL 0” był reklamowany w instrukcji jako najszybszy nop.
źródło
Wydaje się, że drugi przykład powinien działać szybciej niż pierwszy. W pierwszym przykładzie zostaną wykonane trzy oddzielne instrukcje. W drugim tylko jedna instrukcja. Wielobajtowe NOP są przeznaczone do użycia w „wskazówkach” procesora (dokładnie jak i kiedy są pozornie poufne ). Mogą być przydatne do celów wyrównywania (w celu uruchomienia ciasnej pętli na linii pamięci podręcznej), ale obecnie nie mają innego zastosowania. Nie jest jasne, czy procesor faktycznie ocenia argumenty, więc nie można powiedzieć, czy wydłuża czas dekodowania instrukcji, czy też ponosi karę za dostęp do pamięci. Ktoś z dobrym ICE chce przetestować jeden z nich i zobaczyć, jakie adresy pojawiają się na śladzie autobusowym?
źródło