News Microcode-Trick: So schützte sich Intels erste x86-CPU gegen Rechtediebstahl

PCGH-Redaktion

Kommentar-System
Teammitglied
Jetzt ist Ihre Meinung gefragt zu 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.

Bitte beachten Sie: Der Kommentarbereich wird gemäß der Forenregeln moderiert. Allgemeine Fragen und Kritik zu Online-Artikeln von PC Games Hardware sind im Feedback-Unterforum zu veröffentlichen und nicht im Kommentarthread zu einer News. Dort werden sie ohne Nachfragen entfernt.

Zurück zum Artikel: Microcode-Trick: So schützte sich Intels erste x86-CPU gegen Rechtediebstahl
 
EIn bisschen unglück formuliert im Artikel: Nein, der Intel 8086 bzw. auch 8088 hatte zwar Opcodes bzw. Mnemonics oder in Deutsch "Maschinenbefehle", also CPU-Befehle, um dies und das mit Registern und Inhalten aller Art (inkl. Adressregister) zu machen, aber er hatte keinen "Microcode" im heutigen Sinne. Denn Microcode wäre quasi ein Programm, was im Prozessor selbst mit Hilfe von kleinteiligeren Befehlen (also nicht vollständige CPU-Opcodes) ausgeführt wird, was dann im Ergebnis zu einem (ausgeführten) CPU-Befehl führt. Die erste CPU mit Microcode (in dem Falle RISC Befehle) war der Pentium Pro.
Microcode-Updates bei moderneren Prozessoren waren (und sind) Updates, um z.B. Fehler oder Schwachstellen der CPU zu beheben. Also quasi die Firmware der CPU. Die alten Intel 8086 und 8088 hatten dagegen nur in Silizium abgebildete Rechenwerke bzw. Transistoren. Nix Microcode.
 
Ich hatte mich auch schon über die Bezeichnung gewundert.
Wobei das jetzt nichts mit einer falle zu tun hat. Es gab ja genug "kompatible" prozessoren. Und vermutlich auch einige tests bei denen man stumpf EVA auf der original cpu abfragt und die Ergebnisse analysiert. Bekomme ich bei bestimmten Konstellationen immer wieder die selbe überschaubare Antwort zurück und habe ich fähige entwickler, dann kann ich die cpu mit eigenen desinges bauen die sich verhällt wie das Original.
 
EIn bisschen unglück formuliert im Artikel: Nein, der Intel 8086 bzw. auch 8088 hatte zwar Opcodes bzw. Mnemonics oder in Deutsch "Maschinenbefehle", also CPU-Befehle, um dies und das mit Registern und Inhalten aller Art (inkl. Adressregister) zu machen, aber er hatte keinen "Microcode" im heutigen Sinne. Denn Microcode wäre quasi ein Programm, was im Prozessor selbst mit Hilfe von kleinteiligeren Befehlen (also nicht vollständige CPU-Opcodes) ausgeführt wird, was dann im Ergebnis zu einem (ausgeführten) CPU-Befehl führt. Die erste CPU mit Microcode (in dem Falle RISC Befehle) war der Pentium Pro.
Microcode-Updates bei moderneren Prozessoren waren (und sind) Updates, um z.B. Fehler oder Schwachstellen der CPU zu beheben. Also quasi die Firmware der CPU. Die alten Intel 8086 und 8088 hatten dagegen nur in Silizium abgebildete Rechenwerke bzw. Transistoren. Nix Microcode.

Das war auch mein Stand, aber interessanter Weise schildert der Blogger es explizit anders. Und wenn der ganze Technobabble hier nicht frei erfunden ist, dann weiß er wohl schlichtweg ein paar Details, die andere nicht wissen.
(Quellen auf einem Niveau, die das beschriebene verifizieren könnten, kenne ist nicht.)

Leider erklärt er nicht, wo der Unterschied zur CISC => RISC Translation des Pentium Pro liegt.
 
Zuletzt bearbeitet:
Kurz und knapp, ein Dingens eingebaut, ähnlich wie ein Wasserzeichen beim Bild.
kopiert man das Bild, sieht man das Wasserzeichen, dann kann man sagen: alder, dem war von mir, hast geklaut. Her mit de kohlen. :fresse:
 
Das war auch mein Stand, aber interessanter Weise schildert der Blogger es explizit anders. Und wenn der ganze Technobabble hier nicht nicht frei erfunden ist, dann weiß er wohl schlichtweg ein paar Details, die andere nicht wissen.
(Quellen auf einem Niveau, die das beschriebene verifizieren könnten, kenne ist nicht.)

Leider erklärt er nicht, wo der Unterschied zur CISC => RISC Translation des Pentium Pro liegt.
Mnenomic ist korrekt. Microcode ist schlicht die Umsetzung von CISC -> RISC Instructions, was seit dem Pentium Pro der Fall ist. Zufälligerweise ist SALC seit dem Pentium Pro ein dokumentierter Befehl...
 
Das war auch mein Stand, aber interessanter Weise schildert der Blogger es explizit anders. Und wenn der ganze Technobabble hier nicht nicht frei erfunden ist, dann weiß er wohl schlichtweg ein paar Details, die andere nicht wissen.
(Quellen auf einem Niveau, die das beschriebene verifizieren könnten, kenne ist nicht.)

Leider erklärt er nicht, wo der Unterschied zur CISC => RISC Translation des Pentium Pro liegt.
Auf https://www.righto.com/2023/01/the-8086-processors-microcode-pipeline.html steht auch:
"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).
 
Zuletzt bearbeitet:
Tja, schon damals hatte man sich vor Räubern schützen können.
Schön gemacht zu dieser Zeit...:-)
 
Auf https://www.righto.com/2023/01/the-8086-processors-microcode-pipeline.html steht auch:
"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).

Die Implementation ist offensichtlich auf einem anderen Niveau als spätere CISC-=>-RISC-Designs und ich würde die Vorbereitung eines fix innerhalb eines Befehls folgenden Bearbeitungsschritts auch nicht mit späteren Prefetchern vergleichen, die Kontextbezogen arbeiten. Aber es ist und bleibt eine, wenn man so will, Software-Abstraktionsschicht zwischen Programmcode und Ausführungseinheiten. Das man einige Funktionen auch hardcoded hat ändert ja nichts daran, dass es Microcode gibt. Soweit ich der Schilderung folgen kann, laufen aber alle Befehle über diesen – nur gibt es allgemein nicht wirklich einen Decoding-Prozessor, der den Microcode laden und verarbeiten würde, sondern Code-Speicherung und -Verarbeitung sind physisch miteinander verwoben und vielen Fällen reicht der simple Zugriff auf eine Microcode-Eintrag, um die darin enthaltenen Verarbeitungsschritte anzustoßen.

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.^^
 
Naja – kein CPU-Hersteller veröffentlicht komplette Nachbau Konstruktionspläne samt Erläuterung zu seinen neuesten Produkten. Ein paar Jahrzehnte später hat dann nicht nur kaum jemand Lust, seitenlange Detailabhandlungen zu lesen, weswegen man diese als Hersteller gar nicht erst schreibt, sondern es hat sich auch die Begriffslage verschoben. Wie gesagt: Ich glaube, der "Microcode" eines Pentium Pro und späterer x86-Designs ist auf einem ganz anderen Niveau. Deren "Micro-Ops" werden gerne mit RISC-Befehlssätzen wie MIPS oder SPARC verglichen, aber dort ist beispielsweise eine Division schon ein einzelner Befehl.

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.
 
Zurück