Maschinencode

Maschinencode oder Maschinensprache sind ein System von impartible Instruktionen durchgeführt direkt durch eine in einer Prozession gehende Haupteinheit (CPU) eines Computers. Jede Instruktion führt eine sehr spezifische Aufgabe, normalerweise entweder eine Operation auf einer Einheit von Daten durch (in einem Register oder im Gedächtnis, tragen Sie z.B bei oder bewegen Sie sich), oder eine Sprung-Operation (entscheidend, den Instruktion als nächstes, häufig bedingt durch die Ergebnisse einer vorherigen Instruktion durchführt). Jedes rechtskräftige Programm wird aus einer Reihe dieser Atominstruktionen zusammengesetzt. Maschinencode kann als eine äußerst von der Hardware abhängige Programmiersprache oder als die Tiefststand-Darstellung eines kompilierten und/oder gesammelten Computerprogramms betrachtet werden. Während es möglich ist, Programme im Maschinencode wegen der langweiligen Schwierigkeit zu schreiben, Zentraleinheitsmittel zu führen, wird es mehr abgesehen von Situationen selten getan, die die am meisten äußerste Optimierung verlangen.

Fast alle rechtskräftigen Programme werden auf Sprachen des höheren Niveaus geschrieben, und zum rechtskräftigen Maschinencode durch einen Bearbeiter und linker übersetzt. Maschinencode wird manchmal heimischen Code genannt, wenn man sich auf von der Plattform abhängige Teile von Spracheigenschaften oder Bibliotheken bezieht.

Programme auf interpretierten Sprachen werden durch den Maschinencode nicht vertreten; jedoch ist ihr Dolmetscher (der als ein Verarbeiter gesehen werden kann, der das Programm des höheren Niveaus durchführt) häufig. Maschinencode sollte mit so genanntem "bytecode" nicht verwirrt sein, der von einem Dolmetscher durchgeführt wird.

Maschinencodeinstruktionen

Jede Verarbeiter- oder Verarbeiter-Familie hat seinen eigenen Maschinencodebefehlssatz. Instruktionen sind Muster von Bit, die durch das physische Design verschiedenen Befehlen zur Maschine entsprechen. Der Befehlssatz ist so zu einer Klasse von Verarbeitern mit (viel) dieselbe Architektur spezifisch. Nachfolger oder abgeleitete Verarbeiter-Designs schließen häufig alle Instruktionen eines Vorgängers ein und können zusätzliche Instruktionen hinzufügen. Gelegentlich wird ein Nachfolger-Design unterbrechen oder die Bedeutung von einem Instruktionscode verändern (normalerweise, weil es zu neuen Zwecken erforderlich ist), Codevereinbarkeit einigermaßen betreffend; sogar fast völlig vereinbare Verarbeiter können ein bisschen verschiedenes Verhalten für einige Instruktionen zeigen, aber das ist selten ein Problem. Systeme können sich auch in anderen Details, wie Speichereinordnung, Betriebssysteme oder peripherische Geräte unterscheiden. Weil sich ein Programm normalerweise auf solche Faktoren verlässt, werden verschiedene Systeme normalerweise denselben Maschinencode nicht führen, selbst wenn derselbe Typ des Verarbeiters verwendet wird.

Ein Maschinencodebefehlssatz kann alle Instruktionen derselben Länge haben, oder es kann Instruktionen der variablen Länge haben. Wie die Muster organisiert werden, ändert sich stark mit der besonderen Architektur und häufig auch mit dem Typ der Instruktion. Die meisten Instruktionen haben ein oder mehr opcode Felder, der den Grundbefehl-Typ (wie Arithmetik, logisch, Sprung, usw.) und die wirkliche Operation angibt (solche, die beitragen oder sich vergleichen), und andere Felder, die den Typ des operand (s), die Wenden-Weise (N) geben können, der Wenden-Ausgleich (E) oder Index oder der Ist-Wert selbst (werden solche unveränderlichen in einer Instruktion enthaltenen operands immediates genannt).

Programme

Ein Computerprogramm ist eine Folge von Instruktionen, die durch eine Zentraleinheit durchgeführt werden. Während einfache Verarbeiter Instruktionen nacheinander durchführen, sind Superskalarverarbeiter dazu fähig, mehrere Instruktionen sofort durchzuführen.

Programm-Fluss kann unter Einfluss spezieller 'Sprung'-Instruktionen dass Übertragungsausführung zu einer Instruktion außer numerisch im Anschluss an eine sein. Bedingte Sprünge werden genommen (Ausführung geht an einer anderen Adresse weiter), oder nicht (geht Ausführung an der folgenden Instruktion weiter) abhängig von etwas Bedingung.

Zusammenbau-Sprachen

Eine viel lesbarere Interpretation der Maschinensprache, genannt Zusammenbau-Sprache, verwendet mnemonische Codes, um sich auf Maschinencodeinstruktionen zu beziehen, anstatt die numerischen Werte der Instruktionen direkt zu verwenden. Zum Beispiel, auf dem Verarbeiter von Zilog Z80, würde der Maschinencode, der die Zentraleinheit zur Verminderung das Verarbeiter-Register verursacht, auf der Zusammenbau-Sprache als vertreten.

Beispiel

Die MIPS Architektur stellt ein spezifisches Beispiel für einen Maschinencode zur Verfügung, dessen Instruktionen immer 32 Bit lang sind. Der allgemeine Typ der Instruktion wird durch den op (Operation) Feld, die höchsten 6 Bit gegeben. J-Typ (Sprung) und I-Typ (unmittelbare) Instruktionen wird durch op völlig angegeben. R-Typ (Register) Instruktionen schließt ein zusätzliches Feld funct ein, um die genaue Operation zu bestimmen. Die in diesen Typen verwendeten Felder sind:

6 5 5 5 5 6 Bit

[op | rs | rt | Rd |shamt | funct] R-Typ

[op | rs | rt | Adresse / unmittelbar] I-Typ

[op | nehmen Adresse] J-Typ ins Visier

rs, rt, und Rd zeigen Register operands an; shamt gibt einen Verschiebungsbetrag; und die Adresse oder unmittelbaren Felder enthalten einen operand direkt.

Zum Beispiel werden das Hinzufügen der Register 1 und 2 und das Stellen des Ergebnisses im Register 6 verschlüsselt:

[op | rs | rt | Rd |shamt | funct]

0 1 2 6 0 32 Dezimalzahl

000000 00001 00010 00110 00000 100000 binäre

Laden Sie einen Wert ins Register 8, genommen von der Speicherzelle 68 Zellen, nachdem die Position im Register 3 Schlagseite gehabt hat:

[op | rs | rt | Adresse / unmittelbar]

35 3 8 68 Dezimalzahl

100011 00011 01000 00000 00001 000100 binäre

Das Springen zur Adresse 1024:

[op | nehmen Adresse] ins Visier

2 1024 Dezimalzahl

000010 00000 00000 00000 10000 000000 binärer

Beziehung zum Mikrocode

In einigen Computerarchitekturen wird der Maschinencode durch eine grundsätzlichere zu Grunde liegende Schicht von Programmen genannt Mikroprogramme durchgeführt, eine allgemeine Maschinensprachschnittstelle über eine Linie oder Familie von verschiedenen Modellen des Computers mit weit verschiedenem zu Grunde liegendem dataflows zur Verfügung stellend. Das wird getan, um Halten nach Backbord von Maschinensprachprogrammen zwischen verschiedenen Modellen zu erleichtern. Ein Beispiel dieses Gebrauches ist die Familie von IBM System/360 von Computern und ihren Nachfolgern. Mit dataflow Pfad-Breiten von 8 Bit bis 64 Bit und darüber hinaus präsentieren sie dennoch eine allgemeine Architektur an der Maschinensprachebene über die komplette Linie.

Das Verwenden einer Mikrocodeschicht, um einen Emulator durchzuführen, ermöglicht dem Computer, die Architektur eines völlig verschiedenen Computers zu präsentieren. Die Linie des Systems/360 hat das verwendet, um zu erlauben, Programme von früheren Maschinen von IBM bis die neue Familie von Computern, z.B ein Emulator von IBM 1401/1440/1460 auf dem Modell 40 von IBM S/360 zu tragen.

Speicherung im Gedächtnis

Die Architektur von Harvard ist eine Computerarchitektur mit der physisch getrennten Lagerung und den Signalpfaden für den Code (Instruktionen) und Daten. Heute führen die meisten Verarbeiter solche getrennten Signalpfade aus Leistungsgründen durch, aber führen wirklich eine Modifizierte Architektur von Harvard durch, so können sie Aufgaben wie das Laden eines rechtskräftigen Programms von der Plattenlagerung als Daten und dann Durchführung davon unterstützen. Architektur von Harvard wird zur Architektur von Von Neumann gegenübergestellt, wo Daten und Code in demselben Gedächtnis versorgt werden.

Aus dem Gesichtswinkel von einem Prozess ist der Coderaum der Teil seines Adressraums, wo der Code in der Ausführung versorgt wird. Im Mehrbeschäftigen von Systemen umfasst das das Codesegment des Programms und gewöhnlich geteilte Bibliotheken. In der Nebenläufigkeitsumgebung codieren verschiedene Fäden eines Prozess-Anteils Raum zusammen mit dem Datenraum, der die Gemeinkosten des Zusammenhangs reduziert, der, beträchtlich wie verglichen, umschaltet, um Schaltung zu bearbeiten.

Lesbarkeit durch Menschen

Es ist gesagt worden, dass Maschinencode so unlesbar ist, dass sich das USA-Urheberrechtsbüro nicht sogar identifizieren kann, ob ein besonderes verschlüsseltes Programm eine ursprüngliche Arbeit der Autorschaft ist. Hofstadter vergleicht Maschinencode mit dem genetischen Code: "Das Schauen an einem auf der Maschinensprache geschriebenen Programm ist mit dem Schauen an einem DNA-Molekül-Atom durch das Atom vage vergleichbar."

Siehe auch

Weiterführende Literatur

Zeichen und Verweisungen


MIPS Technologies / Instruktionen pro Sekunde
Impressum & Datenschutz