Mikroprozessor-Programmiergrundlagen
Mikroprozessor-Programmiergrundlagen
Der Instruktionssatz eines Mikroprozessors ist einzigartig für jeden Chip. Beispielsweise nutzt der Intel 80386 eine andere Binärcodierung als der Motorola 68020, was bedeutet, dass identische Operationen distinkte Maschinencodes erfordern.
Da es keinen universellen Standard für Instruktionssätze gibt, verlangt Low-Level-Programmierung tiefes, chip-spezifisches Wissen.
Wenn ein Entwickler Code schreibt, der direkt eine CPU steuert – wie die Anpassung einer Motor-Einspritzung – programmiert er in der nativen Maschinensprache des Prozessors, einer Reihe binärer Bits, die die Control Unit der CPU dekodiert.
Obwohl Maschinensprache technisch binär ist, schreiben Programmierer sie fast immer in Hexadezimal zur Lesbarkeit. Unten sind einige gängige Instruktionen für den Intel 8080:
Hexadezimal Binär Instruktionsbeschreibung ----------- -------- ------------------------------------------ 7B 01111011 Inhalt von Register A nach Register E bewegen 87 10000111 Inhalt von Register A zu Register D addieren 1C 00011100 Inhalt von Register E um 1 inkrementieren D3 11010011 Byte Daten an Datenbus ausgeben
Selbst mit Hexadezimalnotation können diese Codes verwirrend sein. Assemblersprache bietet eine mnemonische Kurzschreibweise – z. B. wird 7B zu MOV A,E – die dennoch durch einen Assembler in Binär übersetzt wird vor Ausführung.
Nach dem Schreiben eines Programms muss es in Speicher geladen werden. Für nicht-flüchtigen Speicher schreibt ein ROM-Programmer das Binärimage in einen ROM-Chip; für flüchtigen Speicher kann ein Bootloader oder OS-Routine Tastatureingaben oder Disk-Dateien entgegennehmen und den Code in RAM platzieren.
Auf einem voll ausgestatteten PC schreibt ein Compiler den assemblierten Code in eine Disk-Datei. Zur Laufzeit bewirkt Aufruf des Dateinamens, dass der Program Counter der CPU auf die erste Instruktion zeigt und das Programm läuft.
Während Maschinen- oder Assembler-Programmierung hocheffizienten Code liefert, ist sie mühsam und fehleranfällig. Hochsprachen (z. B. C, C++, Java) erlauben Entwicklern, Intent auszudrücken – wie print "Hello, world!" – ohne einzelne Maschinenschritte zu detaillieren.
Hochsprachenprogramme werden durch Compiler (statische Übersetzung) oder Interpreter (Laufzeit-Übersetzung) in Maschinencode umgewandelt. Kompilierter Code läuft schneller, da keine Übersetzung während der Ausführung erfolgt, während interpretierter Code Overhead für jede Instruktion hat.
Gängige kompilierte Sprachen sind C, C++, FORTRAN und Pascal, während BASIC und FORTH typischerweise interpretiert werden. Da Instruktionssätze über CPUs differieren, müssen Compiler und Interpreter eine spezifische Prozessorarchitektur targeten.
Hersteller wie Intel und Motorola mildern Kompatibilitätsprobleme, indem sie neue CPUs rückwärtskompatibel designen. Beispielsweise unterstützt ein Pentium IV den vollständigen 80386-Instruktionssatz plus zusätzliche Instruktionen. Code kompiliert für 80386 läuft auf einem Pentium, aber Code der Pentium-exklusive Instruktionen nutzt, läuft nicht auf einem 80386.
Compiler lassen Entwickler üblicherweise die Ziel-CPU wählen; Kompilierung für 80386 garantiert Kompatibilität mit älterer Hardware, während Kompilierung für Pentium neuere Features ausnutzen kann, wenn verfügbar.
Zugehöriges Arbeitsblatt
- Microprocessor Programming Worksheet
Industrietechnik
- Top 10 Cloud Programmiersprachen, die jeder Developer beherrschen sollte
- C Programmierungsoperatoren meistern: Ein umfassender Leitfaden
- C-Programmierung meistern: Umfassendes PDF-Tutorial für Einsteiger
- Bosque: Microsofts neue schleifenfreie Programmiersprache für bessere Codequalität
- Die 9 wichtigsten Programmiersprachen 2021, die Sie lernen sollten
- C-Programmierung meistern: Umfassendes Tutorial für Einsteiger
- C-Programmiersprache: Umfassender Überblick
- C-Programmstruktur verstehen: Einsteiger-Guide
- C#: Umfassender Überblick über Microsofts moderne Programmiersprache
- Heidenhain startet HIT 3.0: Fortgeschrittenes Online-CNC-Training für TNC-Anwender