Microcode-Trick: So schützte sich Intels erste x86-CPU gegen Rechtediebstahl
Im Microcode von Intels 8086 befindet sich eine undokumentierte Funktion, die wohl als Falle für Mitbewerber gedacht war. Hätte man beim Aufruf dieser Funktion dasselbe Ergebnis wie beim Original erhalten, hätte Intel sich sicher sein können, dass der Prozessor eine Kopie des eigenen Produkts ist.
Die x86-Architektur ist aus der modernen Welt nicht mehr wegzudenken: Nahezu alle Desktop-PCs und Notebooks, sowie die meisten Server, setzen auf den ursprünglich von Intel entwickelten Befehlssatz. Dementsprechend legendär ist der erste entsprechende Prozessor, der 1978 veröffentlichte Intel 8086. Ebendiese CPU wurde dabei zwar auch von verschiedenen anderen Herstellern angeboten, die sie in Lizenz fertigen durften. Gleichzeitig baute Intel aber eine Falle ein, um das unbefugte Kopieren zu unterbinden.
Microcode-Falle gegen Kopien
Finden lässt sich diese im Microcode, mit dem das Schaltwerk des Prozessors Befehle ausführt. Wie üblich wird dieser durch Bits dargestellt, sodass die Anzahl der möglichen Microcode-Befehle immer einer Zweierpotenz entspricht. Beim 8086 wurden aber weniger Befehle realisiert, als im verfügbaren Speicher Platz gehabt hätten. Und da gleichzeitig keine Prüfung vorgesehen war, ob ein auszuführender Befehl überhaupt existiert, gibt es einige unerlaubte Befehle.
Teils wurden diese mit Nachfolgeprozessoren wie dem Intel 80186, 80286 oder 80386 belegt. Der Microcode-Befehl mit der Hex-Nummer D6 war hingegen bei all diesen Modellen undokumentiert. Er hatte aber trotzdem eine Funktion: Mit ihm konnte ein Register unter Bedingung der Carry-Flag auf den Wert 0 oder 255 gesetzt werden. Nutzen konnten Entwickler dieses Feature aber nicht, denn Intel erwähnte diese Funktion erst fast 40 Jahre später - im Jahr 2017. Laut Ken Shirrif, der sich mit Computergeschichte beschäftigt, war dieser Befehl daher wohl als Falle gedacht.
Auch spannend: Intel Raptor Lake Refresh: Geht bei 6 GHz die Luft aus? [Gerücht]
Hätte ein Mitbewerber den Microcode von Intels 8086 vollständig kopiert und in einem Prozessor eingesetzt, hätte der D6-Befehl dort genau dieselbe Funktion ausgeführt. Damit hätte Intel beweisen können, dass der Chip ein Klon ist und das geistige Eigentum des Unternehmens verletzt. Dementsprechend groß war wohl die Enttäuschung, als Intel den Konkurrenten NEC für die Fertigung eines 8086-Klons verklagte, bei dem das Register aber tatsächlich unbesetzt war. Dadurch war klar, dass der NEC-Prozessor keine direkte Kopie und damit legal war.
Quelle: Righto via Tom's Hardware

Der 8086-"Microcode" schlüsselt dagegen einen Divisionbefehl in eine ganze Latte von Arbeitsschritten auf und würde, wenn man einen Pentium Pro daneben stellt, fast schon "Nanocode" genannt werden. Mir fehlen aber die nötigen Detailkenntnisse um zu sagen, wie viel dieser Weitung des Maßstabs wirklich einen Paradigmen-Wechsel hin zu CISC=>RISC darstellt und wieviel schlicht auf die Komplexitätssteigerung von den 70ern zu den 90ern zurückgeht. Da müsste man vermutlich erstmal den Pentium 1 mit dem 8086 vergleichen, um eine Baseline festzulegen.
Da hat uns Intel wohl lange etwas verschwiegen ... .
"The 8086 uses a hybrid approach: although the 8086 uses microcode, much of the instruction functionality is implemented with gate logic. This approach removed duplication from the microcode and kept the microcode small enough for 1978 technology."
Also hast Du und ich ein bisschen recht
P.S.: Ich staune noch mehr - der 8086/8088 kann sogar Befehle im Voraus holen, um Taktzyklen zu sparen, bisher dachte ich "prefetch" von Opcodes können nur spätere Intel-CPUs.
Insofern interessant, da man also schon mit dem 8086 Schutz vor Debugging mit selbstmodifizierendem Code implementieren kann (bereits "prefetched" Code vor der Ausführung in dem nächsten folgenden Code wird dazu modifiziert).
Beim 8087 scheint das anders/deutlich komplexer und gegebenenfalls eine funktional eher mit Pentium Pro & Co vergleichbare Herangehensweise zu sein. Aber ich war für meinen Geschmack nach Konsum des zugehörigen Artikels über das MLC-Microcode-ROM schon tief genug im Kaninchenbau.^^
Schön gemacht zu dieser Zeit...