83 Stimmen

Welchen Zweck erfüllt der Opcode CIL nop?

Ich gehe gerade MSIL durch und stelle fest, dass es eine Menge nop Anweisungen in der MSIL.

Im MSDN-Artikel heißt es, dass sie keine Aktion ausführen und zum Auffüllen des Platzes verwendet werden, wenn der Opcode gepatcht wird. Sie werden viel mehr in Debug-Builds als in Release-Builds verwendet.

Ich weiß, dass diese Art von Anweisungen in Assembler-Sprachen verwendet werden, um spätere Anweisungen auszurichten, aber warum sind MSIL nops in MSIL erforderlich?

(Anmerkung des Herausgebers: Die akzeptierte Antwort bezieht sich auf Maschinencode-NOPs, nicht auf MSIL/CIL-NOPs, nach denen die Frage ursprünglich gestellt wurde).

19 Stimmen

Es gibt in diesen Antworten eine große Verwirrung zwischen der MSIL nop-Anweisung, die vom Sprachcompiler in die Assemblerdatei ausgegeben wird, und den x86 nop-Anweisungen (auf dieser Plattform), die vom JIT-Compiler ausgegeben werden, wenn die Assemblerdatei ausgeführt wird. [Idealerweise sollte diese Frage in 2 verschiedene Fragen aufgeteilt werden: Zweck von MSIL::nop? und Zweck von native platform nop?

1voto

Ich habe NOPs verwendet, um die nach dem Eintritt in eine ISR aufgelaufene Latenz automatisch anzupassen. Sehr praktisch, um das Timing auf den Punkt zu bringen.

1voto

Chris Conway Punkte 54023

Dies ist keine Antwort auf Ihre spezielle Frage, aber früher konnte man mit einem NOP eine Verzweigungszeitschlitz wenn Sie es nicht schaffen, ihn mit einer anderweitig nützlichen Anweisung zu füllen.

1voto

MarkR Punkte 60862

Sie ermöglichen es dem Linker, eine längere Anweisung (typischerweise ein Weitsprung) durch eine kürzere (ein Kurzsprung) zu ersetzen. Der NOP nimmt den zusätzlichen Platz ein - der Code kann nicht verschoben werden, da er die Funktion anderer Sprünge verhindern würde. Dies geschieht zur Link-Zeit, so dass der Compiler nicht wissen kann, ob ein langer oder kurzer Sprung angemessen wäre.

Zumindest ist das einer ihrer traditionellen Verwendungszwecke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X