Nulloperation

Die Nulloperation (englisch No Operation; Assembler-Mnemonic: NOP oder NOOP) ist ein Befehl – genauer eine Prozessoranweisung – in Maschinenprogrammen oder Kommunikationsprotokollen, der nichts bewirkt.

Prozessoranweisung

Auf einem Mikroprozessor bewirkt das Ausführen einer NOP-Instruktion nichts, außer dem Inkrementieren des Befehlszählers und dem Zeitverbrauch für das Holen dieses Befehls aus dem Arbeitsspeicher und seiner Interpretation. Der Opcode der Instruktion ist zwischen einem und neun Bytes lang.

Auf x86-kompatiblen Prozessoren ist die ursprüngliche Variante der ein Byte lange NOP-Befehl mit dem Opcode 0x90, der ein Alias für XCHG (E)AX, (E)AX, d. h. dem Austausch des Registerwertes mit sich selbst, ist und auf allen x86-Prozessoren implementiert ist. Die Multi-Byte-Variante wird ggf. nicht von allen Prozessoren unterstützt.

Der Befehl wird verwendet, um

  • ein bestimmtes Alignment im Speicher herzustellen,
  • bestehende Befehle im direkten Maschinencode zu „löschen“, indem sie mit NOP-Befehlen überschrieben werden,
  • eine – normalerweise allerdings nur grob vorhersagbare – Zeitverzögerung zu bewirken (ggf. in einer Schleife mehrfach aufgerufen), beispielsweise um durch Race Conditions ausgelöste Fehler zu vermeiden oder das Timing eines externen Signals zu definieren,
  • Pipeline-Hazards zu verhindern,
  • einen Branch Delay Slot zu füllen oder
  • als „Füllmaterial“ bei nicht genutztem Speicher (z. B. BIOS, ROMs oder eingebetteten Systemen).
  • als „Füllmaterial“ um bei Exploits durch einen Overflow eine bessere Trefferquote zu erzielen.
  • um ggf. Errata im Controller zu umgehen

Befehl in Kommunikationsprotokollen

In folgenden Kommunikationsprotokollen ist ein NOOP-Befehl implementiert. Der Server antwortet auf den NOOP-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

Literatur

Einzelnachweise

  1. RFC: 2060 – Telnet. (englisch).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.