ERA-Zentralübung Maschinenprogrammierung M. Meyer LRR TU München 25.11.2016
Inhalt Aufgabe 4.1 Aufgabe 4.2 Zeichensätze
Aufgabe 4.1 Leuchtbandanzeige/Bargraph Bit Nr: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0x4209 Ein gesetztes Bit führt zu leuchtendem Segment. Annahme: Ausgabe über Zugriff auf 16-Bit-Speicherzelle.
Aufgabe 4.2: Waschprogramm-Interpreter Zweck: Nachbildung eines anderen Maschinenprogrammtyps durch den 80386 Basis: Sprache der Waschmaschine (Opcodes, Parameter) Durchführung: Befehl holen (get command) Befehl dekodieren (dispatch) Befehl ausführen (z.b. zaehler befehl)... und wieder von vorne (Schleife in interpreter) alles in 80386-Maschinencode
Aufgabe 4.2: Waschprogrammbefehle Name Code Beschreibung AKTOR n 0 n Steuert Aktor n an. PAUSE n 1 n Wartet n Sekunden. ZAEHLER n 2 n Startet eine Schleife mit n Durchläufen. SCHLEIFE n 3 n Schleifenende. TEMPERATUR n 4 n Wartet, bis Temperatur n erreicht ist. WASSERSTAND n 5 n Wartet, bis Wasserstand n erreicht ist. ENDE 6 x Beendet das Waschprogramm.
Aufgabe 4.2: Waschprogramm Pos. Code Mikrobefehl 0 0 1 AKTOR 1 ; Wasser einlassen 1 5 30 WASSERSTAND 30 ; Warten, bis Wasserstand = 30 2 0 0 AKTOR 0 ; Wasser aus 3 2 10 ZAEHLER 10 ; Schleifenintialisierung 4 0 4 AKTOR 4 ; Trommel drehen 5 1 10 PAUSE 10 6 0 0 AKTOR 0 ; Trommel aus 7 1 10 PAUSE 10 8 3 4 SCHLEIFE 4 ; 4-7 10 mal wiederholen 9 6 0 ENDE Programm im Speicher: 00 01 05 1e 00 00 02 0a 00 04 01 0a 00 00 01 0a 03 04 06 00
Aufgabe 4.2: Zusammenfassung Verdeutlichung der tatsächlichen Ausführung von Befehlen Was fehlt der Waschmaschinen-CPU? komplexe Befehle (Speicherzugriffe) flexible Befehlsformate (lange Konstanten,... ) Register potenzielle Parallelität von Befehlen weitergehende Sprungbefehle ( turingmächtig) Steuerung von Datenflüssen Das kommt alles in Mikroprogrammierung...
Zeichensätze Interpretation von Bits zu Zeichen (Buchstaben, etc.) Problem: Es gibt so viele Zeichen... Lösung 1: Beschränkung auf lateinische Buchstaben (ASCII) Lösung 2: Länderspezifische Erweiterungen (z.b. ISO-Latin) Lösung 3: mehr Bits (Unicode) Lösung 4: Kodierung mit variabler Länge (UTF-8)
ASCII American Standard Code for Information Interchange 8 Bit pro Zeichen zunächst nur 0-127 benutzt (7 Bit) 0x00-0x1f: Control Codes 0x30-0x39: 0-9 0x41-0x5a: A-Z 0x61-0x7a: a-z Keine Umlaute o.ä., nur für Englisch nutzbar
ISO-Latin 8859-x Erweiterung von ASCII im Bereich 160-255 länderspezifische Erweiterung für div. europäische Sprachen Zentraleuropa (D,... ): ISO 8859-1 Oct Dec Hex Char ----------------------- 304 196 C4 Ä 326 214 D6 Ö 334 220 DC Ü 337 223 DF ß 344 228 E4 ä 366 246 F6 ö 374 252 FC ü
Unicode 16 Bit pro Zeichen, 0-255 entspricht ISO 8859-1 inkompatibel zu ASCII Reicht aber immer noch nicht...
Unicode Wikipedia: Klingon alphabets (2015-11-19)
Unicode Erweiterung: 17 Ebenen zu je 2 16 = 65536 Zeichen abzüglich interner Steuersymbole 1.111.998 Symbole
UTF-16 ältestes Kompressionsformat von Unicode 20 Bit in zwei Unicode-Zeichen ( Surrogates ) gut für nicht-lateinische Sprachen Zeichen durch 2 oder 4 Byte kodiert
UTF-8 Komprimierung von Unicode mit variabler Bytelänge ASCII-Bereich identisch (ein Byte), dann 2-4 Byte Unicode 0x00000000-0x0000007F: 0xxxxxxx Unicode 0x00000080-0x000007FF: 110xxxxx 10xxxxxx (ASCII) (11 Bit) Unicode 0x00000800-0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx Unicode 0x00010000-0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx Ä in 8859-1 -> Ä in UTF-8 0xc4 = (000) 1100.0100 -> 110(00011) 10(000100) = 0xc3 0x84
Speicherung von Zeichenketten Zeichen liegen hintereinander im Speicher Problem: Wann ist die Zeichenkette zu Ende? Lösung 1: Spezielles Zeichen am Ende C-Strings: Ende mit 0-Byte markiert Länge erst nach Durchsuchen bekannt Lösung 2: Länge am Anfang Pascal-Strings: Word/Dword am Anfang höhere Zusatzkosten
Zeichenausgabe Zeichenspeicher: Zeichen hintereinander im Speicher in Matrix oder mit Endezeichen Matrix: z.b. 80x24, typischer VGA-Zeichenmodus Endezeichen: z.b. pro Zeile, Sinclair ZX81 (Newline), Jasmin-Arraymode (0-Byte) Serielle Ausgabe/Übertragung Typischerweise I/O (z.b. RS232, Jasmin-Pipemode)