Warum heißt der undefinierte x86-Befehl ud2? Und warum die 2?

Why is the x86 undefined instruction called ud2? Why 2?

Der x86-Befehl ud2 löst garantiert eine Invalid-Opcode-Exception aus und markiert unerreichbaren Code. Doch warum die 2? Raymond Chen rekonstruiert die Geschichte: Früher nutzten Entwickler die Byte-Sequenzen 0F FF und 0F B9, um Abstürze zu erzwingen. Intel machte daraus offizielle Befehle und nannte sie rückwirkend ud0 und ud1 – ud2 blieb als empfohlener undefinierter Opcode übrig.

Mit genügend Nutzern wird jedes beobachtbare Verhalten von irgendjemandem als verlässlich vorausgesetzt.
  1. hacker_homie

    Also wurden endlich die 0F FF-Gläubigen belohnt, indem man ihnen die Ehre zuteil werden ließ, den Opcode UD0 zu erhalten, wodurch er der eine und wahre ursprüngliche ungültige Opcode wurde und die Anhänger von 0F B9 dauerhaft mit der Schande von UD1 gebrandmarkt wurden.

  2. 349ru3h4f03

    Heutzutage sind UD0, UD1 und UD2 im SDM und APM enthalten.

    Wir haben auch UDB (D6), die Ein-Byte-Variante, die mit x86-64 für den 64-Bit-Modus kam.

    Und wir hatten schon immer UDW (FF FF), auch bekannt als Gruppe #5 (erste FF) mit einem ModRM-Byte von mod=11b r/m=111b (/7) reg=111b (zweite FF) – das ist relevant für Speicher, bei dem alle Bits auf 1 gesetzt sind, oder für Busse, die auf alle 1 abgeschlossen werden, wenn kein Gerät einen Zugriff beansprucht.

  3. gtirloni

    Ich musste kürzlich Builds debuggen, die zufällig fehlschlugen, und ein ud2 von V8 wartete dort auf mich.

  4. Neywiny

    Ich bin nicht gerade ein x86-Mensch, aber auf anderen Architekturen kann man Software-Interrupts/-Exceptions auslösen. Gibt es das auf x86 nicht, oder deckten diese Einrichtungen nicht genug Anwendungsfälle ab?

  5. ordu

    > Es heißt ud2, weil die 0F FF-Variante nachträglich ud0 genannt wurde und die 0F B9-Variante nachträglich ud1, sodass ud2 als der empfohlene undefinierte Opcode übrig blieb.

    Das war für mich als Leser eine Überraschung. Als ich zu diesem Satz kam, nahm ich an, dass 0f ff zu #1 und 0fb9 zu #2 würde. Aber nein, Intel zählt von Null an, also gibt es ein drittes ud.

Mehr von diesem Tag

2026-09-13