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?
microprocessor
Chiduruppula Sharath Kumar
quelle
quelle
Antworten:
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.
quelle
Die maximale Anzahl von Opcodes kann in der Tat auf verschiedene Arten betrachtet werden:
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, 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.
quelle
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.
quelle
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.
quelle