0 Motivation Jörg Roth 2 Wir gehen in dieser Vorlesung der Frage nach Wie rechnet ein Rechner? Als Softwareentwickler könnten wir in einem Programm z.b. folgende Anweisung schreiben: a = a+2*b; Wie wird diese Anweisung letztlich ausgeführt?
Jörg Roth 3 Höhere Programmiersprache Assembler und Maschinenprogramm int a=1, b=2; a = a+2*b; lw $t0, a lw $t1, b add $t0, $t0, $t1 add $t0, $t0, $t1 sw $t0, a Register und Microprogramm Gatter >1 Transistoren
Jörg Roth 4 Höhere Programmiersprache Assembler und Maschinenprogramm int a=1, b=2; a = a+2*b; lw $t0, a lw $t1, b add $t0, $t0, $t1 add $t0, $t0, $t1 sw $t0, a Register und Microprogramm Gatter >1 Transistoren
Jörg Roth 5 Was bieten uns die verschiedenen Ebenen als Ausdrucksmittel? Mit welchen "Objekten" haben wir auf den verschiedenen Ebenen zu tun? Höhere Programmiersprache: int a=1, b=2; Es stehen höhere Programmiersprachenkonzepte a = a+2*b; zu Verfügung: Namenschemata, Objekte, Vererbung,... Komfortable Datentypen: String, Array, Hashtable,... Komfortable Kontrollstrukturen: while, if, switch,... Weitere Funktionen: Mathematische Bibliotheken (sin, cos etc.), Dateizugriffe, Netzwerkzugriffe, Zugriffe auf Peripherie etc.
Jörg Roth 6 Assembler und Maschinenprogramm: 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. lw $t0, a lw $t1, b add $t0, $t0, $t1 add $t0, $t0, $t1 sw $t0, a 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
Jörg Roth 7 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, Substraktion, oft keine Multiplikation, Division Logische Bit-Operationen Wenige Kontrollstrukturen: meist nur Sprung, bedingter Sprung Sprung in ein Unterprogramm
Register und Microprogramm: Jörg Roth 8 Es gibt nur noch Register und elementare Operationen darauf Typische Operationen: Addieren, Subtrahieren, Inkrementieren, Dekrementieren Das Microprogramm steuert den Datenfluss (Welches Register wird mit welchem Operationselement verbunden?) Gatter: Es gibt nur noch Bits und Operationen auf Bits Typische Operation: Bit 1 AND Bit 2 Bit 3 >1
Ebene der Transistoren: Jörg Roth 9 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)
Jörg Roth 10 Höhere Programmiersprache Assembler und Maschinenprogramm int a=1, b=2; a = a+2*b; lw $t0, a lw $t1, b add $t0, $t0, $t1 add $t0, $t0, $t1 sw $t0, a Register und Microprogramm GDI Gatter >1 Transistoren
Daten und Datentypen: Jörg Roth 11 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
Jörg Roth 12 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 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)
Jörg Roth 13 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 Gebrochene Zahlen: Fließkomma-Zahlen: float, double Machmal (insb. in Datenbanken): Festkomma-Datentypen (z.b: um Euro-Beträge auszudrücken)
Zusammengesetzte Datentypen: Jörg Roth 14 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 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
Jörg Roth 15 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 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
Die "Zahlen"-Datentypen Jörg Roth 16 ganze Zahlen mit oder ohne Vorzeichen, Fließkomma-Zahlen, sowie die Operationen darauf sind Gegenstand des ersten Kapitels. Zeichen-Datentyp: Kenntnis des Zeichensatzes ist unerlässlich zur Interpretation eines Zeichens Zeichensätze legen die Zuordnung interne Darstellung Zeichen fest
Beispiele: ASCII (7 Bit) EBCDIC (vorwiegend IBM Mainframes) Unicode Jörg Roth 17 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.
Die ASCII-Steuerzeichen: Viele Zeichen stammen noch aus der Zeit der Textterminals Bekannte Eingabe-Zeichen: Return, Escape, Del, Backspace Jörg Roth 18 Viele Steuerzeichen werden heute nicht mehr benutzt Nr. Bedeutung Nr. Bedeutung Nr. Bedeutung 0 Null character 11 Vertical Tab 22 Synchronous Idle 1 Start of Header 12 Form feed 23 End of Trans. Block 2 Start of Text 13 Carriage return 24 Cancel 3 End of Text 14 Shift Out 25 End of Medium 4 End of Transmission 15 Shift In 26 Substitute 5 Enquiry 16 Data Link Escape 27 Escape 6 Acknowledgment 17 Device Control 1 (oft XON) 28 File Separator 7 Bell 18 Device Control 2 29 Group Separator 8 Backspace 19 Device Control 3 (oft XOFF) 30 Record Separator 9 Horizontal Tab 20 Device Control 4 31 Unit Separator 10 Line feed 21 Negative Acknowledgement 127 Delete Ein Textterminal aus den 80er-Jahren
Jörg Roth 19 Druckbare Zeichen im ASCII-Zeichensatz: Nr. Zeichen Nr. Zeichen Nr. Zeichen Nr. Zeichen Nr. Zeichen Nr. Zeichen 32 Blank 48 0 64 @ 80 P 96 ` 112 p 33! 49 1 65 A 81 Q 97 a 113 q 34 " 50 2 66 B 82 R 98 b 114 r 35 # 51 3 67 C 83 S 99 c 115 s 36 $ 52 4 68 D 84 T 100 d 116 t 37 % 53 5 69 E 85 U 101 e 117 u 38 54 6 70 F 86 V 102 f 118 v 39 ' 55 7 71 G 87 W 103 g 119 w 40 ( 56 8 72 H 88 X 104 h 120 x 41 ) 57 9 73 I 89 Y 105 i 121 y 42 * 58 : 74 J 90 Z 106 j 122 z 43 + 59 ; 75 K 91 [ 107 k 123 { 44, 60 < 76 L 92 \ 108 l 124 45-61 = 77 M 93 ] 109 m 125 } 46. 62 > 78 N 94 ^ 110 n 126 ~ 47 / 63? 79 O 95 _ 111 o
Jörg Roth 20 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
Unicode: Jörg Roth 21 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 Zeichen griechische Zeichen chinesische Zeichen 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