Maschinenorientierte Programmierung Prof. Dr. Sven-Hendrik Voß | Sommersemester 2017 Technische Informatik (Bachelor), Semester 2 Termin 2, 24.04.2017 Seite 2 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Inhaltsverzeichnis Themen und Termine Lernziele Typische externe Architekturen Befehlsausführung Adressierungsarten Rechnerarchitektur und Programmierung Assemblerdirektiven Zusammenfassung Sommersemester 2017 Seite 3 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Themen und Termine - Seminaristischer Unterricht Seminaristischer Unterricht (SU): Zug 1 im Raum B-401, montags 10:00 11:30 Uhr, Zug 2 im Raum B-321, montags 12:15 - 13:45 Uhr Termin 1 2 3 4 5 6 7 8 9 10 11 12 13 Datum 10.04. 17.04. 24.04. 01.05. 08.05. 15.05. 22.05. 29.05. 05.06. 12.06. 19.06. 26.06. 03.07. 10.07. 17.07. 24.07. Themen Organisatorisches, Einführung Rechnerarchitekturen Ostermontag Organisationsprinzipien und Adressierung Tag der Arbeit Programmiermodell des 8051 Mikrocontrollers Assemblersyntax des 8051 Assemblersyntax und Betriebsmodi des 8051 I/O Port-Programmierung, Umgang mit Instruktionen und Programme Pfingstmontag Interrupt-Programmierung Timer- und Counter-Programmierung Aufbau und Programmierung von seriellen Kommunikationsschnittstellen Benutzung der seriellen Schnittstelle, Timer, Interrupts Praxisbeispiele Klausur Klausurrückgabe und Besprechung Seite 4 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Themen und Termine - Laborübung Laborübung(UE): Zug 1 dienstags 10:00 - 13:00 Uhr (180 Minuten) im Raum B-341 in Gruppen A und B (wöchentlicher Wechsel) Nr. 1 2 3 4 5 Datum 25.04. / 09.05. 16.05. / 23.05. 30.05. / 13.06. 20.06. / 27.06. 04.07. / 11.07. Themen Einführung; Programmierung in Pseudocode Umgang mit Assembler-Befehlen; Programmanalyse Adressierungsarten, Verzögerungsschleifen, Funktionsaufrufe I/O Operationen, Zählerimplementierung, 7-Segment-Anzeige Stack, Lookup-Tables, Timer, Interrupts Seite 5 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Themen und Termine - Laborübung Zug 2 montags 14:15 - 15:45 Uhr (90 Minuten) im Raum B-341 in einer Gruppe (wöchentlich) Nr. 1 2 3 4 5 Datum 24.04. / 08.05. 15.05. / 22.05. 29.05. / 12.06. 19.06. / 26.06. 03.07. / 10.07. Themen Einführung; Programmierung in Pseudocode Umgang mit Assembler-Befehlen; Programmanalyse Adressierungsarten, Verzögerungsschleifen, Funktionsaufrufe I/O Operationen, Zählerimplementierung, 7-Segment-Anzeige Stack, Lookup-Tables, Timer, Interrupts Seite 6 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Lernziele Nach diesem Termin sollten Sie... I die unterschiedlichen Befehlssatz-Architekturen klassifizieren können I die einzelnen Phasen der Befehlsausführung verstanden haben I zwischen verschiedenen Adressierungsarten unterscheiden können I die Hierarchie von Programmiersprachen kennen I die Vorteile und Eigenarten von maschinennaher Programmierung verstanden haben Organisationsprinzipien und Adressierung | Seite 7 Maschinenorientierte Programmierung | Sommersemester 2017 Typische externe Architekturen Externe Architektur I Maschinenbefehlssatz Software I Maschinenbefehle: Elementaroperationen Befehlssatz externe Architektur Hardware interne Architektur Interne Architektur I innerer Hardwareaufbau eines Rechners Universalprozessoren I für alle Anwendungen I von einfachem Assembler- / C-Programm bis zum Compiler, Betriebssystem, Datenbank, Textverarbeitung Universalprozessor Seite 8 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Typische externe Architekturen Zusammenspiel externer und interner Architektur I externe Architektur legt durch Maschinenbefehlssatz fest, wie ein Rechner von der Seite der Software her angesprochen werden kann ⇒ für Codegenerierung maßgebliche Schnittstelle I Implementierung des Maschinenbefehlssatzes durch die interne Architektur ⇒ interne Architektur bezieht sich auf internen Aufbau und Organisationsprinzip eines Rechners I Einfluß des Maschinenbefehlssatzes auf Effizienz und Kosten → möglichst kostengünstige Implementierung des Maschinenbefehlssatzes (wenig Hardware) → möglichst effiziente Implementierung des Maschinenbefehlssatzes (geringe Rechenzeit) Seite 9 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Typische externe Architekturen Klassifizierung externer Architekturen (Maschinenbefehlssätze) I Anzahl der Operanden pro Befehl (Zweiadress-, Dreiadress-Befehle) I Residenz von Operanden (Register, Speicher, Stack) I Typ und Länge der Operanden I Operationsvorrat Beispielklassen (Unterscheidung je nachdem wie viele Register und wozu) I Akkumulator-Maschinen I Stack-Maschinen I Registersatz-Maschinen → Nachzulesen im Skript S. 32-38! Seite 10 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung Verarbeitungsphasen eines Befehls am Beispiel I Annahme: einfache Akkumulatormaschine I Befehlsformat (→ Bedeutung von Feldern im Maschinenbefehl) Maschinenbefehl 7 Befehlscode AddiereBefehl à 7 24 Adresse 24 Addiere-Befehl holt den Wert unter der im Befehl angegebenen Adresse (im Beispiel 24) und addiert ihn zum Inhalt Seite 11 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung Vorher: Maschinenbefehl 7 24 Adressen ac 25 Daten, Befehle Prozessor 24 200 Speicher Nachher: Adressen ac 225 Daten, Befehle Prozessor 24 200 Speicher Befehlscode AddiereBefehl à 7 Adresse 24 Seite 12 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung Struktur: I pc (program counter, auch ip: instruction pointer): Befehlszähler I ir (instruction register): Befehlsregister I or (operand register): Speicheradressregister I ac (accumulator): Arbeitsregister pc ir or ac Prozessor Adressen Daten, Befehle Speicher Seite 13 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung 1. Befehlsholphase (instruction fetch, IF) pc 73 ir 7 24 or 25 ac Prozessor Adressen 7 24 Daten, Befehle Speicher Befehlszähler (program counter) zeigt Speicheradresse des nächsten auszuführenden Befehls an. Befehl wird aus dem Speicher geholt und in Befehlsregister (instruction register) geladen. Seite 14 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung 2. Befehl dekodieren (instruction decode, ID) pc 73 ir 7 24 or ac Adressen 7 24 Daten, Befehle 25 Prozessor Speicher Interpretation des aktuellen Befehls aus Befehlsregister (instruction register) In Abhängigkeit vom Befehlsregister verzweigt die Ablaufsteuerung zur weiteren Befehlsverarbeitung Seite 15 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung 3. Operand holen (operand fetch, OF) pc 73 ir 7 24 or ac 200 25 Prozessor Adressen Daten, Befehle 7 24 24 200 Speicher Holen des Operanden aus Registern oder Berechnen einer effektiven Adresse gemäß im Befehl enthaltener Adresse Speicheradressregister (operand register) wird zum Holen und Ablegen des Operanden genutzt. Seite 16 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung 4. Befehl ausführen (instruction execute, EX) pc 73 ir 7 24 or ac 200 225 Prozessor Adressen Daten, Befehle 7 24 24 200 Speicher Ausführen des Befehls Verändern des Operanden im Arbeitsregister (accumulator): Operand wird mit ac-Inhalt addiert und nach ac gespeichert ggf. Zurückschreiben des Ergebnisses in Register oder Lesen/Schreiben des Hauptspeichers Seite 17 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung Befehlszähler inkrementieren (als separater Schritt oder parallel) pc 74 1 ir 7 24 or 200 ac 225 Prozessor Adressen Daten, Befehle 7 24 24 200 Speicher Seite 18 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung Resultat pc 74 ir 7 24 or ac 200 225 Prozessor Adressen Daten, Befehle 7 24 24 200 Speicher Seite 19 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Befehlsausführung Befehlsablauf (auch: Befehlszyklus) folgt sequentieller Befehlsfolge Befehlsablauf ist streng seriell und folgt von-Neumann-Schema Jeder Befehlszyklus besteht aus einer Anzahl von Teilschritten I Anzahl der Teilschritte für unterschiedliche Befehle verschieden I Zeitdauer der einzelnen Befehle unterschiedlich I Befehlszyklus 6= Maschinenzyklen Seite 20 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Adressierungsarten CPU kann Daten auf Daten auf verschiedene Arten zugreifen Adressierungsarten legen die Art des Datenzugriffs fest Beim 8051 Mikrocontroller (Akkumulatormaschine) gibt es folgende Adressierungsmöglichkeiten: I I I I I Unmittelbare (Immediate) Adressierung (Direkt-Wert) Register-Adressierung Direkte Adressierung Register-indirekte Adressierung Indizierte Adressierung Sie unterscheiden sich in I I I Anzahl benötigter Befehls-Bytes Befehlsausführungszeit möglichen Zugriffszielen Hinweis: in vielen Assemblern übliche Notation # bedeutet Konstante @ bedeutet indirekte Adressierung Seite 21 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Adressierungsarten Adress.-Art Unmittelbare Adressierung Beispiel MOV R1, #15 RegisterAdressierung MOV A, R0 Direkte Adress. MOV R0, 35h MOV R0, symb Adr Registerindirekte Adressierung MOV A, @R0 Indizierte Adressierung MOVC A,@A+DPTR A ... R1 R0 Prozessor Speicher Seite 22 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Adressierungsarten Zusammenfassung zu den Adressierungsarten Programmspeicher (Code) Unmittelbare Adressierung Operand RegisterAdressierung Registerbezeichner Direkte Adressierung ganze Adresse Register-indirekte Adressierung Registerbezeichner Register des Prozessors Datenspeicher Operand Operand Adresse Operand Seite 23 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Rechnerarchitektur und Programmierung Lehrgebiete der Rechnerarchitektur und maschinennahen Programmierung eng miteinander verbunden I zum Programmieren auf blanker Hardware müssen deren Wirkprinzipien klar sein I grundsätzlicher Aufbau des Universalrechners bereits behandelt I einzelne Funktionseinheiten bereits diskutiert Im Folgenden... I Einführung in Grundlagen der Assemblerprogrammierung I Einarbeitung in eine bestimmte Hardware (8051 Mikrocontroller) I Kennenlernen der spezifischen Assemblersyntax Seite 24 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Rechnerarchitektur und Programmierung Hochsprachen Objektorientierte Sprache (C++, C#, Java, ...) Deklarative Sprache (SQL, Prolog, ... ) SELECT * FROM Tabelle Prozedurale/Imperative Sprache (Pascal, C, ...) IF a > 0 THEN ... Maschinennahe Sprache (Assembler) ADDL R0,R1 Maschinensprache 01000111100011... Sprachen der 5. Generation Objekte - Attribute, Methoden, Klassen, Klassenhierarchien, Vererbung Sprachen der 4. Generation inhaltsorientiert, nicht ablauforientiert, anwendernah, Berichtsgeneratoren, ... Sprachen der 3. Generation ablauforientiert, Kontrollstrukturen, Unterprogramme, komplexe Datentypen, ... Sprachen der 2. Generation prozessorspezifisch, Einzelbefehle Sprachen der 1. Generation prozessorspezifisch, Kombination aus Bits Seite 25 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Rechnerarchitektur und Programmierung Weshalb maschinennahe Programmierung? I Nutzung maschinenspezifischer Besonderheiten I maximale Ausnutzung der Hardware (höchstes Leistungsvermögen oder geringster Aufwand) I Umgehung von Unzulänglichkeiten (Workarounds) I vermittelt grundlegendes Erfahrungswissen zum Verstehen, Beurteilen und Auswählen von Prozessorarchitekturen → in der Praxis nach wie vor erforderlich! Seite 26 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Maschinenprogramm Hexadezimalcode I hexadezimaler Maschinencode kann direkt von der CPU als Programm ausgeführt werden I vom Hersteller festgelegt und Datenbüchern zu entnehmen I Maschinencode ist im Speicher abgelegt I Prozessor liest jede Anweisung (Befehl) und führt ihn aus I Daten ebenfalls im Speicher aufbewahrt I Prozessor kann die Daten lesen, speichern und über die Ein-/Ausgabesteuerung einlesen und ausgeben Beispiel für 8051-Maschinencode: Code 74h E5h Bedeutung kopiere den nachfolgenden Wert (Konstante, hexadezimal) direkt in das A-Register des Rechenwerks kopiere den Inhalt der Speicherzelle in das A-Register, deren Adresse in der nachfolgenden RAM-Speicherzelle genannt wird Seite 27 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Assemblerprogramm Assemblermnemonik I Verwendung von auf das Ziel hinweisende Befehlsworte statt Zahlen I Assembler übersetzt die Befehlsworte eins zu eins in die entsprechenden Zahlen des Maschinencodes I Warum ist das möglich? Assembler so aufgebaut, dass Programme fast unverändert in Maschinensprache transformiert werden können! I Befehle nennt man Assemblermnemonik der CPU Beispiel für gleiches Programm in Assemblermnemonik: Code 74 22 Assemblermnemonik mov A, #22h E5 22 mov A, 22h Bedeutung kopiere die Konstante 22h direkt in das A-Register des Rechenwerks kopiere den Inhalt der Speicherzelle 22h direkt in das A-Register des Rechenwerks Maschinenbefehle 74h und E5h beinhalten bereits das Ziel (A-Register) des Kopiervorgangs und Anweisung zum Umgang mit dem Parameter Seite 28 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Assemblerdirektiven Befehle an das Übersetzerprogramm I Befehle zur Steuerung des Verhaltens des Übersetzerprogramms (Assembler und Linker) I nicht Bestandteil des Befehlssatzes I Befehle richten sich nicht an die CPU I ermöglichen die Definition von Symbolen, Reservierung von Speicherplatz, Platzierung von Programmcode... I nur während der Übersetzung der Assemblermnemonik in Maschinensprache von Bedeutung I Befehle tauchen im fertigen Maschinenprogramm nicht mehr auf I abhängig vom verwendeten Assemblerprogramm Seite 29 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Assemblerdirektiven Beispiel für Assemblerdirektiven: Befehle org und end #22 (dezimal) = 0x16h ! Seite 30 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Assemblerdirektiven Assemblerbefehle blau dargestellt! I richten sich an die CPU I CPU soll ihren Akkumulator A mit der Zahl 22 laden (Zeilen 3A und 3C) I Zahl soll anschließend in die Speicherzelle DPH übertragen werden I Zeilennummern gehören nicht zum Quelltext Assemblerdirektiven violett dargestellt! I steuern die Übersetzung der Assemblerbefehle durch den Assembler I org 03Ah Befehl stellt Assembler so ein, dass dieser das Programm ab Speicherzelle 03Ah ablegt I end Befehl sagt Assembler, dass er nicht weiter übersetzen soll I weitere Zeilen dahinter werden nicht mehr übersetzt I Direktiven des a51-Assembler Seite 31 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Zusammenfassung Heute haben Sie gelernt... I wie man externe Architekturen (Maschinenbefehlssätze) klassifiziert I welche unterschiedlichen Befehlssatz-Architekturen es gibt und was jeweils charakteristisch für diese ist I in welchen Phasen die Befehlsausführung abläuft I welche Arten der Adressierung es gibt und wie man sie erkennt I wie man von einem Assemblerprogramm zum Maschinenprogramm kommt Seite 32 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Ausblick auf nächste Stunde In der nächsten Stunde widmen wir uns... I dem Aufbau des Mikrocontrollers 8051 I dem Programmiermodell des 8051 Mikrocontrollers I dem Speichermodell und den unterschiedlichen Zugriffsarten Seite 33 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Hinweise zum Selbststudium Zur Vertiefung wird empfohlen... I MOP-Skript I Klaus Wüst: Mikroprozessortechnik: Grundlagen, Architekturen, Schaltungstechnik und Betrieb von Mikroprozessoren und Mikrocontrollern, Vieweg und Teubner, ISBN 3834809063 Seite 34 Organisationsprinzipien und Adressierung | Maschinenorientierte Programmierung | Sommersemester 2017 Kritik Nun sind Sie dran: I Kritik: Was funktioniert gut / was schlecht? I Anregungen I Wünsche I Verbesserungsvorschläge in Bezug auf Inhalt und Organisation der Vorlesung