www.wikidata.de-de.nina.az
Maschinenprogramm ist eine Weiterleitung auf diesen Artikel Dessen im Detail abweichende Bedeutung wird unten ebenfalls behandelt Eine Maschinensprache wie sie bei Maschinencode bzw nativem Code verwendet wird ist eine Programmiersprache bei der die Instruktionen die vom Prozessor ausgefuhrt werden sollen als formale Sprachelemente festgelegt sind Aufgrund ihrer Nahe zur Hardware wird sie auch verallgemeinernd als die Programmiersprache eines Computers bezeichnet 1 Umfang und Syntax der Maschinenbefehle sind im Befehlssatz definiert und abhangig vom Prozessortyp Maschinensprache wird meistens als Binarcode oder vereinfacht mithilfe von Hexadezimalzahlen dargestellt Ein Maschinenbefehl ist hierbei eine Anweisung an den Prozessor eine Operation durchzufuhren beispielsweise eine Addition oder einen Wertevergleich Jede funktionelle Leistung eines Prozessors ist daher Ergebnis der Ausfuhrung von Maschinencode eines in Maschinensprache vorliegenden Programms Programme in Maschinensprache werden ublicherweise nicht vom Programmierer direkt erzeugt sondern unter Nutzung einer hoheren Programmiersprache oder einer Assemblersprache wobei erst mithilfe eines Compilers bzw Assemblers ausfuhrbarer Maschinencode entsteht Wird von Programmierung in Maschinensprache gesprochen ist damit manchmal falschlicherweise die Programmierung in Assemblersprache gemeint Bei der Ausfuhrung durch Interpreter werden dagegen die Maschinenbefehle beim Programmstart oder wahrend der Laufzeit erzeugt Manchmal werden Ausdrucke wie Maschinencode Maschinensprache Binarcode nativer Code Programmcode synonym verwendet 2 Sie konnen jedoch zwei unterschiedliche Bedeutungen haben Typisierende Bezeichnung des verwendeten Codes als Syntaxbestimmung Beispiel Interner Binarcode in dem die Daten in einer Zentraleinheit dargestellt werden Die fur ein bestimmtes Programm vorliegenden Anweisungen Beispiel Binarcode fur Programm ABC der vom Computer direkt ausgefuhrt werden kann Inhaltsverzeichnis 1 Maschinenprogramm 2 Unterschiede zur Assemblersprache 3 Programmerstellung 4 Beispiel 4 1 Programmiersprache C 4 2 Maschinencode bei IBM Rechnern am Beispiel von OS 390 5 Uberblick uber die typische Funktionalitat einer Maschinensprache 5 1 Befehlsvorrat 5 2 Kategorisierung der Befehle 6 Literatur 7 Weblinks 8 EinzelnachweiseMaschinenprogramm Bearbeiten nbsp Maschinenprogramm Begriffszusammenhange und im Sprachgebrauch auftretende SynonymeMaschinenprogramme finden in allen Geraten mit einem Prozessor Verwendung also von Grossrechnern uber Personal Computer und Smartphones bis hin zu eingebetteten embedded Systemen in modernen Waschmaschinen Radios oder Steuerungen im Kraftfahrzeug fur ABS oder Airbag Bei PCs sind sie ublicherweise in ausfuhrbaren Dateien enthalten Ausfuhrbare Dateien findet man bei Windows in Dateien unter der Dateinamenserweiterung exe Unter vielen anderen Betriebssystemen werden ausfuhrbare Dateien auch ohne Dateiendung und in anderen Formaten gefuhrt Sie werden teils anders bezeichnet z B unter z OS als Lademodul Bei vielen eingebetteten Systemen oder Mikrocontrollern befinden sich bestimmte Maschinenprogramme permanent im ROM z B ein Bootloader Maschinenprogramme konnen von Menschen mithilfe eines Hex Editors oder eines Maschinencode Monitors betrachtet prinzipiell auch erstellt und verandert werden In der Praxis erfolgt die Herstellung eines Maschinenprogrammes jedoch mithilfe eines Assemblers oder Compilers unter Verwendung von Quelltext der jeweiligen Programmiersprache Maschinencode kann durch einen Disassembler wieder in Assemblerformat ruckubersetzt werden die Umwandlung in eine hohere Programmiersprache durch einen Decompiler unterliegt jedoch starken Einschrankungen Unterschiede zur Assemblersprache BearbeitenDas Programm im Maschinencode besteht aus einer Folge von Bytes die sowohl Befehle als auch Daten reprasentieren Da dieser Code fur den Menschen schwer lesbar ist werden in der Assemblersprache die Befehle durch besser verstandliche Abkurzungen sogenannte Mnemonics dargestellt Dabei konnen der Operationscode Quell und Zielfelder sowie andere Angaben in den Befehlen mit symbolischen Bezeichnern wie MOVE PLZ LAENGE notiert werden ggf erganzt um numerische Zahlenwerte z B fur eine individuelle Langenangabe Registernummern usw Dateiformat Ein Assemblerprogramm liegt wie bei Quelltexten ublich meist als Textdatei vor wahrend das Maschinenprogramm in der Regel als Binardatei gespeichert ist Anweisungen Das Programmieren im Textformat mit anschliessender Ubersetzung in den Maschinencode durch einen Assembler gestattet dem Programmierer eine weit schnellere und einfachere Programmerstellung als das Codieren im Maschinencode In der Regel entspricht einem Assemblerbefehl genau ein Befehl im Maschinencode ausser bei Makroassemblern die aus einer Anweisung mehrere Maschinenbefehle generieren konnen Zeichenformate Gangige Assembler erlauben es dem Programmierer Zeichen und Zahlen in unterschiedlichen Codeformaten Text dezimal Hexadezimal oktal binar zu codieren und stellen diese im Maschinenbefehl in einem der Anweisung entsprechenden Format ein Beispiel Die Quelltextangaben A oder X C1 oder B 11000001 im EBCDIC Code bedeuten dasselbe und werden im Maschinencode zu X C1 was bei Befehlen fur duale Operationen dem Wert 193 bei Zeichenoperationen dem Zeichen A entspricht Datendeklaration Ein Assembler bietet dem Programmierer die Moglichkeit Datenfelder als solche zu kennzeichnen und zu benennen sie in verschiedenen Formaten zu deklarieren und sie mit symbolischen Namen zu versehen Im erzeugten Maschinencode wird gemass diesen Angaben Speicherplatz reserviert und bei Konstanten mit Inhalt vorbelegt In den erzeugten Maschinenbefehlen wird die symbolische Adresse durch die numerische Adresse ersetzt und die Lange der definierten Felder eingesetzt Adressierung Ein Assembler ermoglicht es die Speicherorte fur Daten und Befehle symbolisch zu benennen sodass dem Programmierer deren numerische Adresse nicht bekannt sein muss In der Maschinensprache sind Speicheradressen direkt angegeben Selbst bei einer kleinen Anderung des Programms wurden sich die Adressen aller nachfolgenden Programmteile verschieben was bei Programmierung in Maschinensprache eine Anpassung all dieser Adressen erforderlich machen wurde Durch die symbolische Adressierung sind in der Assemblersprache auch Unterprogramme aufrufbar deren tatsachliche Adresse im Maschinencode erst vom Assembler oder einem Linker eingesetzt wird Programmumfang Ein Assemblerprogramm bezieht sich normalerweise auf eine 1 definierte Aufgabenstellung und ist zur Assemblierungszeit von anderen Programmen unabhangig Durch Techniken wie das Linken konnen je nach Entwicklungsplattform die Ergebnisse mehrerer Assemblierungen z B Objektmodule genannt zusammengefasst werden die als Gesamtheit das Maschinenprogramm ergeben Dokumentation Ein Assembler ermoglicht es einem Programm Kommentare und weitergehende Dokumentation hinzuzufugen In das Maschinenprogramm werden diese Quellcodeteile in der Regel nicht ubernommen Die meisten der vorgenannten zur Assemblersprache genannten Aspekte gelten in ahnlicher Weise auch fur hohere Programmiersprachen wobei diese sich gegenuber der Assemblersprache durch weitere Leistungs Merkmale unterscheiden Programmerstellung BearbeitenIntern ist jeder Befehl der Maschinensprache durch einen oder mehrere Zahlenwerte kodiert Diese Zahlenwerte bestehen aus dem Opcode der die Art des Befehls festlegt eventuell gefolgt von einem oder mehreren Bytes an Daten zu diesem Befehl Eine sinnvolle Folge von solchen Zahlencodes im Hauptspeicher bzw als Datei gespeichert bildet demnach ein Programm Es gibt nun verschiedene Arten solche Programme zu erstellen Direkte Eingabe des Binarcodes ausserst umstandlich und hochst fehleranfallig seit den 1950er Jahren unublich Uber einen Hex Editor den Zahlen Code in Opcodes zu schreiben fehleranfallig Mit einem Assembler Assemblersprachen formulieren die Prozessorbefehle des Maschinencodes als Mnemonics in einer einfachen Syntax Dieser Quelltext wird danach vom Assembler in den Maschinencode konvertiert Ein Programm wird in einer Hochsprache geschrieben danach von einem Compiler in Maschinencode ubersetzt kompiliert In einem Zwischenschritt wird dabei haufig zuerst Objektcode erzeugt Alternativ konnen Programme in einer Hochsprache auch entweder nach Kompilierung in einen Zwischencode oder direkt durch einen Interpreter abgearbeitet werden Ein Beispiel hierfur ist die Programmiersprache Java deren Zwischencode auch Bytecode genannt von einem Interpreter ausgefuhrt wird Dies geschieht fur den Benutzer transparent wenn zum Beispiel ein Applet im Webbrowser ausgefuhrt wird Neben Java werden auch samtliche NET Sprachen wie beispielsweise C in einen Zwischencode englisch Intermediate Language ubersetzt welcher anschliessend zur Laufzeit innerhalb der CLR von einem JIT Compiler in die entsprechende Maschinensprache ubersetzt wird Bei der Installation von Software einschliesslich des Betriebssystems liegt diese oft bereits in Maschinencode fur die jeweilige Plattform vor Dies erspart dem Nutzer die Kompilierung des Programms Beispiel BearbeitenProgrammiersprache C Bearbeiten Im folgenden Quelltext in der hoheren Programmiersprache C wird die Summe der Zahlen 2 und 3 berechnet und das Ergebnis zuruckgegeben int main int a 2 int b 3 int c a b return c Ein solches Programm wurde es fur einen x86 Prozessor kompiliert konnte folgenden Maschinencode ergeben Maschinencode hexadezimal zugehoriger Assemblercode zugehoriger C Code Erlauterung5548 89 E5 span class nf push span span class w span span class no rbp span span class nf mov span span class w span span class no rbp span span class p span span class w span span class no rsp span span class kt int span span class w span span class nf main span span class p span span class w span span class p span Sichere Register RBP auf dem Stack und setze RBP auf den Wert von Register RSP dem Stackpointer gehort nicht zur eigentlichen Berechnung Diese Vorbereitung ist notwendig um die Werte der Variablen a b und c auf dem Stack speichern zu konnen C7 45 FC 02 span class nf mov span span class w span span class no DWORD span span class w span span class no PTR span span class w span span class p span span class no rbp 4 span span class p span span class w span span class mi 2 span span class kt int span span class w span span class n a span span class w span span class o span span class w span span class mi 2 span span class p span Setze Variable a die durch Register RBP adressiert wird auf den Wert 2 C7 45 F8 03 span class nf mov span span class w span span class no DWORD span span class w span span class no PTR span span class w span span class p span span class no rbp 8 span span class p span span class w span span class mi 3 span span class kt int span span class w span span class n b span span class w span span class o span span class w span span class mi 3 span span class p span Setze Variable b die durch Register RBP adressiert wird auf den Wert 3 8B 45 F88B 55 FC01 D089 45 F4 span class nf mov span span class w span span class no eax span span class p span span class w span span class no DWORD span span class w span span class no PTR span span class w span span class p span span class no rbp 8 span span class p span span class nf mov span span class w span span class no edx span span class p span span class w span span class no DWORD span span class w span span class no PTR span span class w span span class p span span class no rbp 4 span span class p span span class nf add span span class w span span class no eax span span class p span span class w span span class no edx span span class nf mov span span class w span span class no DWORD span span class w span span class no PTR span span class w span span class p span span class no rbp 12 span span class p span span class w span span class no eax span span class kt int span span class w span span class n c span span class w span span class o span span class w span span class n a span span class w span span class o span span class w span span class n b span span class p span Setze Register EAX auf den Wert von Variable b Setze Register EDX auf den Wert von Variable a Addiere den Wert von EDX zum Wert von EAX Setze Variable c die durch RBP adressiert wird auf den Wert von EAX 8B 45 F4 span class nf mov span span class w span span class no eax span span class p span span class w span span class no DWORD span span class w span span class no PTR span span class w span span class p span span class no rbp 12 span span class p span span class k return span span class w span span class n c span span class p span Setze Register EAX auf den Wert von Variable c Weil Register EAX diesen Wert bereits enthalt konnte diese Anweisung in einem optimierten Programm entfallen 5DC3 span class nf pop span span class w span span class no rbp span span class nf ret span span class p span Setze RBP wieder auf seinen ursprunglichen Wert Springe zuruck an die Stelle des Aufrufs von main Register EAX enthalt den Ruckgabewert Ein Compiler konnte daraus zusammen mit weiteren notwendigen Informationen eine ausfuhrbare Datei erzeugen Zur Ausfuhrung wird der Maschinencode vom Lader des Betriebssystems in den Arbeitsspeicher geladen Anschliessend ruft die Laufzeitumgebung die Funktion main auf und die CPU beginnt mit der Abarbeitung der Maschinenbefehle Maschinencode bei IBM Rechnern am Beispiel von OS 390 Bearbeiten Der Maschinencode entsteht beim Assemblieren bzw beim Kompilieren der Quellcodedateien und wird vom Linkage Editor ggf unter Hinzufugen weiterer Module als ausfuhrbares Programm in einer Programmbibliothek bereitgestellt Zur Ausfuhrung wird dieses Programm in den Hauptspeicher geladen Der Maschinencode dieser Programme enthalt Befehle und Daten gemischt wie dies bei Computern der Von Neumann Architektur moglich ist im Gegensatz z B zur Harvard Architektur Die Daten werden entsprechend dem festgelegten Speicherformat angelegt Der Wert 12 kann dabei z B folgendes Aussehen haben Darstellung hexadezimal in minimaler Lange F1F2 Text oder ungepackte Zahl 012C gepackt positiv Speicherung je Zahl ein Halbbyte am Ende ein Vorzeichen Halbbyte 012D gepackt negativ dto 0C binar positiv entspricht B 00001100 Bei langeren Datenfeldern existieren ggf fuhrende Nullen zusatzlich oder bei Text nachfolgende Leerstellen Fur jedes vorgesehene Datenfeld ist eine Adresse festgelegt an der es beginnt und wo es entsprechend seiner Lange und seinem Format gespeichert ist Die Befehle bestehen aus dem Befehlscode und je nach Befehl Parametern unterschiedlicher Struktur Die nachfolgenden Beispiele sind hexadezimal dargestellt Befehlsbeispiele C5 1C 92A4 8C2B Trennpunkte nur zur besseren Lesbarkeit eingefugt C5 Befehlscode fur CLC Compare logical character Zeichenvergleich 1C Lange minus 1 der zu vergleichenden Felder bei 00 wird 1 Byte verglichen usw hier also 29 Bytes 92A4 Adresse erster Operand 9 Basisregister 2A4 Distanz zum Register 8C2B Adresse zweiter Operand 8 Basisregister C2B Distanz zum Register47 80 B654 47 Befehlscode fur BC Branch on Condition Sprungbefehl wenn Bedingung aus Vorbefehl erfullt ist 8 Bedingung hier wenn gleich mnemotechnischer Assemblercode BE branch on equal 0 optional Register dessen Inhalt zur Sprungadresse hinzuaddiert wird nicht bei 0 B Zieladresse Basisregister 654 Zieladresse Distanz bei Inhalt von B 6C4410 wurde nach Adresse 6C4A64 verzweigt werden lt usw gt Im Assemblercode konnte diese Codierung z B wie folgt aussehen CLC FELDA 29 FELDB BE XXXVon einer Hochsprache generiert konnte der Quellcode dagegen lauten IF Feld A Feld B then GOTO XXX Bei Bedingung erfullt wird nach XXX reale Adresse 6C4A64 verzweigt andernfalls wird im Maschinencode mit lt usw gt fortgefahren Haufig generieren Hochsprachen zusatzliche Befehle z B um Feldlangen oder Datenformate zu egalisieren Register zu laden oder Adressen in Arrays zu berechnen Man erkennt dass die Befehle unterschiedliche Langen aufweisen Das Steuerwerk des Rechners erkennt die Lange an den ersten beiden Bits des Befehlscodes und schaltet das Befehlszahlregister dementsprechend weiter An genau dieser Stelle wird das Programm fortgesetzt falls kein Sprungbefehl auszufuhren ist Speicheradressen werden im Maschinencode immer durch eine oder zwei Registerangabe n zusatzlich optional durch eine im Befehl angegebene Distanz dargestellt Zur Ausfuhrung wird beim Programmstart ein bestimmtes Register vom Betriebssystem mit der Adresse geladen an die das Programm in den Speicher geladen wurde Von diesem Wert ausgehend werden im Programmcode bei ASS programmiert bei Hochsprachen generiert die Basisregister geladen wodurch die mit relativen Adressen versehenen Befehle die tatsachlichen Speicherstellen ansprechen Zur Ausfuhrung von Systemfunktionen wie Ein Ausgabebefehle Abfrage von Datum Uhrzeit Tastatureingabe Laden von Unterprogrammen u v a wird im Maschinenprogramm lediglich ein Systemaufruf mit dem Befehl SVC Supervisor Call abgesetzt Im zweiten Byte ist die auszufuhrende Funktion spezifiziert Verzeichnis siehe 3 weitere Parameter fur die Funktion werden uber eine in ihrer Struktur festgelegte Datenschnittstelle ubergeben auf deren Adresse ein implizit vereinbartes nicht im Befehl angegebenes Register zeigt Beispiel X 05 08 LOAD Parameter Pgm Name etc Die die aufgerufenen Funktionen ausfuhrenden Befehle sind Maschinencode des Betriebssystems Sie werden dort ausgefuhrt und fuhren anschliessend zu dem dem SVC folgenden Befehl zuruck 4 Uberblick uber die typische Funktionalitat einer Maschinensprache BearbeitenBefehlsvorrat Bearbeiten Hauptartikel Befehlssatz Die im Folgenden genannten Mnemonics Befehlskurzel wurden exemplarisch gewahlt und hangen von der Assemblersprache ab Adressierung und Ergebnisanzeige Fast alle Befehle adressieren die betroffenen Speicherpositionen haufig Quelle Ziel zu vergleichend Vergleichswert usw uber definierte Register Ebenso gibt der Prozessor seine Ergebnisse und relevante Zusatzinformationen uber festgelegte Register und oder uber Flags im Statusregister zuruck Dies ermoglicht es im weiteren Programmablauf diese Informationen auszuwerten und darauf zu reagieren Die Lange der Befehle und die Grosse von Quell und Zieloperanden konnen je nach Architektur unterschiedlich sein Beispiel Ein Additionsbefehl wie ADC add with carry signalisiert dem weiteren Programmablauf ein Uberschreiten des gultigen Wertebereichs uber das Setzen des Carry und Overflow Flags hinaus Unterschiede Der Befehlsvorrat einzelner Prozessoren ist unterschiedlich Nicht alle Befehle sind auf jedem Prozessortyp und in jeder Prozessor Generation verfugbar Beispiel Ein einfacher Grundbefehl wie SHL SHR der einen Registerwert um eine bestimmte Anzahl von Stellen nach links oder rechts verschiebt ist schon im 8086 vorhanden Die machtigere Variante SHLD SHRD welche zusatzlich die entstehenden Leerstellen aus einem anderen Integerwert auffullt ist erst ab dem 80386 implementiert Machtigkeit Der Befehlsvorrat eines Prozessors stellt dabei Befehle unterschiedlich machtiger Funktionalitat bereit Neben einfachen einstufigen Grundoperationen stehen auch Befehle zur Verfugung die mehrere Operationen in einem Befehl bundeln Beispiele Der Befehl CMP compare ermoglicht den Vergleich zweier Werte auf lt gt Der Befehl XCHG exchange vertauscht die Positionen zweier Operanden Der Befehl CMPXCHG compare and exchange kombiniert diese beiden Befehle und ermoglicht einen bedingungsabhangigen Datenaustausch in einem Befehl Wahrend der Befehl BT bit test nur den Zustand eines einzelnen Bits in einem Integerwert pruft ermoglichen es die Befehle BTC BTR und BTS daruber hinaus das geprufte Bit abhangig vom Ergebnis der Prufung zu setzen BTS zu loschen BTR oder zu invertieren BTC Generell unterscheidet man zwischen CPUs mit RISC Reduced instruction set computer oder CISC Complex instruction set computer Befehlssatz Erstere haben einen bedeutend weniger machtigen Befehlssatz konnen jeden einzelnen Befehl aber typischerweise in einem Taktzyklus abarbeiten Moderne CPUs mit CISC Befehlssatz darunter fallen heute fast ausschliesslich x86 kompatible CPUs dekodieren zur schnelleren Abarbeitung die komplexen CISC Befehle zur Ausfuhrung intern in eine RISC ahnliche Mikrocontroller Sprache Performance Jeder Befehl wird in einer in Datenblattern angegebenen Anzahl von Taktzyklen des Prozessors abgearbeitet Deren Kenntnis ermoglicht es dem Programmierer bei extrem zeitkritischen Anwendungen beispielsweise Befehle mit vielen Taktzyklen durch mehrere in der Summe aber effizientere Befehle zu ersetzen Kategorisierung der Befehle Bearbeiten Grundlegende Maschinen Befehle lassen sich in folgende Kategorien unterteilen Arithmetische Operationen Fuhren Berechnungen durch ADD ADC SUB SBB DIV MUL INC DEC Logische Operationen Verknupfen Bitfelder logisch miteinander AND OR XOR NOT Bit orientierte Operationen Mit ihnen kann man einzelne Bits in einem Bitfeld genau ansprechen auslesen BSF BSR verschieben SHL SHR RCL RCR ROL ROR bzw manipulieren BT BTC BTR Speicheroperationen Ubertragen Daten zwischen Prozessorregistern MOV MOVSX MOVZX XCHG innerhalb eines Registers BSWAP sowie Registern und Speicher Vergleichsoperationen Vergleich von Werten mittels lt gt sowie CMP TEST Kombinierte Befehle aus Vergleichsoperationen arithmetischen Operationen und Datenaustausch XADD CMPXCHG Steueroperationen Verzweigungen die den Ablauf des Programms beeinflussen Datenkonvertierung Diese Befehle wandeln Werte von einer Darstellung in eine andere um u U auch mit Verlust Zum Beispiel ein Byte in ein Word CBW einen Long Integer in ein Byte CVTLB oder eine doppelte genaue Fliesskommazahl in einen Integer CVTSD2SI In vielen modernen Prozessoren sind die Befehle der Maschinensprache zumindest die komplexeren unter ihnen intern durch Mikroprogramme realisiert Das ist insbesondere bei der CISC Architektur der Fall Literatur BearbeitenAssembler Maschinennahes Programmieren von Anfang an rororo Taschenbucher Nr 61224 2003 ISBN 3 499 61224 0 Weblinks Bearbeiten nbsp Wiktionary Maschinensprache Bedeutungserklarungen Wortherkunft Synonyme UbersetzungenEinzelnachweise Bearbeiten Duden Informatik ISBN 3 411 05232 5 Maschinencode In Gabler Wirtschaftslexikon Tabelle der SVC Codes fur IBM s MVS amp OS 390 amp z OS Supervisor Call instruction in der englischsprachigen WikipediaNormdaten Sachbegriff GND 4037827 5 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Maschinensprache amp oldid 233028574