Mikroprogrammierung vs. Maschinensprachenprogrammierung

10

Ich bin ein bisschen verwirrt zwischen der Mikroprogrammierstufe und der Maschinensprachenstufe. Beispielsweise:

  1. Wo befinden sich beide Programmtypen während der Ausführung?
  2. Haben Sie eine 1: 1-Zuordnung zu True-Op-Anweisungen in Assemblersprache?
  3. Wird das Format von beiden durch die Prozessorarchitektur definiert?

quelle
4
Wenn Sie es noch nicht gelesen haben, lesen Sie den Artikel [Wikipedia] [1]. es ist ziemlich toll. [1]: en.wikipedia.org/wiki/Microcode
Shawn J. Goff
5
Microcode ist wahrscheinlich nicht das, wovon Sie sprechen. Wenn Sie nicht Ihre eigene CPU entwerfen, werden Sie wahrscheinlich nicht an Mikrocode interessiert sein. Sie könnten das "Mikro" in "Mikrocode" mit "Mikrocontroller" verwechseln, aber sie sind nicht dasselbe.
Davr
1
Nein, ich nehme über Mikrocode. Ich studiere CPU-Interna und versuche, die untersten Schichten wie Mikrocode zu verstehen.

Antworten:

7

Mikrocode ist eine weitere Abstraktionsebene, die über den Maschinencode hinausgeht. Auf der eigentlichen CPU wird Mikrocode ausgeführt, und eine Übersetzungs-Engine konvertiert Maschinencode im laufenden Betrieb in Mikrocode. Dies geschieht aus einer Vielzahl von Gründen, einschließlich schnellerer, kleinerer Prozessoren, einfacherer Erstellung eines komplexen Prozessors mit weniger Debugging und aus Gründen der Abwärtskompatibilität. Beispielsweise enthält der x86-Befehlssatz einige Zeichenfolgenverarbeitungsanweisungen, die selten verwendet werden. Um jedoch abwärtskompatibel zu bleiben, müssen sie in modernen x86-Prozessoren verfügbar sein. Anstatt einen Ausführungspfad für diese Anweisungen fest zu verdrahten, werden sie in Mikrocode konvertiert und ausgeführt. Dies spart Silizium und bleibt dennoch abwärtskompatibel.

Wo befinden sich beide Programmtypen während der Ausführung?

Der Maschinencode befindet sich im Cache (nachdem er aus dem RAM gezogen wurde). Der Mikrocode befindet sich abhängig von der jeweiligen Maschinenarchitektur in einem Mikrocode-Cache. Der Cache ist möglicherweise nur groß genug, um genügend Mikrocode aufzunehmen, um den konvertierten Mikrocode aus der größtmöglichen Maschinencode-Anweisung aufzunehmen, oder es kann sich um einen größeren Cache handeln, in dem die konvertierten Ergebnisse vieler Maschinencodes gespeichert werden, sodass nicht alle neu konvertiert werden müssen der Maschinencode bei jeder Iteration für kleine Schleifen.

In einigen Architekturen wird der konvertierte Mikrocode nirgendwo gespeichert - die Abruf- / Übersetzungseinheit spuckt einfach eine Reihe von Mikrocode-Anweisungen aus, die auf dem aktuell ausgeführten Maschinencode basieren. In diesem Fall wird der Mikrocode von einem ROM irgendeiner Art ausgeführt, und der Maschinencode ist im Wesentlichen ein Index im ROM, der auf die Reihe von Mikrocode-Befehlen verweist, die ausgeführt werden müssen, um den Maschinencode-Befehl vollständig auszuführen.

Haben Sie eine 1: 1-Zuordnung zu True-Op-Anweisungen in Assemblersprache?

Maschinencode und Montagecode werden im Allgemeinen 1: 1 den Montageanweisungen zugeordnet. Das hängt vom Assembler ab. Assembler auf hoher Ebene verfügen möglicherweise über eine große Anzahl von Makros, mit denen eine Zeile Assembler-Code geschrieben werden kann, und der Assembler erstellt mehrere Maschinencodes.

Im Allgemeinen kann die "reine" Assemblersprache jedoch mithilfe der Befehlssatztabelle im Handbuch des Prozessors direkt in Maschinencode konvertiert werden.

Ich bin mir jedoch nicht sicher, was Sie unter "True-Op-Anweisungen" verstehen. Vielleicht können Sie die Referenz erklären.

Wird das Format von beiden durch die Prozessorarchitektur definiert?

Das Format von Maschinencode und Mikrocode wird durch die Prozessorarchitektur definiert.

Adam Davis
quelle
Mit 'true-op' meine ich Anweisungen, die KEINE synthetischen oder Pseudo-Assembler-Anweisungen sind. Für die zweite Frage wollte ich fragen, ob Mikrocode-Anweisungen den Assembler-True-Op-Anweisungen zugeordnet sind.
@ Louis - Im Allgemeinen gibt es keinen veröffentlichten Assembler-Code, der eine 1: 1-Übersetzung in den Mikrocode darstellt. Intel und AMD (und andere) behalten ihren Mikrocode proprietär, da er einen sehr guten Einblick in die interne Architektur des Prozessors gibt. Ich habe gehört, dass sie für spezielle Zwecke bereit sind, beispielsweise Forschern Informationen darüber zur Verfügung zu stellen, damit sie für bestimmte Anwendungen die letzten 1% der Leistung aus der Maschine herausholen können, zum größten Teil jedoch nur die veröffentlichten Spezifikationen Enthält den Maschinencode und die allgemeine Architekturbeschreibung.
Adam Davis
8

Grundsätzlich erweitert Microcode einen begrenzten CPU-Befehlssatz um Befehle höherer Ebene, deren Implementierung in Hardware umständlich wäre, die jedoch mit vorhandenen Befehlen relativ einfach zu erstellen sind. Mit dem Mikrocode kann ein Prozessor mit einem kleinen Befehlssatz wie ein Prozessor mit einem größeren Befehlssatz funktionieren.

Nehmen wir an, Sie arbeiten mit einem MARIE-Befehlssatz und möchten eine Funktion zum Hinzufügen von x, y, aber die Architektur erlaubt nur das Hinzufügen von x (das nur das hinzufügt, was sich derzeit im Register zu x befindet), sodass Sie einen Mikrocode-Befehl hinzufügen:

LOAD x //Load x into the register
ADD y //Add y to the value in the register

Jetzt, wenn Ihr Maschinensprachencode sagt:

ADD x,y

Es sucht nach der ADD-Funktion, die Sie dem ROM (Ihrem Mikrocode) hinzugefügt haben, und führt sie aus. Dies ist großartig, da es Ihren Befehlssatz vergrößert, wodurch besser lesbarer Maschinencode möglich ist, und da Ihr Mikrocode im ROM gespeichert ist, ist er auch etwas schneller als das Aufrufen von LOAD und ADD aus dem RAM.

Ich habe in einer Firma gearbeitet, die tatsächlich Mikrocode geschrieben hat, um benutzerdefinierte Messungen mit sehr hohen Geschwindigkeiten auf ihren älteren Systemen durchzuführen. Mit den Fortschritten bei FPGAs sind sie jedoch auf diejenigen umgestiegen, die viel schneller sind (da Sie die "benutzerdefinierten Anweisungen" tatsächlich in Hardware anstelle von ROM implementieren).

smoore
quelle
Wie haben Sie Mikrocode geschrieben und ausgeführt?
Erik Kaplun
@ErikAllik Sie können dies nur tun, indem Sie Ihren eigenen Computer von Grund auf neu erstellen.
user253751
5

Viele Prozessoren werden von einer Zustandsmaschine gesteuert, deren Übergangssequenz von den ausgeführten Anweisungen beeinflusst wird. Mikrocode- "Anweisungen" spezifizieren häufig die Wechselwirkungen zwischen verschiedenen Registern und Bussen auf eine Weise, die für einen Programmierer nicht sichtbar wäre.

Beispielsweise könnte ein Mikrocode-Befehl für eine 8-Bit-CPU im Zustand Nr. 1 angeben, dass die Ausgabefreigaben für beide Hälften des Programmzählers aktiv sein sollen (wodurch der Programmzähler auf dem oberen und unteren internen Adressbus ausgegeben wird) Das Programmzähler-Inkrement-Signal sollte aktiv sein, die externen Adress-Latch-Signale sollten aktiv sein (so dass der externe Adressbus das interne verfolgen wird) und das RAM-Lesesignal sollte aktiv sein und die Steuerung sollte in den Zustand Nr. 2 wechseln.

In Zustand 2 sollte der externe Datenbus dem internen primären Datenbus zugeführt werden, und das Befehlsregister, das von diesem Bus liest, sollte geladen werden. Der Programmzähler sollte wie zuvor auf beiden Hälften des Adressbusses ausgegeben und ein weiterer RAM-Lesevorgang ausgegeben werden. Die Bits 5-7 des Befehlsregisters sollten in die Bits 0-2 der Zustandssteuerung geladen werden, das Bit 3 des Zustandsregisters sollte gesetzt werden, es sei denn, die Bits 1-7 des Befehlsregisters sind alle gesetzt, und andere Bits des Zustandsregisters sollte klar sein, das Nettoergebnis ist, dass der nächste Zustand # 7- # 15 sein wird.

Beachten Sie, dass der Mikrocode nicht wirklich anhand von Anweisungen definiert wird, sondern anhand von Kombinationen von Steuersignalen. Die Hardware wird nicht so eingerichtet, dass sie allgemeine Anweisungen im Mikrocode zulässt, sondern verschiedene Register von / zu den Bussen, auf denen sie sitzen, lädt oder ausgibt oder verschiedene Busse miteinander verbindet und verschiedene Bits oder Kombinationen davon verwendet Wählen Sie verschiedene Zustände aus. Viele Aspekte des Designs werden fest verdrahtet sein (z. B. können die Opcodes FE und FF eher in Hardware als in Mikrocode enthalten sein). Die Idee mit Mikrocode ist nicht, Programme auszuführen, sondern Logik zu ersetzen.

Superkatze
quelle