Ich bin neugierig, sagen wir mal:
00000000001 90 nop
00000000002 90 nop
00000000003 90 nop
Wird es genauso ausgeführt?
00000000001 0F1F00 nop dword [ds:rax]
Welchen Effekt hätte das zweite Beispiel im Gegensatz zum ersten?
multi byte nop
zeigt einige Ergebnisse.Antworten:
Dies hängt von der Maschinenarchitektur ab. Der klassische KA-10 (pdp-10) hatte viele NOP-Codes, wahrscheinlich eine Folge seines sehr regelmäßigen Befehlssatzes und der Tatsache, dass alles von diskreten Komponenten implementiert wurde, nicht von Mikrocode. Einige NOPs verwiesen auf Speicher, andere waren Übersprungtests, die nie übersprungen wurden, aber dennoch den Zustand testeten, der möglicherweise einen Übersprung verursacht hat, und so weiter. "JFCL 0" wurde im Handbuch als schnellster NOP beworben.
quelle
Es scheint, dass das zweite Beispiel schneller als das erste ausgeführt werden sollte. Im ersten Beispiel werden drei separate Anweisungen ausgeführt. Im zweiten nur eine Anweisung. Die Multi-Byte-NOPs sollen für CPU- "Hinweise" verwendet werden (genau wie und wann ist anscheinend vertraulich ). Sie können für Ausrichtungszwecke nützlich sein (um eine enge Schleife in einer Cache-Zeile zu starten), haben aber derzeit keine andere Verwendung. Es ist unklar, ob die CPU die Argumente tatsächlich auswertet, daher kann nicht gesagt werden, ob sie die Befehlsdecodierungszeit verlängert oder eine Speicherzugriffsstrafe verursacht. Möchte jemand mit einem guten ICE eine davon testen und sehen, welche Adressen auf einer Busverfolgung angezeigt werden?
quelle