Maximale Anzahl von Operationscodes für einen Mikroprozessor


13

Bildbeschreibung hier eingeben

Was ist die maximale Anzahl von Opcodes für die Frage, die Antwort ist c Option, aber ich denke, es ist Option d, weil jede Adresse jeden Speicherplatz angibt, gibt es 16 Adresszeilen, was bedeutet, 2 ^ 16 Adressen, dh 2 ^ 16 Speicherplätze.

Wenn also jeder Ort einen Opcode enthält, enthalten insgesamt 2 ^ 16 Orte 2 ^ 16 Opcodes und dies ist die maximale Anzahl von Opcodes, aber die Antwort lautet c, was 2 ^ 12 ist. Wie ist das möglich?


7
Die Frage ist, wie viele VERSCHIEDENE Operationscodes in der ISA vorhanden sind und nicht, wie viele Anweisungen das größtmögliche Programm bilden können.
Brian Drummond

5
@BrianDrummond - mit dieser Interpretation ist die Frage jedoch nur dann sinnvoll, wenn Sie Annahmen über die Funktionsweise der ISA treffen, die nicht universell sind. ZB hat der Z80 einen 8-Bit-Datenbus, aber irgendwo in der Region von 800 verschiedenen gültigen Opcodes - weil er Präfixbytes verwendet, um die verfügbaren Operationen zu erweitern und zu variieren.
Jules

15
Die Frage, wie sie im Buch formuliert ist, ergibt keinen Sinn. Es gibt keine inhärente direkte Korrespondenz zwischen Busgröße und Opcode-Größe. Die JVM basiert auf einem 32-Bit-Datenmodell, verfügt jedoch über 8-Bit-Opcodes.
chrylis -on strike-

10
Diese Frage ist inkohärent, es sei denn, wir haben eine Menge Informationen, die über das in der Frage Gesagte hinausgehen. Wir müssten eine Menge Annahmen über die Eigenschaften des Prozesses treffen, um eine Antwort zu erhalten - Annahmen, die für die große Mehrheit der Prozessoren in der realen Welt nicht zutreffen!
David Schwartz

14
Die Frage ist Bullshit. Bei Bedarf kann ein Anweisungs-Opcode mehrere Speicherwörter umfassen. Es gibt keine inhärente Grenze.
Hot Licks

Antworten:


31

Alle Optionen sind falsch . Die maximale Anzahl (eindeutiger) Opcodes, die ein Prozessor ausführen kann, ist nicht durch die Busbreite begrenzt.


Normalerweise verfügt eine 12-Bit-CPU über einen Befehl pro Datenwort, sodass die meisten Anweisungen auf einmal gelesen werden können. So kann eine normale CPU auf ein Limit von 2 ^ 12 Opcodes ausgelegt werden.

Bestehende CPU-Architekturen mit mehr als 2 ^ 12 = 4096 Opcodes sind sehr selten, nur weil man selten so viele benötigt - zu viele zum Lernen, zu viele, um wirklich nützlich zu sein, zu viel verschwendeter, teurer Siliziumraum.

Update : Wie in den Kommentaren erwähnt, können alle möglichen Variationen des x86-Befehlssatzes tatsächlich mehr als 6000 betragen, je nachdem, wie Sie zählen! Dies ist jedoch eher eine Ausnahme.

Für eine 4-Bit-CPU reichen 2 ^ 4 = 16-Anweisungen jedoch oft nicht aus, sodass viele dieser Prozessoren über mehr verfügen.

Es gibt mehrere Möglichkeiten und Gründe, warum eine CPU möglicherweise mehr Operationscodes enthält, als in den Datenbus passen:

Wortübergreifende Anweisungen

Ein Prozessor muss in einem einzigen Datenzyklus keinen Befehl lesen - er kann mehrere Folgezyklen verwenden. Tatsächlich tun es die meisten CPUs nicht - obwohl es eher für Befehlsargumente als zum Erweitern des Opcode-Raums verwendet wird.

Beispiel: Intel 4004 hat nur 4 Leitungen, die als Daten- / Adressleitungen, 4-Bit-Datenwort, aber mehr als 40 Opcodes in 8-Bit-Befehlen gemultiplext werden.

Präfixe und Suffixe

Ein (CISC-) Prozessor kann so viele Befehlspräfixe und -suffixe haben, wie er benötigt.

Diese werden einer tatsächlichen Anweisung vorangestellt, um zu ändern, was sie tut - entweder ein wenig oder vollständig.

Dies hängt von Ihrer Definition des "eindeutigen Opcodes" ab. Wenn man annimmt, dass ein Teil eines Befehls, bei dem es sich nicht um Daten handelt, Teil des Opcodes ist, würde seine Gesamtzahl alle möglichen Variationen enthalten. Einige glauben jedoch, dass diese Anhänge unterschiedliche Teile des Unterrichts sind.

Beispiel: Intel x86-CPUs verfügen nicht über 4M-Opcodes. Wenn Sie jedoch alle Präfixe als Teil eines Opcodes zählen, lassen moderne CPUs Anweisungen mit einer Länge von bis zu 15 Byte zu - das sind VIELE mögliche Opcodes. Obwohl viele genau das Gleiche tun - das hängt von der Definition ab, dass sie "einzigartig" sind.

Modi

Ein Prozessor kann mehrere Betriebsmodi haben, in denen er einen völlig anderen Satz von Operationscodes haben kann.

Beispiele: Intel x86_64 verfügt über 32-Bit- (real / v86 / protected) und 64-Bit-Modi mit unterschiedlichen Opcodes. ARM-CPUs können ARM-32-Bit- und -Daumen-16-Bit-Modi haben.

Bus-Bit-Multiplexing

Die Fragen lauten "Datenleitungen" und "Adressleitungen", jedoch können sowohl der interne Datenbus als auch der interne Adressbus breiter sein als die Anzahl der tatsächlichen Busleitungen.

Die gemultiplexten Busdaten werden sequentiell gesendet, dh erste Hälfte, dann zweite Hälfte. Die CPU speichert es in internen Registern voller Größe und arbeitet mit diesen.

Dies geschieht häufig, um die Kosten und / oder die Größe des physischen Platzbedarfs des Chips zu reduzieren.

Beispiele hierfür sind Intel 4004, alles auf dem LPC-Datenbus und NEC VR4300, die Nintendo64-CPU, die nur einen 32-Zeilen-Datenbus hatte.

Kein Parallelbus

Als Fortsetzung des vorherigen Punkts muss eine CPU nicht einmal einen parallelen Bus freilegen.

Eine CPU kann auf einfache Weise nur einen sequentiellen Bus wie I2C, SPI usw. freigeben.

Es ist wahrscheinlich nicht sehr kosteneffektiv, eine solche dedizierte CPU herzustellen, aber viele Mikrocontroller mit geringer Pinanzahl (die sowohl CPU als auch Speicher umfassen) werden auf diese Weise hergestellt, um diese wertvollen Pins für etwas Nützlicheres zu speichern. Zum Beispiel hat atmel ATTINY4 / 5/6/10-Chips insgesamt nur 6 Pins, zwei für die Stromversorgung, einen für das Zurücksetzen und drei für allgemeine Zwecke. Die Anweisungen werden nacheinander über eine proprietäre 3-Zeilen-Schnittstelle gesendet.

Abhängig von Ihrer Definition eines Mikrocontrollers kann dieser als Mikroprozessor oder als Einsen-Prozessor programmiert werden (dh eine dedizierte CPU mit einem oder mehreren sequentiellen Bussen simulieren).

Diese Frage besagt eindeutig, dass eine Art Datenbus verfügbar ist, nicht jedoch, dass es sich um einen parallelen Bus handelt. In der Theorie des 12-line - Daten - Bus könnte aus einer einzigen seriellen Datenleitung und 11 auxilary / Boden / Statuszeilen , obwohl das wahrscheinlich nicht eine sehr vernünftige Idee wäre.

Spezieller Instruktionsbus

Tatsächlich muss ein Prozessor nicht einmal Anweisungen auf denselben Busleitungen wie Daten annehmen.

Dies könnte leicht der Fall sein, wenn ALUs eher diskrete Chips als ein Teil eines Mikroprozessors waren, aber derzeit die meiste Zeit nicht wirtschaftlich sind.

Nichts hindert Sie jedoch daran, eine CPU mit dedizierten Leitungen nur für Anweisungen zu implementieren. Eine solche CPU kann nützlich sein, wenn eine einzelne Operation an einem Array von Daten (SIMD) durchgeführt werden muss.

Da die Breite des Befehlsbusses völlig willkürlich ist, ist auch die Anzahl der Opcodes maximal möglich.


4
Abhängig davon, wen Sie fragen ( 1 , 2 , 3 ) , hat x86-64 zwischen 1000 und 6000 Opcodes .
LMS

Ich habe noch nie versucht, sie zu zählen, aber bei all den Variationen macht es Sinn.
Jack White

13

Die maximale Anzahl von Opcodes kann in der Tat auf verschiedene Arten betrachtet werden:

  • Die maximal mögliche Anzahl eindeutiger Opcodes.

Dies ergibt sich aus der Befehlsbreite und nicht aus der Datenbusbreite. Normalerweise passt ein Opcode in einen einzelnen Speicherzugriff, und dann lautet die Antwort 2 ^ 12. Ein Prozessor könnte jedoch einen Mehrzyklus-Opcode-Decodierungsprozess implementieren, um die Anzahl möglicher Opcodes über 2 ^ 12 hinaus zu erweitern.

  • Die maximale Anzahl von Befehlen (die Opcodes enthalten), die der Prozessor direkt adressieren kann.

Die maximale Anzahl von Befehlen (die Opcodes enthalten), die der Prozessor direkt adressieren kann, ist durch die Adressbusbreite (2 ^ 16) begrenzt. Indirekt könnte der Prozessor jedoch mehr Speicher adressieren, z. B. könnte ein Opcode einen Seitentausch oder eine ähnliche Operation zum Abrufen von Anweisungen von einer anderen Quelle erleichtern.


2
Die Frage ist nicht so vieldeutig. Wenn es als Ihr zweiter Punkt interpretiert werden sollte, wäre es als "die maximale Anzahl von Anweisungen , die gespeichert / adressiert / ... werden können" formuliert worden . Das Wort "Opcode" macht ziemlich deutlich, dass es sich um den Befehlssatz handelt, nicht um den adressierbaren Bereich.
Dim verlor das Vertrauen in SE

11
+1 für die Erwähnung, dass Op-Codes mit mehreren Wörtern durchaus möglich sind, daher ist die Frage nicht sehr gut.
Spehro Pefhany

2
Muttersprachler haben oft eine Tendenz, die es ihnen schwer macht, die bloße Bedeutung der von ihnen verwendeten Wörter zu verstehen. Wenn internationale englische Sprecher es lesen oder hören, erhalten sie möglicherweise nicht die zweite (beabsichtigte) Bedeutung. Das Gleiche gilt, wenn ein Schüler einen neuen Ausdruck lernt - wenn die Formulierungen nicht eindeutig sind, kann dies leicht missverstanden werden. Ich würde also vermuten, dass der Student gelernt hat, dass jede Anweisung einen Opcode-Teil enthält. Ja, das würde ich als wahr bezeichnen. Wirklich, der Wortlaut der Frage 01 ist nicht eindeutig.
HKOB

4
@SpehroPefhany Ja, die Frage ist ohne weiteren Kontext zweifellos mehrdeutig. Wenn dem OP beigebracht wurde, dass der Opcode unabhängig von der Befehlslänge beim ersten Speicherzugriff abgerufen wird, lautet die Antwort (c), andernfalls ist er nicht beantwortbar. Der Punkt ist, hat das OP in seiner EE.SE-Frage genügend Kontext angegeben, oder haben seine Lehrer etwas Selbstverständliches angegeben und eine mehrdeutige Frage formuliert?
Lorenzo Donati unterstützt Monica

1
@SpehroPefhany True :) Aber die Engländer - vielleicht zu ihrem leichten Ärger - sind auch Teil der internationalen englischen Welt ( bbc.com/capital/story/… )
HKOB

4

Sie haben Recht, von dieser Frage verwirrt zu sein - sie ist sehr schlecht geschrieben.

Ich vermute jedoch, dass die Absicht dieser Frage darin besteht, die Befehlswortgröße für die Maschine zu bestimmen. Angesichts der sehr unvollständigen Daten bereitgestellt, muss diese entsprechen der Breite der Daten - Bus; Die Breite des Adressbusses bestimmt die maximale Größe des Hauptspeichers.

In der Praxis ist das "Opcode" -Feld der Befehle einer bestimmten Maschine oft erheblich kleiner als der Befehl selbst, der Befehl kann jedoch breiter sein als der Datenbus.

Das alte Motorola 68008 ist ein gutes Beispiel - es war eine kostenreduzierte Version des 68000 mit einem 8-Bit-Datenbus, verwendete jedoch dieselben 16-Bit-Befehlswörter, bei denen normalerweise 7 Bit den Opcode (den Rest) bestimmen Identifizieren Sie die Quell- und Zielregister und den Adressierungsmodus (alle sollten als Operanden und nicht als Opcode betrachtet werden ). Wenn Sie die Adressierungsmodus-Bits in den Opcode einbeziehen, wie dies bei einigen der Fall ist, ergibt dies insgesamt ein 10-Bit-Opcode-Feld. Die tatsächlichen Anweisungen könnten in einigen Adressierungsmodi wesentlich länger sein.


"Der Rest identifiziert die Quell- und Zielregister und den Adressierungsmodus, die alle als Operanden und nicht als Opcode betrachtet werden sollten" ... nun, das ist eine Frage der Meinung. Für eine RISC-Architektur ist das eindeutig richtig, aber in vielen Fällen werden CISC-Architekturen so ad hoc definiert, dass es wahrscheinlich Sinn macht, jede Kombination als separaten Opcode zu zählen. Der Z80 ist ein typisches Beispiel - während viele seiner Befehle eine oder zwei Registerselektionen in den Bits des Opcodes codiert haben, sind die Adressierungsmodi vollständig ad-hoc und Präfixe ändern die Interpretation von ...
Jules

... in vielen Fällen sowohl Adressierungsmodus als auch Register, was die Interpretation der Register aus den Bitfeldern etwas unkomplizierter macht. Die meisten Dokumentationen und Assembler scheinen daher auf dem Verständnis zu arbeiten, dass jede Kombination von Befehlen und Registern ein separater Opcode ist und nur unmittelbare Werte und indirekte Adressoffsetwerte tatsächlich Operanden sind. Diese Weltanschauung wird von seinem Vorgänger Intel 8080 geteilt, bei dem das Standardassemblersprachenformat Register hatte, die von einem Befehl bearbeitet wurden, der als Teil der Mnemonik codiert und nicht als Argument angegeben wurde.
Jules

Richtig - der Z80 ist so typisch für 8-Bit-Mikroprozessoren. Der 6502 hatte eine logischere Opcode-Zuordnung, wodurch die Decodierschaltung optimiert werden konnte. Ich habe aber speziell über 68K gesprochen, das sehr unterschiedliche Adressierungsmodus- und Zielregisterfelder in seinen Anweisungen hat. Nach dem Subtrahieren dieser kann das Opcode-Feld immer noch breiter als der Datenbus des 68008 sein.
Chromatix

1

Edson DeCastro entwarf einen Computer, den PDP-8, mit 15 Adressen und 12 Datenleitungen.

Die Antwort auf die gestellte Frage lautet also 574 Op-Codes, da der PDP-8 284 Op-Codes hatte und Ed nur halb verrückt ist.


2
Ich bin nicht sicher, warum die Ablehnung - dies ist eine ebenso gute Antwort wie jede andere, da die Frage im Wesentlichen bedeutungslos ist. :)
Jules

Ich vermute, die Ablehnung ist, weil 284 * 2 = 568, nicht 574.
Mark
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.