Nulloperation
DieNulloperation (englischNo Operation; Assembler-Mnemonic:NOP oderNOOP) ist ein Befehl – genauer eineProzessoranweisung – inMaschinenprogrammen oderKommunikationsprotokollen, der nichts bewirkt.
Prozessoranweisung
[Bearbeiten |Quelltext bearbeiten]Auf einemMikroprozessor bewirkt das Ausführen einerNOP-Instruktion nichts, außer dem Inkrementieren desBefehlszählers und dem Zeitverbrauch für das Holen dieses Befehls aus dem Arbeitsspeicher und seiner Interpretation. DerOpcode der Instruktion ist zwischen einem und neun Bytes lang.
Aufx86-kompatiblenProzessoren ist die ursprüngliche Variante der ein Byte langeNOP-Befehl mit dem Opcode0x90, der ein Alias fürXCHG (E)AX, (E)AX, d. h. dem Austausch desRegisterwertes mit sich selbst, ist und auf allenx86-Prozessoren implementiert ist. Die Multi-Byte-Variante wird ggf. nicht von allen Prozessoren unterstützt.
Der Befehl wird verwendet, um
- ein bestimmtesAlignment im Speicher herzustellen,
- bestehende Befehle im direkten Maschinencode zu „löschen“, indem sie mitNOP-Befehlen überschrieben werden,
- eine – normalerweise allerdings nur grob vorhersagbare – Zeitverzögerung zu bewirken (ggf. in einerSchleife mehrfach aufgerufen), beispielsweise um durchRace Conditions ausgelöste Fehler zu vermeiden oder dasTiming eines externen Signals zu definieren,
- Pipeline-Hazards zu verhindern,
- einenBranch Delay Slot zu füllen oder
- als „Füllmaterial“ bei nicht genutztem Speicher (z. B.BIOS,ROMs odereingebetteten Systemen).
- als „Füllmaterial“ um beiExploits durch einenOverflow eine bessere Trefferquote zu erzielen.
- um ggf. Errata im Controller zu umgehen
Befehl in Kommunikationsprotokollen
[Bearbeiten |Quelltext bearbeiten]In folgenden Kommunikationsprotokollen ist einNOOP-Befehl implementiert. DerServer antwortet auf denNOOP-Befehl mit einer Statusrückmeldung. Somit kann der Befehl unter anderem verwendet werden, um in Phasen längerer Inaktivität zu prüfen, ob weiterhin eine Verbindung besteht.
Siehe auch
[Bearbeiten |Quelltext bearbeiten]- HLT (Maschinenbefehl)
- IEFBR14 (als Beispiel für einen „leeren“ Befehl auf anderer Ebene)
Literatur
[Bearbeiten |Quelltext bearbeiten]- Intel 64 and IA-32 Architectures Software Developer Manuals. intel.de
- Developer Guides & Manuals. AMD Developer Central.