Woher weiß eine CPU, was Befehle und Anweisungen eigentlich bedeuten?

73

Woher weiß ein Prozessor, was die verschiedenen Befehle bedeuten?

Ich denke an Befehle auf Assembly-Ebene wie MOV, PUSH, CALL, etc ...

Simon Verbeke
quelle
Dies ist sehr informativ, aber was ich suche, ist, was es einer CPU ermöglicht, Befehle zu empfangen und zu senden?
Ich verstehe diesen Kommentar nicht. Eine CPU "empfängt" Befehle aus dem Speicher, indem sie nach Adressen fragt. Die einzigen Befehle, die eine CPU "sendet" (zumindest vereinfachend), sind Befehle an den Speicher, um Daten zu liefern, und Befehle an E / A-Busse, um E / A-Geräte zu betreiben.
Daniel R Hicks
Das Herzstück jeder CPU ist eine Logik, die (im wahrsten Sinne des Wortes) fest verdrahtet ist, um eine einfache Prozedur auszuführen: Nehmen Sie den Wert aus dem Befehlsadressregister, senden Sie ihn in den Speicher, rufen Sie den Befehl ab, der vom Speicher zurückgegeben wird, und stauen Sie ihn dann in eine etwas größere komplexes Nest festverdrahteter Logik, die "versteht", was der Befehl bedeutet und wie er auszuführen ist. Oh, und irgendwo dort entlang erhöht sich das Befehlsadressregister.
Daniel R Hicks
Leser könnten sich für die Frage interessieren, wie ein Computer funktioniert. über Informatik .
Raphael

Antworten:

88

Wenn ein Computer Anweisungen auf Baugruppenebene interpretiert , werden diese Anweisungen in ihre binären Entsprechungen umgewandelt, damit die CPU sie lesen kann. Wenn die CPU die Befehle ausführt, interpretiert sie den Operationscode-Teil des Befehls in einzelne "Mikroprogramme", die ihre Mikrocode- Äquivalente enthalten. Nur damit Sie wissen, besteht eine vollständige Montageanleitung aus einem Opcode und allen dazugehörigen Daten (z. B. Registernamen, Speicheradressen).

Mikrocodebefehle sind extrem niederpegelig (mehr als Assemblierung) und steuern die tatsächlichen digitalen Signale, die den Logikfluss im Mikroprozessor steuern. Beispielsweise könnte ein Mikrocode-Befehl ein Bedingungscode-Register- Flag mit einem neuen Wert aktualisieren oder ein CPU- Register mit einer der ALU- Einheiten verbinden. Es sind komplexere Aufgaben möglich, aber dies zeigt Ihnen die allgemeine Idee, wofür der Mikrocode verwendet wird.

Der allgemeine Ablauf von der Kompilierung bis zur Ausführung sieht wie folgt aus. Die Montageanweisungen werden zusammengesetzt (in ihre binären äquivalenten Nullen und Einsen oder von nun an in logische Signale umgewandelt). Diese Logiksignale werden wiederum von der CPU interpretiert und in Logiksignale mit niedrigerem Pegel umgewandelt, die den Fluss der CPU anweisen, den bestimmten Befehl auszuführen. Dies kann abhängig von der Architektur und dem Design des Prozessors einen oder mehrere Taktzyklen dauern (die meisten Referenzhandbücher für Prozessoren geben an, wie viele Taktzyklen für die Ausführung eines bestimmten Befehls erforderlich sind, z. B. dieser ).

All dies geschieht mit einem fest programmierten Mikrocode (der physisch in den Prozessor in eine Art ROM eingebettet ist , der während der Herstellung eingestellt wird), der den Fluss durch die tatsächlichen Logikgatter auf niedriger Ebene lenkt . Dies bietet eine Schnittstelle zwischen den abstrakten Montageanweisungen und der physischen elektrischen Logik im Prozessor.


Zusammenfassend werden also Prozessoranweisungen vom Prozessor zusammengestellt und geladen. Der Prozessor wird dann diese Anweisungen verwenden, um das Mikroprogramm (in Form eines Mikrocodes) nachzuschlagen, das dieser bestimmten Anweisung entspricht, die "tatsächlich" die Anweisung ausführt. Sobald die Mikrocodes für den bestimmten Befehl ausgeführt wurden (was einen oder mehrere Taktzyklen dauern kann), führt der Prozessor den Mikrocode aus, um den nächsten Befehl abzurufen, und der Zyklus wird wiederholt.

Durchbruch
quelle
2
Ok, ich verstehe, denke ich :) Also schalten die Befehlsbits "um", was den Prozessor veranlasst, bestimmte Dinge mit den empfangenen Daten zu tun?
Simon Verbeke
4
@ Simon Verbeke, genau richtig. Sie schalten einfach die Schalter um, um den Fluss der elektrischen Signale im Prozessor zu lenken (was auch dazu führen kann, dass mehr Befehle neu geladen werden!). Die Schalteranalogie ist gut, da alles digital ist (entweder logisch 1/0 oder wahr / falsch). Nur damit Sie wissen, ist der Logikpegel eine tatsächliche Spannung. Es ist Sache des Ingenieurs, eine 0 oder eine 1 anzugeben (eine logische 1 kann beispielsweise mit mehr als 2 Volt angegeben werden).
Durchbruch
1
"Binäre äquivalente Anweisungen", auf die sich der Compiler oder Assembler beschränkt, werden als Opcodes bezeichnet. Wenn Sie sich die Opcode-Struktur einer RISC-Architektur wie MIPS oder ARM ansehen, können Sie sehen, wie verschiedene Bits im Opcode bestimmten Operationen zugeordnet sind. Intel hat aufgrund seiner Langlebigkeit und der Tendenz, immer wieder verlängert zu werden, keine einfache Mapping-Struktur mehr.
LawrenceC
3
Nein, ich habe gesagt, dass die Zuordnung einzelner Bits in Opcodes zu Mikrooperationen aufgrund der Langlebigkeit und der ständigen Erweiterung der x86-Architektur nicht so einfach ist wie in MIPS oder ARM bis zu einem gewissen Grad (siehe d.umn.edu/~gshute/spimsal/talref.html ). Ich glaube, es gab nicht viel Ahnung von "RISC", als Intel 1978 x86-CPUs einführte.
LawrenceC
5
Es ist nicht zu beachten, dass nur einige CPUs mikrocodiert sind. Einige (meist kleinere Geräte) arbeiten direkt mit den Operationscodes der Baugruppe. Es kommt auf die Architektur an.
Fake Name
37

Der Prozessor "weiß" nicht wirklich, was die Befehle sind. Die Befehle sind nur binäre Muster, die den Prozessor dazu veranlassen, das zu tun, was wir unter Befehlen verstehen.

Beispielsweise bewirkt eine ADD-R1-in-R2-Operation, dass die Werte der Register 1 und 2 die ALU (Arithmetik- und Logikeinheit) erreichen, dass die ALU den Ausgang des Addierers anstelle der verschiedenen anderen Daten verwendet und die Ausgang der ALU, um den Wert in Register 2 zu ersetzen. Es gibt einfache Logikschaltungen, um all diese Dinge zu erreichen ( Multiplexer , Addierer , Zähler , ...), obwohl echte Prozessoren sehr komplizierte Optimierungen verwenden.

Es ist so, als würdest du fragen, wie ein Auto langsamer werden kann, wenn du auf die Bremse drückst. Das Auto weiß es nicht, das Bremspedal steuert indirekt, wie stark die Bremsbeläge gegen die Räder gedrückt werden.

Craig Gidney
quelle
5
Nizza Analogie mit Autos Bremspedal.
rjmunro
10

Nehmen wir zum Beispiel den Befehl, der einen x86 / IA-32-Prozessor anweist, einen sofortigen 8-Bit-Wert in ein Register zu verschieben. Der Binärcode für diesen Befehl lautet 10110, gefolgt von einer 3-Bit-Kennung, für die das Register verwendet werden soll. Die Kennung für das AL-Register ist 000, daher lädt der folgende Maschinencode das AL-Register mit den Daten 01100001.

10110000 01100001

Dieser binäre Computercode kann besser lesbar gemacht werden, indem er wie folgt hexadezimal ausgedrückt wird

B0 61

Hier bedeutet B0 "Verschiebe eine Kopie des folgenden Werts nach AL" und 61 ist eine hexadezimale Darstellung des Werts 01100001, der 97 dezimal ist. Die Intel Assembler-Sprache stellt für Anweisungen wie diese die Mnemonik MOV (eine Abkürzung für Move) zur Verfügung, sodass der obige Maschinencode wie folgt in Assembler-Sprache geschrieben werden kann, wobei nach dem Semikolon gegebenenfalls ein erklärender Kommentar eingefügt wird. Dies ist viel einfacher zu lesen und zu merken.

http://en.wikipedia.org/wiki/Assembler_language

Mit anderen Worten, wenn Sie Ihr Assemblerprogramm "zusammenstellen", folgen Sie Ihren Anweisungen wie

MOV AL, 61h

werden in Zahlen umgewandelt, denen die CPU eine besondere Bedeutung zuordnet und dann entsprechend handelt.

Nate
quelle
2
Es ist auch anzumerken, dass die Zuordnung des mnemonischen Symbols "mov" zu diesem bestimmten Bitmuster völlig willkürlich war. Ich könnte im Prinzip einen Assembler schreiben, der diese Anweisung "oof" nennt, und es würde genauso gut funktionieren, abgesehen davon, dass es schwieriger ist, sich daran zu erinnern.
dmckee
6

Vorgeschlagene Literatur:

Beachten Sie auch die Kursnotizen aus CS152: Computer Architecture and Engineering an der UC Berkeley, einem Kurs, in dem Studenten eine CPU implementieren.

Wenn Sie für "hausgemachte CPU" googeln, finden Sie viele Leckereien.

Nibot
quelle
4

Auf der untersten Ebene kann die CPU lediglich etwas hinzufügen. Von Addition kann subtrahiert, multipliziert und dividiert werden (da dies nur Addition auf andere Weise ist). Die CPU verwendet dies, um Daten im Speicher zu verschieben, indem die Additionen auf die Speicheradressen angewendet werden.

Beachten Sie jedoch, dass dies auf dem niedrigstmöglichen Niveau ist. Die CPU "versteht" tatsächlich bestimmte Befehle in Form eines Mikrocodes. Siehe die Antwort von Breakthrough, sie ist sehr gut geschrieben.

n0pe
quelle
7
Logische Operationen wie AND, OR und NOT sowie das Verschieben von Bits sind grundlegender als das Hinzufügen. Das Hinzufügen kann tatsächlich in diesen Operationen ausgedrückt werden. Es gibt tatsächlich diskrete ICs (die Texas Instruments LS-Serie), die nur diese Vorgänge ausführen, und es ist möglich, eine Art CPU daraus zu bauen. Google "Pong-Schema", um zu sehen, wie ein Spiel zum Beispiel ohne CPU gemacht wird.
LawrenceC
Ich meinte aus einer eher softwaretechnischen Sicht :) Ja, in Bezug auf Hardware / Logik hast du eine verrückte Menge an NAND- und NOR-Gattern. Guter Punkt.
Nr.