Motivation und Überblick Drei große Bereiche der Vorlesung: Darstellung von Zahlen in Rechnern Verarbeitung von Binärdaten auf der Ebene digitaler Schaltungen Programmierung auf Maschinenebene und relativ knapp Aufbau von Rechnern (Register, Arithmetische Einheit, Speicher etc.) addi $sp,$sp,-16 sw $s0,0($sp) sw $s1,4($sp) sw $s2,8($sp) Grundlagen der Informatik Fakultät Informatik 1. Einführung 9
Darstellung von Zahlen unser liebgewonnenes Dezimalsystem eignet sich nicht für Computer wir machen uns daher Gedanken, wie man Zahlen mit nur zwei Ziffern darstellen kann Grundidee: Verwendung der Basis 2 statt 10 für die Ziffern z.b. 123(dezimal) = 1. 10 2 + 2. 10 1 + 3. 10 0 = 1. 2 6 + 1. 2 5 + 1. 2 4 + 1. 2 3 + 0. 2 2 + 1. 2 1 + 1. 2 0 = 1111011(binär) Probleme, die wir in der Vorlesung behandeln: Umrechnung zwischen den Darstellungen Ausführung von Berechnungen im Binärsystem Darstellung von negativen und reellen Zahlen 1. Einführung 10
Wie rechnet ein Rechner? Wir gehen in dieser Vorlesung darüber hinaus der Frage nach Als Softwareentwickler könnten wir in einem Programm z.b. folgende Anweisung schreiben: a = a+2*b; Wie rechnet ein Rechner? Wie wird diese Anweisung letztlich ausgeführt? 1. Einführung 11
Ebenen 1. Einführung 12
Ebenen 1. Einführung 13
Ebenen und ihre Ausdrucksmittel Höhere Programmiersprache: Es stehen höhere Programmiersprachenkonzepte zu Verfügung: Namenschemata, Objekte, Vererbung,... Komfortable Datentypen: String, Array, Hashtable,... Komfortable Kontrollstrukturen: while, if, switch,... Weitere Funktionen: Mathematische Bibliotheken (sin, cos etc.), TECHNISCHE HOCHSCHULE NÜRNBERG int a=1, b=2; a = a+2*b; Dateizugriffe, Netzwerkzugriffe, Zugriffe auf Peripherie etc. 1. Einführung 14
Ebenen und ihre Ausdrucksmittel Assembler und Maschinenprogramm: TECHNISCHE HOCHSCHULE NÜRNBERG lw $t0, a lw $t1, b add $t0, $t0, $t1 add $t0, $t0, $t1 sw $t0, a Assembler Programme liegen als Quell Datei vor und werden durch ein Übersetzungsprogramm (dem so genannten Assembler) in Maschinencode umgewandelt. Nur Maschinencode ist direkt ausführbar. Bei der Verwendung höherer Programmiersprachen entfällt der Schritt über den Assembler häufig und aus dem höheren Programm wird durch den Compiler direkt Maschinencode erzeugt. Auch möglich: Übersetzen in einen Zwischencode, der von einer virtual Maschine (in Maschinencode vorliegend) interpretiert wird 1. Einführung 15
Ebenen und ihre Ausdrucksmittel Eigenschaften von Assembler und Maschinenprogramm: In der Assembler Sprache stehen keine komfortablen Programmiersprachenkonzepte zur Verfügung, bestenfalls symbolische Variablennamen symbolische Sprungadressen Makros Nur elementare Datentypen verfügbar: Byte (8 Bit), 2 Byte Integer, 4 Byte Integer oft keine Fließkomma Datentypen, oft keine Strings Addition, Subtraktion, oft keine Multiplikation, Division 1. Einführung 16
Ebenen und ihre Ausdrucksmittel Eigenschaften von Assembler und Maschinenprogramm (Forts.): Logische Bit Operationen Wenige Kontrollstrukturen: meist nur Sprung, bedingter Sprung Sprung in ein Unterprogramm 1. Einführung 17
Ebenen und ihre Ausdrucksmittel Register und Mikroprogramm: Es gibt nur noch Register und elementare Operationen darauf Typische Operationen: Addieren, Subtrahieren, Inkrementieren, Dekrementieren Das Mikroprogramm steuert den Datenfluss (Welches Register wird mit welchem Operationselement verbunden?) 1. Einführung 18
Ebenen und deren Ausdrucksmittel Gatter: Es gibt nur noch Bits und Operationen auf Bits Typische Operation: Bit 1 AND Bit 2 Bit 3 1. Einführung 19
Ebenen und deren Ausdrucksmittel Ebene der Transistoren: Zur Darstellung von Daten werden Spannungen und Ströme verwendet Elemente dieser Ebene sind im Wesentlichen Transistoren, Dioden und Widerstände Definierte Signalpegel werden auf digitale Daten abgebildet (z.b. >3 Volt bedeutet Bit=1) 1. Einführung 20
Ebenen lw $t0, a lw $t1, b add $t0, $t0, $t1 add $t0, $t0, $t1 sw $t0, a & & >1 & 1. Einführung 21
Daten und Datentypen Wir müssen auch der Frage nachgehen, wie Daten dargestellt werden. Z.B. Frage: Was bedeutet die folgende Bit Folge? 0100 0111 0100 0100 0100 1001 0000 0000 1. Einführung 22
Daten und Datentypen Ausweichende Antwort: Es kommt darauf an Die Bedeutung von Bit Folgen hängt vom jeweiligen Datentyp ab Man unterscheidet: Elementare Datentypen: solche, die nicht weiter zerlegt werden können Zusammengesetzte Datentypen: aus elementaren Datentypen aufgebaut 1. Einführung 23
Elementare Datentypen Ordinale Datentypen (alles, was man "aufzählen" kann): Zeichen: a, b, c,... Ganze Zahlen mit oder ohne Vorzeichen: byte, short, int, long, word,... Boolesche Daten: erlauben nur zwei Werte TRUE, FALSE Aufzählungstyp: z.b. (ROT, GRUEN, GELB) (wird intern auf (0, 1, 2) abgebildet) 1. Einführung 24
Elementare Datentypen Zeiger (Pointer): Verweise auf Speicherstellen Bei linear adressierbaren Speicher: eine ganze Zahl Sind je nach Programmiersprache explizit vorhanden (und manipulierbar) oder versteckt Für Maschinensprache unerlässlich 1. Einführung 25
Elementare Datentypen Gebrochene Zahlen: Fließkomma Zahlen: float, double Manchmal (insb. in Datenbanken): Festkomma Datentypen (z.b.: um Euro Beträge auszudrücken) 1. Einführung 26
Zusammengesetzte Datentypen Feld (array): feste Anzahl gleicher Daten, z.b. 10 ganze Zahlen Zeichenkette (string): z.b. "GDI" Strings werden je nach Programmiersprache oder Prozessortyp auch als elementarer Datentyp behandelt Strings können auch als Feld von Zeichen angesehen werden 1. Einführung 27
Zusammengesetzte Datentypen Record (auch struct genannt): Datentyp, der aus u.u. verschiedenen Typen zusammengesetzt wird Beispiel: Person = String: vorname; String: name; int: alter; Durch die objektorientierte Programmierung sind Records durch Objekte darstellbar 1. Einführung 28
Zusammengesetzte Datentypen Weitere zusammengesetzte Datentypen: Menge: Jedes Element kann nur einmal aufgenommen werden Hashtable: Man kann Paare von Daten ablegen, nach dem ersten Datum suchen (Schlüssel) und bekommt das zweite Datum (Wert) zurückgeliefert Vektor: Feld, das dynamisch wachsen kann 1. Einführung 29
Zusammengesetzte Datentypen In der Regel werden diese Datentypen intern durch andere zusammengesetzte Datentypen realisiert. Beispiele: Mengen in Pascal werden durch Bit Felder realisiert Vektoren in Java werden durch Felder fester Größe realisiert, die bei Bedarf auf größere Felder umkopiert werden 1. Einführung 30
"Zahlen" Datentypen Die "Zahlen" Datentypen: ganze Zahlen mit oder ohne Vorzeichen, Fließkomma Zahlen, sowie die Operationen darauf sind Gegenstand des ersten Kapitels. 1. Einführung 31
"Zeichen" Datentypen "Zeichen" Datentyp: Kenntnis des Zeichensatzes ist unerlässlich zur Interpretation eines Zeichens Zeichensätze legen die Zuordnung fest interne Darstellung Zeichen 1. Einführung 32
Zeichensätze Beispiele: ASCII (7 Bit) EBCDIC (vorwiegend IBM Mainframes) Unicode Der ASCII Zeichensatz (American Standard Code for Information Interchange): 7 Bit entspricht 128 möglichen Zeichen (nummeriert 0 127) Die Zeichen 0 31 und 127 sind Steuerzeichen also nicht als Einzelzeichen z.b. auf Bildschirm oder Drucker darstellbar. Die Zeichen 32 126 sind druckbare Zeichen. 1. Einführung 33
Zeichensätze Die ASCII Steuerzeichen: Viele Zeichen stammen noch aus der Zeit der Textterminals Bekannte Eingabe Zeichen: Return, Escape, Del, Backspace Viele Steuerzeichen werden heute nicht mehr benutzt Ein Textterminal aus den 80er Jahren 1. Einführung 34
Zeichensätze Druckbare Zeichen im ASCII Zeichensatz: 1. Einführung 35
Zeichensätze Nachteile des ASCII Zeichensatzes: Die 7 Bit Kodierung stammt aus einer Zeit, als "jedes Bit zählte" heutzutage sind 95 druckbare Zeichen zu wenig Ein Problem: Darstellung der nationalen Sonderzeichen (z.b. ä, ö, ü, ß ) Zwischenlösung: der Bereich 128 255 wurde für nationale Zeichen verwendet. Die Zuordnung war aber bei verschiedenen Systemen teilweise uneinheitlich Die weiteren 128 Zeichen reichen auch nicht für alle möglichen nationalen Sonderzeichen Moderne Lösung: Unicode Zeichen 1. Einführung 36
Zeichensätze Unicode: Ursprünglich 16 Bit, damit waren 65536 mögliche Zeichen darstellbar; die Nummern der Zeichen werden Code Points genannt. Mittlerweile sind 1.114.112 Code Points vorgesehen, von denen allerdings nur ca. 100.000 mit Zeichen belegt sind, u.a. lateinische, griechische, chinesische japanische Zeichen Damit häufige Zeichen weiterhin mit 8 Bit dargestellt werden können, verwendet man UTF 8: Zeichen 0 127: ASCII Zeichen 128 255: 1 3 weitere Bytes 1. Einführung 37