Befehlssatz

Ein Befehlssatz oder Befehlssatz-Architektur (ISA), ist der Teil der Computerarchitektur, die mit der Programmierung, einschließlich der heimischen Datentypen, Instruktionen, Register verbunden ist, Weisen, Speicherarchitektur, Unterbrechung und das Ausnahme-Berühren und die Außeneingabe/Ausgabe richtend. Ein ISA schließt eine Spezifizierung des Satzes von opcodes (Maschinensprache), und die heimischen durch einen besonderen Verarbeiter durchgeführten Befehle ein.

Befehlssatz-Architektur ist von der Mikroarchitektur bemerkenswert, die der Satz von Verarbeiter-Designtechniken ist, die verwendet sind, um den Befehlssatz durchzuführen. Computer mit verschiedenen Mikroarchitekturen können einen allgemeinen Befehlssatz teilen. Zum Beispiel führen Intel Pentium und der AMD Athlon fast identische Versionen des x86 Befehlssatzes durch, aber haben radikal verschiedene innere Designs.

Einige virtuelle Maschinen, die bytecode für den Plausch, Java virtuelle Maschine und die Durchlaufzeit der Gemeinsamen Sprache des Microsofts virtuelle Maschine als ihr ISA unterstützen, führen es durch das Übersetzen des bytecode für allgemein verwendete Codepfade in den heimischen Maschinencode und die Durchführung weniger oft verwendeter Codepfade durch die Interpretation durch; Transmeta hat den x86 Befehlssatz oben auf VLIW Verarbeitern auf dieselbe Mode durchgeführt.

Klassifikation von Befehlssätzen

Ein komplizierter Befehlssatz-Computer (CISC) hat viele Spezialinstruktionen, die nur in praktischen Programmen selten verwendet werden können. Ein reduzierter Befehlssatz-Computer (RISC) vereinfacht den Verarbeiter, indem er nur Instruktionen durchgeführt wird, die oft in Programmen verwendet werden; ungewöhnliche Operationen werden als Unterprogramme durchgeführt, wo die Extraverarbeiter-Ausführungszeit durch ihren seltenen Gebrauch ausgeglichen wird. Theoretisch wichtige Typen sind der minimale Befehlssatz-Computer und ein Befehlssatz-Computer, aber diese werden in kommerziellen Verarbeitern nicht durchgeführt. Eine andere Schwankung ist das sehr lange Instruktionswort (VLIW), wo der Verarbeiter viele Instruktionen erhält, die verschlüsselt und in einem Instruktionswort wiederbekommen sind.

Maschinensprache

Maschinensprache wird aus getrennten Erklärungen oder Instruktionen aufgebaut. Auf der in einer Prozession gehenden Architektur kann eine gegebene Instruktion angeben:

  • Besondere Register für die Arithmetik, das Wenden oder die Kontrolle fungieren
  • Besondere Speicherpositionen oder Ausgleiche
  • Besondere Wenden-Weisen haben gepflegt, den operands zu interpretieren

Kompliziertere Operationen werden durch das Kombinieren dieser einfachen Instruktionen aufgebaut, die (in einer Architektur von von Neumann) folgend, oder wie sonst geleitet, durch Kontrollfluss-Instruktionen durchgeführt werden.

Instruktionstypen

Einige in den meisten Befehlssätzen verfügbare Operationen schließen ein:

  • Das Datenberühren und die Speicheroperationen
  • setzen Sie ein Register (eine vorläufige "Notizblock"-Position in der Zentraleinheit selbst) zu einem festen unveränderlichen Wert
  • bewegen Sie Daten von einer Speicherposition bis ein Register, oder umgekehrt. Das wird getan, um die Daten zu erhalten, um eine Berechnung darauf später durchzuführen, oder das Ergebnis einer Berechnung zu versorgen.
  • lesen Sie und schreiben Sie Daten von Hardware-Geräten
  • Arithmetik und Logik
  • fügen Sie hinzu, ziehen Sie ab, multiplizieren Sie, oder teilen Sie die Werte von zwei Registern, das Ergebnis in ein Register legend, vielleicht einen oder mehr Bedingungscodes in einem Statusregister setzend
  • führen Sie bitwise Operationen durch, die Verbindung und Trennung von entsprechenden Bit in einem Paar von Registern oder der Ablehnung jedes Bit in einem Register nehmend
  • vergleichen Sie zwei Werte in Registern (zum Beispiel, um zu sehen, ob man weniger ist, oder wenn sie gleich sind)
  • Kontrollfluss
  • der Zweig zu einer anderen Position im Programm und führt Instruktionen dort durch
  • bedingt der Zweig zu einer anderen Position, wenn eine bestimmte Bedingung hält
  • indirekt Zweig zu einer anderen Position, während man die Position der folgenden Instruktion als ein Punkt spart, um zu (ein Anruf) zurückzukehren

Komplizierte Instruktionen

Einige Computer schließen "komplizierte" Instruktionen in ihren Befehlssatz ein. Eine einzelne "komplizierte" Instruktion tut etwas, was viele Instruktionen auf anderen Computern nehmen kann. Für solche Instruktionen wird durch Instruktionen typisch gewesen, die vielfache Schritte machen, vielfache funktionelle Einheiten kontrollieren, oder sonst auf einer größeren Skala erscheinen als der Hauptteil von einfachen durch den gegebenen Verarbeiter durchgeführten Instruktionen. Einige Beispiele von "komplizierten" Instruktionen schließen ein:

  • das Sparen vieler Register auf dem Stapel sofort
  • das Bewegen großer Blöcke des Gedächtnisses
  • Komplex und/oder Fließkommaarithmetik (Sinus, Kosinus, Quadratwurzel, usw.)
  • das Durchführen einer Atominstruktion des Tests-Und-Satzes
  • Instruktionen, die ALU mit einem operand auswendig aber nicht einem Register verbinden

Ein komplizierter Instruktionstyp, der besonders populär kürzlich geworden ist, ist der SIMD oder die Strom-Strom-Operation der Vielfachen Daten der Einzelnen Instruktion oder die Vektor-Instruktion, eine Operation, die dieselbe arithmetische Operation auf vielfachen Stücken von Daten zur gleichen Zeit durchführt. SIMD sind in der Lage, große Vektoren und matrices in der minimalen Zeit zu manipulieren. SIMD Instruktionen erlauben leichten parallelization von Algorithmen, die allgemein am Ton, dem Image und der Videoverarbeitung beteiligt sind. Verschiedene SIMD Durchführungen sind gebracht worden, um unter Handelsnamen wie MMX, 3DNow einzukaufen! und AltiVec.

Spezialverarbeiter-Typen wie GPUs stellen zum Beispiel auch komplizierte Befehlssätze zur Verfügung. Dennoch haben viele dieser Spezialverarbeiter-Komplex-Befehlssätze keinen öffentlich verfügbaren heimischen Befehlssatz, und die heimische Zusammenbau-Sprache für die Eigentumshardware hat Gründe verbunden und ist gewöhnlich nur für Softwareentwickler durch standardisierte höhere Niveau-Sprachen und APIs zugänglich. OpenGL virtueller Befehlssatz und virtuelle Zusammenbau-Sprache ARB (GPU Zusammenbau-Sprache) und CUDA sind Beispiele solcher Hardware-Abstraktionsschichten oben auf dem Spezialverarbeiter-Eingeborener-Befehlssatz.

Teile einer Instruktion

Auf traditionellen Architekturen schließt eine Instruktion einen opcode das Spezifizieren der Operation ein, die, solcher als durchzuführen ist, "fügen Sie Inhalt des Gedächtnisses zum Register", und Null oder mehr operand specifiers hinzu, der Register, Speicherpositionen oder wörtliche Daten angeben kann. Der operand specifiers kann Wenden-Weisen haben, die ihre Bedeutung bestimmen, oder kann in festen Feldern sein.

In Architekturen des sehr langen Instruktionswortes (VLIW), die viele Mikrocodearchitekturen einschließen, werden vielfacher gleichzeitiger opcodes und operands in einer einzelnen Instruktion angegeben.

Einige exotische Befehlssätze haben kein opcode Feld (wie Transport Triggered Architectures (TTA) oder die Hervor virtuelle Maschine), nur operand (s).

Andere ungewöhnliche "0-operand" Befehlssätze haben an jedem operand specifier Felder, wie einige Stapel-Maschinen einschließlich NOSC http://strangegizmo.com/forth/NOSC/Mangel.

Instruktionslänge

Die Größe oder Länge einer Instruktion ändern sich weit von nur vier Bit in einigen Mikrokontrolleuren zu vielen hundert von Bit in einigen VLIW Systemen. Verarbeiter, die in Personalcomputern, Großrechnern und Supercomputern verwendet sind, haben Instruktionsgrößen zwischen 8 und 64 Bit. Die längstmögliche Instruktion auf x86 ist 18 Bytes (144 Bit). Innerhalb eines Befehlssatzes können verschiedene Instruktionen verschiedene Längen haben. In einigen Architekturen, namentlich die meisten reduzierten Befehlssatz-Computer (RISC), sind Instruktionen eine feste Länge, die mit der Wortgröße dieser Architektur normalerweise entsprechend ist. In anderen Architekturen haben Instruktionen variable Länge, normalerweise integrierte Vielfachen eines Bytes oder eines Halbwortes.

Darstellung

Die Instruktionen, die ein Programm einsetzen, werden mit ihrer inneren, numerischen Form selten angegeben; sie können von Programmierern angegeben werden, die eine Zusammenbau-Sprache oder allgemeiner verwenden, können durch Bearbeiter erzeugt werden.

Design

Das Design von Befehlssätzen ist ein kompliziertes Problem. Es gab zwei Stufen in der Geschichte für den Mikroprozessor. Das erste war der CISC (Komplizierter Befehlssatz-Computer), der viele verschiedene Instruktionen hatte. In den 1970er Jahren, jedoch, haben Plätze wie IBM wirklich erforscht und haben gefunden, dass viele Instruktionen im Satz beseitigt werden konnten. Das Ergebnis war der RISC (Reduzierter Befehlssatz-Computer), eine Architektur, die einen kleineren Satz von Instruktionen verwendet. Ein einfacherer Befehlssatz kann das Potenzial für höhere Geschwindigkeiten, reduzierte Verarbeiter-Größe und reduzierten Macht-Verbrauch anbieten. Jedoch kann ein komplizierterer Satz allgemeine Operationen optimieren, Leistungsfähigkeit des Gedächtnisses/geheimen Lagers verbessern, oder Programmierung vereinfachen.

Einige Befehlssatz-Entwerfer bestellen einen oder mehr opcodes für eine Art Systemanruf oder Softwareunterbrechung Zum Beispiel, MOS Technologie 6502 Gebrauch 00 vor, Zilog Z80 verwendet die acht Codes C7, Kalifornien, D7, DF, E7, EF, F7, FF während Motorola 68000 Gebrauch-Codes in der Reihe A000.. AFFF.

Schnell sind virtuelle Maschinen viel leichter durchzuführen, wenn ein Befehlssatz den entspricht

Popek und Virtualisierungsvoraussetzungen von Goldberg.

Das NOP-Gleiten hat in der Immunität verwendet, die Bewusste Programmierung viel leichter ist durchzuführen, wenn der "unprogrammierte" Staat des Gedächtnisses als ein NOP interpretiert wird.

Auf Systemen mit vielfachen Verarbeitern sind blockierungsfreie Synchronisationsalgorithmen viel leichter durchzuführen, wenn der Befehlssatz Unterstützung für etwas solcher einschließt, weil sich "herbeiholen-und-hinzufügen", "load-link/store-conditional" (LL/SC), oder "atomar vergleichen und tauschen".

Befehlssatz-Durchführung

Jeder gegebene Befehlssatz kann in einer Vielfalt von Wegen durchgeführt werden.

Alle Weisen, einen Befehlssatz durchzuführen, geben dasselbe Programmiermodell, und sie alle sind im Stande, denselben binären executables zu führen.

Die verschiedenen Weisen, einen Befehlssatz durchzuführen, geben verschiedene Umtausche zwischen Kosten, Leistung, Macht-Verbrauch, Größe usw.

Wenn

sie die Mikroarchitektur eines Verarbeiters entwerfen, verwenden Ingenieure Blöcke "des festverdrahteten" elektronischen Schaltsystemes (häufig entworfen getrennt) wie Vipern, multiplexers, Schalter, Register, ALUs usw. Eine Art Register-Übertragungssprache wird dann häufig verwendet, um die Entzifferung und sequencing jeder Instruktion eines ISA zu beschreiben, der diese physische Mikroarchitektur verwendet.

Es gibt zwei grundlegende Weisen, eine Kontrolleinheit zu bauen, um diese Beschreibung durchzuführen (obwohl viele Designs mittlere Wege oder Kompromisse verwenden):

  1. Frühe Computerdesigns und einige der einfacheren RISC Computer "festverdrahtet" die ganze Befehlssatz-Entzifferung und sequencing (gerade wie der Rest der Mikroarchitektur).
  2. Andere Designs verwenden Mikrocoderoutinen und/oder Tische, um das normalerweise als auf dem Span ROMs und/oder PLAs zu tun (obwohl getrennter RAM historisch verwendet worden ist).

Es gibt auch einige neue Zentraleinheitsdesigns, die den Befehlssatz zu einem writable RAM oder Blitz innerhalb der Zentraleinheit (wie der Verarbeiter von Rekursiv und Imsys Cjip), oder ein FPGA (wiederkonfigurierbare Computerwissenschaft) kompilieren. Der Westliche Digitale MCP-1600 ist ein älteres Beispiel mit einem hingebungsvollen, getrennten ROM für den Mikrocode.

Mit einem ISA kann auch in der Software von einem Dolmetscher wettgeeifert werden. Natürlich, wegen der Interpretation oben, ist das langsamer als direkt laufende Programme auf der wettgeeiferten Hardware, wenn die Hardware, die den Emulator führt, keine Größenordnung schneller ist. Heute ist es übliche Praxis für Verkäufer von neuem ISAs oder Mikroarchitekturen, um Softwareemulatoren Softwareentwicklern bereitzustellen, bevor die Hardware-Durchführung bereit ist.

Häufig haben die Details der Durchführung einen starken Einfluss auf die besonderen für den Befehlssatz ausgewählten Instruktionen. Zum Beispiel erlauben viele Durchführungen der Instruktionsrohrleitung nur eine einzelne Speicherlast oder Speicherlager pro Instruktion, zu einer Lastladen-Architektur (RISC) führend. Für ein anderes Beispiel haben einige frühe Weisen, die Instruktionsrohrleitung durchzuführen, zu einem Verzögerungsablagefach geführt.

Die Anforderungen der Hochleistungsdigitalsignalverarbeitung haben in der entgegengesetzten Richtung — das Zwingen von Instruktionen gestoßen, auf eine besondere Weise durchgeführt zu werden. Zum Beispiel, um Digitalfilter schnell genug durchzuführen, muss die MAC Instruktion in einem typischen Digitalsignalverarbeiter (DSP) mit einer Art Architektur von Harvard durchgeführt werden, die eine Instruktion und zwei Datenwörter gleichzeitig herbeiholen kann, und es verlangt, dass ein einzelner Zyklus multipliziert - sammeln Vermehrer an.

Codedichte

In frühen Computern, Programm-Gedächtnis war teuer, die Größe eines Programms so minimierend, um sicherzustellen, dass es das beschränkte Gedächtnis einfügen würde, war häufig zentral. So musste die vereinigte Größe aller Instruktionen eine besondere Aufgabe, die Codedichte durchführen, war eine wichtige Eigenschaft jedes Befehlssatzes. Computer mit der hohen Codedichte hatten auch häufig (und haben Sie noch) komplizierte Instruktionen für den Verfahren-Zugang, parametrisierten Umsatz, Schleifen usw. (deshalb rückwirkend genannt Komplizierte Befehlssatz-Computer, CISC). Jedoch verbinden "CISC" typischere oder häufige, Instruktionen bloß eine grundlegende ALU Operation, solche, die, mit dem Zugang von einem oder mehr operands im Gedächtnis "beitragen" (das Wenden von Weisen solcher als direkt, indirekt, mit einem Inhaltsverzeichnis versehen usw. verwendend) . Bestimmte Architekturen können zwei oder drei operands (einschließlich des Ergebnisses) direkt im Gedächtnis erlauben oder können im Stande sein, Funktionen wie automatische Zeigestock-Zunahme usw. durchzuführen. Softwaredurchgeführte Befehlssätze können noch kompliziertere und starke Instruktionen haben.

Reduzierte Befehlssatz-Computer, RISC, wurden zuerst während einer Periode schnell wachsender Speichersubsysteme und Opfer-Codedichte weit durchgeführt, um Durchführungsschaltsystem zu vereinfachen und dadurch zu versuchen, Leistung über höhere Uhr-Frequenzen und mehr Register zu vergrößern. RISC Instruktionen führen normalerweise nur eine einzelne Operation, wie ein "Hinzufügen" von Registern oder einer "Last" von einer Speicherposition in ein Register durch; sie verwenden auch normalerweise eine feste Instruktionsbreite, wohingegen ein typischer CISC Befehlssatz viele Instruktionen kürzer hat als diese feste Länge. Instruktionen der festen Breite sind weniger kompliziert, um zu behandeln, als Instruktionen der variablen Breite aus mehreren Gründen (nicht die Notwendigkeit habend zu überprüfen, ob eine Instruktion auf einer Linie des geheimen Lagers oder virtueller Speicherseitengrenze zum Beispiel rittlings sitzt), und deshalb etwas leichter sind, für die Geschwindigkeit zu optimieren. Jedoch, weil RISC Computer normalerweise mehr und häufig längere Instruktionen verlangen, eine gegebene Aufgabe durchzuführen, machen sie von Natur aus weniger optimalen Gebrauch der Busbandbreite und Erinnerungen des geheimen Lagers.

Minimale Befehlssatz-Computer (MISC) sind eine Form der Stapel-Maschine, wo es wenige getrennte Instruktionen (16-64) gibt, so dass vielfache Instruktionen sein können, bauen ein einzelnes Maschinenwort ein. Ähnliche Kerne bringen häufig wenig Silikon, um durchzuführen, so können sie in einem FPGA oder in einer Mehrkernform leicht begriffen werden. Codedichte ist RISC ähnlich; die vergrößerte Instruktionsdichte wird durch das Verlangen von mehr von den primitiven Instruktionen ausgeglichen, eine Aufgabe zu erledigen.

Es hat Forschung in die rechtskräftige Kompression als ein Mechanismus gegeben, um Codedichte zu verbessern. Die Mathematik der Kompliziertheit von Kolmogorov beschreibt die Herausforderungen und Grenzen davon.

Zahl von operands

Befehlssätze können durch die maximale Zahl von in Instruktionen ausführlich angegebenem operands kategorisiert werden.

(In den Beispielen, die folgen, sind a, b, und c (direkt oder berechnet) Adressen, die sich auf Speicherzellen beziehen, während sich reg1 und so weiter auf Maschinenregister beziehen.)

  • 0-operand (Nulladresse-Maschinen), so genannte Stapel-Maschinen: Alle arithmetischen Operationen finden mit den einem erst oder zwei Positionen auf dem Stapel statt; 1-operand Stoß und Knall-Instruktionen sind an das Zugriffsgedächtnis gewöhnt: Stoßen Sie a, stoßen Sie b, fügen Sie hinzu, lassen Sie c knallen.
  • 1-operand (Ein-Adresse-Maschinen), so genannte Akkumulator-Maschinen, schließen frühe Computer und viele kleine Mikrokontrolleure ein: Die meisten Instruktionen geben ein einzelnes Recht operand (d. h. unveränderlich, ein Register oder eine Speicherposition) mit dem impliziten Akkumulator als der linke operand an (und der Bestimmungsort, wenn es ein gibt): Laden Sie a, fügen Sie b hinzu, versorgen Sie c. Eine zusammenhängende Klasse ist praktische Stapel-Maschinen, die häufig einen einzelnen ausführlichen operand in arithmetischen Instruktionen erlauben: Stoßen Sie a, fügen Sie b hinzu, lassen Sie c knallen.
  • 2-operand — fallen viele CISC und RISC Maschinen unter dieser Kategorie:
  • CISC — laden häufig a, reg1; fügen Sie reg1, b hinzu; versorgen Sie reg1, c auf Maschinen, die auf ein Gedächtnis operand pro Instruktion beschränkt werden; das kann Last und Laden an derselben Position sein
  • CISC — bewegen a-> c; fügen Sie c + = b hinzu.
  • RISC — das Verlangen ausführlicher Speicherlasten, die Instruktionen würden sein: Laden Sie a, reg1; laden Sie b, reg2; fügen Sie reg1, reg2 hinzu; versorgen Sie reg2, c
  • 3-operand, erlaubender besserer Wiedergebrauch von data:.
  • CISC — Es wird irgendein eine einzelne Instruktion: Fügen Sie a, b, c, oder mehr normalerweise hinzu: Bewegen Sie a, reg1; fügen Sie reg1, b, c hinzu, weil die meisten Maschinen auf zwei Gedächtnis operands beschränkt werden.
  • RISC — arithmetischer Instruktionsgebrauch schreibt sich nur ein, so sind ausführliche 2-operand Instruktionen der Last/Ladens erforderlich: Laden Sie a, reg1; laden Sie b, reg2; fügen Sie reg1+reg2-> reg3 hinzu; versorgen Sie reg3, c; verschieden vom 2-operand oder 1-operand verlässt das alle drei Werte a, b, und c in für den weiteren Wiedergebrauch verfügbaren Registern.
  • mehr operands — einige CISC Maschinen erlauben eine Vielfalt, Weisen zu richten, die mehr als 3 operands (Register oder Speicherzugänge), wie der VAX "POLY" polynomische Einschätzungsinstruktion erlauben.

Wegen der Vielzahl von Bit musste die drei Register einer 3-operand Instruktion verschlüsseln, RISC Verarbeiter mit 16-Bit-Instruktionen sind unveränderlich 2-operand Maschinen, wie der Atmel AVR, der TI MSP430, und einige Versionen des ARM-Daumens.

RISC Verarbeiter mit 32-Bit-Instruktionen sind gewöhnlich 3-operand Maschinen wie Verarbeiter, die die Macht-Architektur, die SPARC Architektur, die MIPS Architektur, die ARM-Architektur und die AVR32 Architektur durchführen.

Jede Instruktion gibt eine Zahl von operands (Register, Speicherpositionen oder unmittelbare Werte) ausführlich an. Einige Instruktionen geben ein oder beide operands implizit, solcher als, indem sie oben auf dem Stapel oder in einem impliziten Register versorgt wird. Wenn einige der operands implizit gegeben werden, ist die Zahl von angegebenem operands in einer Instruktion kleiner als der arity der Operation. Wenn ein "Bestimmungsort operand" ausführlich den Bestimmungsort angibt, ist die Zahl von operand specifiers in einer Instruktion größer als der arity der Operation. Einige Befehlssätze haben verschiedene Zahlen von operands für verschiedene Instruktionen.

Siehe auch

Kategorien von ISA

Links


Source is a modification of the Wikipedia article Instruction set, licensed under CC-BY-SA. Full list of contributors here.
TTL / Maclisp
Impressum & Datenschutz