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.