Kode-Erzeugung, Abstrakte Maschinen. Grundlagen der Programmierung 2. Rechnerarchitekturen. Rechnerarchitekturen. Dann Kode-Erzeugung

Größe: px
Ab Seite anzeigen:

Download "Kode-Erzeugung, Abstrakte Maschinen. Grundlagen der Programmierung 2. Rechnerarchitekturen. Rechnerarchitekturen. Dann Kode-Erzeugung"

Transkript

1 Kode-Erzeugung, Abstrakte Maschinen Grundlagen der Programmierung 2 Kode-Erzeugung (Compiler 5G) Prof. Dr. Manfred Schmidt-Schauß Kode-Erzeugung: Syntaxbaum Ausgabeprogramm Starte mit Syntaxbaum: Wähle Zielarchitektur Wähle abstrakte Maschine abstrakte Maschine Darstellung des eingegebenen Programms Zum Beispiel: andere Programmiersprache (C), oder Prozessor als Stackmaschine oder Registermaschine mit Assembler oder Akkumulatormaschine zur Zielarchitektur spezifiziert durch: Programmiersprache und operationale Semantik Sommersemester 2013 Dann Kode-Erzeugung aus dem Syntaxbaum in die Sprache der abstrakten Maschine. Grundlagen der Programmierung 2 (Comp-G) 2/46 Rechnerarchitekturen Rechnerarchitekturen Maschinenprogramm sieht externe Rechnerarchitektur Maschinenbefehlssatz interne Rechnerarchitektur Software Schnittstelle Hardware Die externe Architektur legt durch den Maschinenbefehlssatz fest, wie ein Rechner von der Seite der Software her angesprochen werden kann. Dies ist die für den Kodegenerator maßgebliche Schnittstelle. Die interne Architektur bezieht sich auf den internen Aufbau und das Organisationsprinzip eines Rechners. Hardware bzw. mittels Software modellierte Hardwareschnittstelle. Grundlagen der Programmierung 2 (Comp-G) 3/46 Grundlagen der Programmierung 2 (Comp-G) 4/46

2 Typische externe Architekturen Beispiel: externe Architekturen Stackmaschinen: Maschinenbefehle beziehen sich implizit auf einen Stack. Das Ergebnis von Operationen wird im Stack abgelegt. Dieser wird z.t. durch Register in der CPU nachgebildet. Akkumulatormaschinen: implizites Akkumulator-Register. Operationen beziehen sich auf einen Operanden und implizit den Akkumulator. Registersatzmaschinen: Befehle verknüpfen zwei oder drei Operanden (Zwei- bzw. Dreiadressbefehle), die Register oder Hauptspeicheradressen sein können. Es gibt praktisch nur noch RISC-Befehlssätze mit starken Beschränkungen (s.u.) a := b c Die Befehlsfolge (Programm) dazu: Stack Akkumulator Registersatz PUSH b LOAD c LOAD R1,c PUSH c ADD b ADD R1,b ADD STORE a STORE a,r1 (a Variable, b, c Konstanten.) Grundlagen der Programmierung 2 (Comp-G) 5/46 Grundlagen der Programmierung 2 (Comp-G) 6/46 Abarbeitung auf der Stackmaschine Abarbeitung auf der Akkumulatormaschine: Befehl Stack......, PUSH b..., b PUSH c..., b, c ADD..., d wobei d = b c Befehl Zustand... Akku =? LOAD c Akku = c ADD b Akku = d wobei d = b c STORE a Akku = d, Adresse a wird mit d überschrieben Grundlagen der Programmierung 2 (Comp-G) 7/46 Grundlagen der Programmierung 2 (Comp-G) 8/46

3 Abarbeitung auf der Registersatzmaschine: Kode-Erzeugung und abstrakte Maschinen Befehl Zustand Anmerkung... R1 =? R2 =?,... LOAD R1,c R1 = c, R2 =?,... ADD R1,b R1 = c, R2 =?,... wobei c := c b STORE a,r1 R1 = c, R2 =?,... Speicheradresse a wird mit dem Inhalt von R1 überschrieben Kode-Erzeugung: wähle eine Architektur (rechnernah) konzipiere passende abstrakte Maschine erzeuge Zwischencode (als Programm für die abstrakte Maschine) transformiere/optimiere Zwischencode Erzeuge Zielkode aus Zwischencode Grundlagen der Programmierung 2 (Comp-G) 9/46 Grundlagen der Programmierung 2 (Comp-G) 10/46 Abstrakte Maschine Stackmaschine: Zwischencode-Erzeugung besteht aus Modellierung des globalen Speichers: I.a. eine Kombination von Hauptspeicher, Stack, Register, Akkumulator, usw. abstrakte Maschinensprache: Normalerweise Programmiersprache für imperative und prozedurale Programme mit Zugriff auf die verwendeten Speicherobjekte. operationale Semantik: Interpreter für die abstrakte Maschinenbefehle Datenstrukturen dazu: Stack (bzw. Stapel; Keller) Programm, Programmzeiger Hauptspeicher Anmerkungen: Der Stack wird von oben her adressiert (wie Liste) einfachsten Stackbefehle: push, pop Annahme: nur ganze Zahlen sind auf dem Stack Grundlagen der Programmierung 2 (Comp-G) 11/46 Grundlagen der Programmierung 2 (Comp-G) 12/46

4 Operationen eines Stackprogramms pushk n pop n ist Zahlenkonstante, die auf den Stack obendrauf gelegt wird. das oberste Element des Stacks wird entfernt. push i i ist eine Zahl als Stackadresse; 0 = oberstes, 1 = zweites, usw. dieses Element des Stacks wird oben auf den Stack kopiert.,,, / arithmetische Operationen: Jeweils die obersten beiden Elemente des Stacks werden verknüpft und danach vom Stack entfernt. D.h. aus... ; a; b wird unter der Operation : der Stack..., a b. print Gebe das Ergebnis aus: drucke das oberste Element des Stacks und lösche das gedruckte Element. Beispiel Stackmaschine Berechne : Befehl Stack pushk 1 1; pushk 3 1; 3 4 pushk 5 4; 5 pushk 6 4; 5; 6 * 4; print Beschränkungen i, k konstant in pushk k und push i Grundlagen der Programmierung 2 (Comp-G) 13/46 Grundlagen der Programmierung 2 (Comp-G) 14/46 Operationale Semantik der Stackbefehle Interpreter I mit zwei Argumenten: das aktuelle Programm als Liste. Der nächste (aktuelle) Befehl ist das erste Element der Liste. Stack als Liste. P rogramm Stack I (pop : progr) (a : stackr) I progr stackr I (pushk k : progr) stack I progr (k : stack) I (push i : progr) stack I progr (k :: stack) wobei k = stack!! i I ( : progr) (a : b : stackr) I progr (c : stackr) wobei c = b a I ( : progr) (a : b : stackr) I progr (c : stackr) wobei c = b a I (print : rest) (a : stackr) I progr (stackr) drucke a als Seiteneffekt. Grundlagen der Programmierung 2 (Comp-G) 15/46 Funktionsaufrufe Übergabekonventionen zu Argumenten: Argumente sind auf dem Stack das letzte Argument ist oben auf dem Stack usw. Am Ende der Auswertung des Funktionsaufrufs steht statt der Argumente das Ergebnis auf dem Stack Berechne x 2 y 2, wenn der Stack am Anfang..., x, y ist: aktueller Befehl Stackinhalt danach r; x; y push 0 r; x; y; y r; x; y 1 wobei y 1 = y y push 1 r; x; y 1 ; x push 0 r; x; y 1 ; x; x r; x; y 1 ; x 1 wobei x 1 = x x r; x; z wobei z = y 1 x 1 print r; x z wird gedruckt Übergabekonvention nicht ganz erfüllt: x statt z Grundlagen der Programmierung 2 (Comp-G) 16/46

5 Funktionsaufrufe; slide Funktionsaufruf: jetzt richtig Beispiel jetzt mit richtiger Übergabekonvention des Resultats. Um Übergabekonvention sauber zu erfüllen: slide m n Schiebe die obersten m Elemente des Stacks um n nach unten. D.h. n Elemente unter den m oberen verschwinden. Operationale Semantik des slide-befehls: I (slide m n : progr) stack I progr (take m stack (drop (nm) stack)) aktueller Befehl Stackinhalt r; x; y push 0 r; x; y; y r; x; y 1 wobei y 1 = y y push 1 r; x; y 1 ; x push 0 r; x; y 1 ; x; x r; x; y 1 ; x 1 wobei x 1 = x x r; x; z wobei z = y 1 x 1 slide 1 1 r; z push 0 r; z; z print r; z Grundlagen der Programmierung 2 (Comp-G) 17/46 Grundlagen der Programmierung 2 (Comp-G) 18/46 Fallunterscheidungen und Sprünge Beispiel: fakultaet marke. branchz marke jump marke symbolische Sprungmarke im Stack-Programm. Wenn auf dem Stack eine Null steht, springe zu marke und lösche das oberste Element Ansonsten gehe zum nächsten Befehl (und lösche das oberste Element) Springe zu marke. Die operationale Semantik muss erweitert werden: I(.,.,.) drittes Argument ist Kopie des Programms. P rog Stack P rogkopie I (marke : prog) stack progs I prog stackprogs I (branchz marke) : prog) (top : stack) progs if (0 == top) then I (dropwhile (marke /=) progs) stack progs else I prog stack progs I (jump marke) : prog) stack progs I (dropwhile (marke /=) progs) stack progs anfang. push 0 loop. push 1 pushk 1 - branchz ende. push 1 pushk 1 - push 1 push 1 * slide 2 2 jump loop ende. slide 1 1 print Grundlagen der Programmierung 2 (Comp-G) 19/46 Grundlagen der Programmierung 2 (Comp-G) 20/46

6 Programmablauf zu (fakultaet 3) Kode-Erzeugung für Stackmaschine Stack Befehl 3 push 0 3,3 push 1 3,3,3,1 pushk 1 3,3,2-3,3,2 branchz e. 3,3 push 1 3,3,3 pushk 1 3,3,3,1-3,3,2 push 1 3,3,2,3 push 1 3,3,2,3,2 * 3,3,2,6 slide 2 2 Stack Befehl 2,6 jump loop. 2,6 push 1 2,6,2 pushk 1 2,6,2,1-2,6,1 branchz e. 2,6 push 1 2,6,2 pushk 1 2,6,2,1-2,6,1 push 1 2,6,1,6 push 1 2,6,1,6,1 * 2,6,1,6 slide 2 2 Stack Befehl 1,6 jump loop. 1,6 push 1 1,6,1 pushk 1 1,6,1,1-1,6,0 branchz e. 1,6 slide ENDE Beispiel-Ausdruck Der Syntaxbaum dazu in Präfixschreibweise ist: minus (plus 1 3) (mal 5 6) Der Syntaxbaum graphisch: Grundlagen der Programmierung 2 (Comp-G) 21/46 Grundlagen der Programmierung 2 (Comp-G) 22/46 Kode-Erzeugung für Stackmaschine Speicheradressierung in der Stackmaschine Kode-Erzeugung mittels rekursivem Programm auf dem Syntaxbaum: minus s t Code für s; Code für t; mal s t Code für s; Code für t; plus s t Code für s; Code für t; Konstante pushk Konstante Dies ergibt: Code(plus 1 3); Code(mal 5 6); Das Stackmaschinenprogramm ist dann: Speicher ist dargestellt als Array SP[0..] von Integers Zustand der Stackmaschine besteht aus: Stack Programm, Programmzeiger globaler Speicher SP[.] Neue Befehle: iget iput Der Wert SP[Stack[0]] wird auf den obersten Platz des Stacks abgelegt. Die Adresse auf dem Stack wird gelöscht. Der Wert Stack[0] wird nach SP[Stack[1]] kopiert. Die obersten zwei Elemente des Stacks werden gelöscht. pushk 1; pushk 3; ; pushk 5; pushk 6; ; Grundlagen der Programmierung 2 (Comp-G) 23/46 Grundlagen der Programmierung 2 (Comp-G) 24/46

7 Erweiterter Interpreter Zuweisungen I(.,.,.,.) hat 4 Argumente: Programm, Stack, Programmkopie, Speicher, Operationale Semantik: I (iget : prog) (a : stack) progs SP I prog (SP [a] : stack) progs SP I (iput : prog) (v : a : stack) progs SP I prog stack progs SP [a v] x := x 1 kann erzeugt werden: Befehl Stack Anmerkungen r; SP[123765] = 7 push 0 r; ; iget r; ; 7 pushk 1 r; ; 7; 1 r; ; 8 iput r SP[123765] = 8 Grundlagen der Programmierung 2 (Comp-G) 25/46 Grundlagen der Programmierung 2 (Comp-G) 26/46 Zusammengesetzte Objekte im Speicher Operationale Semantik der Paar-Befehle Paare a, b bestehen aus zwei Adressen a, b (d.h. Zahlen) und sind adressierbar SP-Einträge: ein Paar aus zwei Zahlen, oder eine Zahl. Neue Befehle für Paare: genpair readpair getmem vorher sind zwei Adressen auf dem Stack. Es wird ein Objekt erzeugt, das diese beiden Adressen enthält, und an einer neuen Adresse steht. Diese wird auf dem Stack abgelegt. Beide Adressen werden vorher vom Stack gelöscht. Dies Operation nimmt die oberste Element des Stacks als Adresse, löscht diese vom Stack, liest an dieser Adresse im Speicher das Paar und legt die beiden Adressen des Paars auf dem Stack ab. Legt einen Speicherplatz für eine Zahl an und legt die Adresse auf dem Stack ab. Die Adresse wird auf dem Stack gelöscht. Interpreter mit 5 Argumenten: nächste freie Adresse als weiteres Argument Operationale Semantik: I(genpair : prog) (b : a : stack) progs SP c I prog (c : stack) progs SP [c a, b ] (c 1) I(readpair : prog) (c : stack) progs SP c I prog (b : a : stack) progs SP[c a, b ] c wobei SP[c] = a, b ist I(getmem : prog) stack progs SP c I prog (c : stack) progs SP (c 1) Grundlagen der Programmierung 2 (Comp-G) 27/46 Grundlagen der Programmierung 2 (Comp-G) 28/46

8 Beispiel Code-Optimierung durch den Compiler Die Liste [1, 2] kann man jetzt erzeugen durch: Befehl Stack Anmerkungen r; nächste freie Adresse = getmem r; nächste freie Adresse = push 0 r; 12348; pushk 1 r; 12348; 12348; 1 iput r; SP[12348] := 1 getmem r; 12348; nächste freie Adresse = push 0 r; 12348; 12349; pushk 2 r; 12348; 12349; 12349; 2 iput r; 12348; SP[12349] := 2 genpair r; SP[12350] := 12348, Optimierung auf hoher Ebene: Im Syntaxbaum oder nach der Zwischencodeerzeugung. Prozedurersetzung (procedure inlining) Schleifentransformation, partielle Auswertung Nach Kode-Erzeugung Gucklochoptimierung Elimination redundanter Sprünge Umstellungen der Befehle Grundlagen der Programmierung 2 (Comp-G) 29/46 Grundlagen der Programmierung 2 (Comp-G) 30/46 Gucklochoptimierungen Gucklochoptimierungen Gucklochoptimierungen: lokale Optimierungen Beispiel Zwischencode:... ; push i; pop ;... Die Sequenz push i; pop kann man streichen, da ohne Effekt Es ist i.a. nicht möglich, direkt optimalen Code zu erzeugen. Das liegt an der schematischen Vorgehensweise Beispiel Für die Funktion f(x) = x, wird erzeugt: push 0; slide 1 1 Diese Sequenz ist redundant und kann eliminiert werden. Generell: Gucklochoptimierungen ergeben nur leichte Verbesserungen. Bessere Optimierung erfordert höheren Aufwand im Compiler. Grundlagen der Programmierung 2 (Comp-G) 31/46 Grundlagen der Programmierung 2 (Comp-G) 32/46

9 Prozedurersetzung Auf der Ebene des Syntaxbaums (sqrt (quadratsumme x y)) wird durch Ersetzung der Funktion quadratsumme zu (sqrt (x*x y*y)) Vorteile erspart einen Prozeduraufruf Semantik-erhaltend in nicht-strikten Prog. Sprachen. Beispiel: Terminierungsverhalten anders In strikt auswertenden Programmiersprachen (z.b. Python) def f (x,y): if y == 0 then x else 0 def g (x): return g(x) Nachteile mehrfache Einsetzung kann den Programmkode vergrößern sogar exponentielle Vergrößerung ist möglich Nicht-Terminierung des Ersetzungsprozesses: z.b. bei rekursiven Funktionen. Nicht Semantik-erhaltend in strikten Programmier-Sprachen: im Rumpf der ersetzten Prozedur könnten die Parameter mehrfach vorkommen Verdopplung von Seiteneffekten ( Zuweisungen, Drucken) f(g(x),1) wird zu if 1 == 0 then g(x) else 0 Grundlagen der Programmierung 2 (Comp-G) 33/46 Grundlagen der Programmierung 2 (Comp-G) 34/46 Beispiel: Verdopplung von Seiteneffekten Partielle Auswertung def f (x): x*x def g(x): print x;return x f (g x) wird zu g(x) * g(x) Berechnungen zur Compilezeit! Im Prinzip ist dies auf jede Auswertung oder Berechnung anwendbar, wenn diese nicht von irgendeiner Eingabe abhängt. statt 10*10 y*y kompiliert man: 100 y*y Partielle Auswertung: Interpreter Wenn im Compiler vorhanden, kann man den Interpreter zur partiellen Auswertung benutzen. Verdopplung (hier print x) tritt ein, wenn ein formaler Parameter der ersetzten Prozedur mehr als einmal im Rumpf vorkommt. Vermeiden kann man diesen Effekt durch ein let-konstrukt, wobei allerdings der Optimierungseffekt verloren gehen kann. Terminierung Seiteneffekte erreicht man durch maximale Anzahl Schritte, oder durch Beschränkung der Auswertungsvarianten während der partiellen Auswertung sind zu vermeiden. Grundlagen der Programmierung 2 (Comp-G) 35/46 Grundlagen der Programmierung 2 (Comp-G) 36/46

10 Partielle Auswertung: Varianten Instanziierung von Funktionen: map f [] = [] map f (x:xs) = (f x) : map f xs map quadrat Optimierung mittels partieller Auswertung: mapq [] = [] mapq (x:xs) = (quadrat x) : mapq xs Kode-Erzeugung für Registermaschinen RISC (reduced instruction set computer) Registermaschinen haben Universalregister Befehle: Üblich sind Dreiadress-Befehle OP DEST, SRC1, SRC2 entspricht DEST:= SRC1 OP SRC2 Diese können nur auf Registern ausgeführt werden. UND: Lade- und Speicher-Befehle (Hauptspeicher) Register: feste und gleiche Bytelänge Befehlskodierung im Speicher ebenfalls feste und gleiche Bytelänge Das Pipelining wird erleichtert (d.i. zeitlich überlappende Ausführung von Befehlen) Grundlagen der Programmierung 2 (Comp-G) 37/46 Grundlagen der Programmierung 2 (Comp-G) 38/46 Registersatzmaschinen, Beispiel Codegenerierung für RISC-Registersatzmaschinen Die Operation wird durch drei Befehle realisiert: LOAD R0,a ADD R0,R6 STORE R0,a SP[a] := SP[a] R6 Codegenerierung in drei Schritten; Eingabe: Syntaxbaum 1. Schritt: Einführung von Hilfsvariablen h i für jeden Knoten im Syntaxbaum. 2. Schritt Lebenszeitanalyse der Hilfsvariablen. 3. Schritt: Zuordnung von Registern zu Hilfsvariablen Ausgabe: Folge von RISC-Befehlen. Grundlagen der Programmierung 2 (Comp-G) 39/46 Grundlagen der Programmierung 2 (Comp-G) 40/46

11 Codegenerierung für RISC-Registersatzmaschinen: Codegenerierung RegisterMaschine 1. Schritt: Einführung von Hilfsvariablen h i für jeden Knoten im Syntaxbaum. Umwandlung in Folge von Zuweisung (bottom-up). Dies nennt man auch: SSA-Form (static single assignment: statische einmalige Zuweisung). Beispiel a b c wird zu h 1 := b c; h 2 := h 1 a; h 2 h 1 a b c Bei einer Load/Store-(RISC)-Architektur können nur Register verknüpft werden. a, b, c müssen vorher in Register geladen werden. a b c wird wie folgt übersetzt: Zuweisungen unter RISC h 5 h 4 h 1 h 2 h 3 h 1 := a; h 2 := b; h 3 := c; h 4 := h 2 h 3; h 5 := h 4 h 1; Normaler Syntaxbaum h 2 h 1 a b c h 1 := b c; h 2 := h 1 a; Grundlagen der Programmierung 2 (Comp-G) 41/46 Grundlagen der Programmierung 2 (Comp-G) 42/46 Lebenszeitanalyse von Variablen 2. Schritt Lebenszeitanalyse: eine Sequenz von Anweisungen wird rückwärts von der letzten zur ersten Anweisung durchlaufen. Beim Analysieren einer Anweisung h 1 := h 2 op h 3 wird die Variable h 1 als tot und die Variablen h 2 und h 3 als lebendig markiert. ermittelte Lebenszeiten: Zuweisung h 1 h 2 h 3 h 4 h 5 h 1 := a T T T T T h 2 := b L T T T T h 3 := c L L T T T h 4 := h 2 h 3 L L L T T h 5 := h 4 h 1 L T T L T Lebenszeit und Umsortierung Anzahl der Register: maximale L-Anzahl pro Zeile drei Register erforderlich Zuweisung h 1 h 2 h 3 h 4 h 5 h 1 := a T T T T T h 2 := b L T T T T h 3 := c L L T T T h 4 := h 2 h 3 L L L T T h 5 := h 4 h 1 L T T L T Nach semantikerhaltender Umsortierung: Nur noch 2 Register erforderlich. Zuweisung h 1 h 2 h 3 h 4 h 5 h 2 := b T T T T T h 3 := c T L T T T h 4 := h 2 h 3 T L L T T h 1 := a T T T L T h 5 := h 4 h 1 L T T L T Grundlagen der Programmierung 2 (Comp-G) 43/46 Grundlagen der Programmierung 2 (Comp-G) 44/46

12 Register-Programm Register-Programm 3. Schritt Registerzuordnung. Zuweisungen unter RISC Umsortierung und Register-Zuordnung 3. Schritt Registerzuordnung. Zuweisungen unter RISC Umsortierung Registerzuweisungen und Register-Zuordnung h 5 h 4 h 1 h 2 h 3 h 1 := a; h 2 := b; h 3 := c; h 4 := h 2 h 3; h 5 := h 4 h 1; R 1 h 2 := b; R 2 h 3 := c; R 1 h 4 := h 2 h 3; R 2 h 1 := a; R 1 h 5 := h 4 h 1; h 5 h 4 h 1 h 2 h 3 h 1 := a; h 2 := b; h 3 := c; h 4 := h 2 h 3; h 5 := h 4 h 1; R 1 h 2 := b; R 2 h 3 := c; R 1 h 4 := h 2 h 3; R 2 h 1 := a; R 1 h 5 := h 4 h 1; R 1 := b; R 2 := c; R 1 := R 1 R 2; R 2 := a; R 1 := R 1 R 2; Grundlagen der Programmierung 2 (Comp-G) 45/46 Grundlagen der Programmierung 2 (Comp-G) 46/46

Grundlagen der Programmierung 2

Grundlagen der Programmierung 2 Grundlagen der Programmierung 2 Kode-Erzeugung (Compiler 5G) Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2018 Codeerzeugung Quelltext (String) Syntaxbaum Zwischencode Lexikalische Analyse Syntaktische

Mehr

Stackmaschine; Speicheradressierung

Stackmaschine; Speicheradressierung Stackmaschine; Speicheradressierung Erweiterung um globalen Speicher (Heap, Halde) pro Speicherplatz eine Zahl. Notation ist als Array SP [0..]. Zugriff mittels Adresse (Index): eine Zahl i.a.: Zahlen

Mehr

Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen

Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen Kode-Erzeugung: Syntaxbaum Ausgabeprogramm Starte mit Syntaxbaum: Darstellung des eingegebenen Programms Wähle Zielarchitektur Wähle abstrakte

Mehr

Übersetzer (Compiler): Kodegenerierung

Übersetzer (Compiler): Kodegenerierung Kapitel 5 Übersetzer (Compiler): Kodegenerierung 5.1 Rechnerarchitekturen Maschinenprogramme Software externe Rechnerarchitektur Maschinenbefehlssatz interne Rechnerarchitektur Layout Hardware die externe

Mehr

Kode-Erzeugung für Registersatz-Maschinen

Kode-Erzeugung für Registersatz-Maschinen Kode-Erzeugung für Registersatz-Maschinen Die meisten Maschinen sind heutzutage Registersatzmaschinen, die einen Satz von 16-32 Universalregistern besitzen. Üblich sind Dreiadress-Befehle OP DEST, SRC1,

Mehr

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen Teil IV Semantik imperativer Sprachen 201 1. Einführung Alternativen zur Beschreibung der Semantik: natürliche Sprache (bisher, unpräzise) operational Reduktionssemantik (vgl. Haskell-Semantik in Kap.

Mehr

TECHNISCHE HOCHSCHULE NÜRNBERG GEORG SIMON OHM Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl

Mehr

DieÜbersetzung funktionaler Programmiersprachen

DieÜbersetzung funktionaler Programmiersprachen DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2009 5. April 2009 Vorteile bei der Verwendung höherer Programmiersprachen Vorteile bei der Verwendung höherer Programmiersprachen 1. Einfache Notation

Mehr

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17 1 Maschinenunabhängige Optimierungen Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17 Optimierungen Automatische Optimierungen sind nötig, weil unoptimierter Code meist besser lesbar ist.

Mehr

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab... 0 1 2 0 2 1 1 2 0 2 1 0 Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab... 0 1 2 0 1 2 1 1 3 2 2 3 212 Um solche Tabellen leicht implementieren zu können, stellt Java das switch-statement

Mehr

III.1 Prinzipien der funktionalen Programmierung - 1 -

III.1 Prinzipien der funktionalen Programmierung - 1 - 1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung

Mehr

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung

Mehr

Grundlagen der Programmierung 2. Operationale Semantik

Grundlagen der Programmierung 2. Operationale Semantik Grundlagen der Programmierung 2 Operationale Semantik Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 29. April 2009 Semantik von Programmiersprachen Semantik = Bedeutung

Mehr

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

4. Mikroprogrammierung (Firmware)

4. Mikroprogrammierung (Firmware) 4. Mikroprogrammierung (Firmware) 4. Ein Mikroprogramm-gesteuerter Computer 4.2 Mikroprogramm-Beispiel: Multiplikation 4.3 Interpretation von Maschinenbefehlen durch ein Mikroprogramm 4. Mikroprogrammierung

Mehr

Grundlagen der Programmierung 2 (1.A)

Grundlagen der Programmierung 2 (1.A) Grundlagen der Programmierung 2 (1.A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 18. April 2007 Grundlagen der Programmierung 2: Geplanter Inhalt der ersten Hälfte

Mehr

Konzepte der Programmiersprachen

Konzepte der Programmiersprachen Konzepte der Programmiersprachen Lehrstuhl Prof. Plödereder Eduard Wiebe Institut für Softwaretechnologie Abteilung Programmiersprachen und Übersetzerbau Sommersemester 2007 Programm-Ausführung Programmiersprachen

Mehr

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen

Mehr

Hochschule Düsseldorf University of Applied Sciences HSD RISC &CISC

Hochschule Düsseldorf University of Applied Sciences HSD RISC &CISC HSD RISC &CISC CISC - Complex Instruction Set Computer - Annahme: größerer Befehlssatz und komplexere Befehlen höhere Leistungsfähigkeit - Möglichst wenige Zeilen verwendet, um Aufgaben auszuführen - Großer

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) J. Zhang zhang@informatik.uni-hamburg.de Universität Hamburg AB Technische Aspekte Multimodaler Systeme

Mehr

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 14. Okt. 2015 Computeraufbau: nur ein Überblick Genauer: Modul Digitale Systeme (2. Semester) Jetzt: Grundverständnis

Mehr

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002 1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben

Mehr

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland. 1 Programmierung 2 Übersetzer: Code-Erzeugung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Bytecodes Der Java Übersetzer erzeugt keine Maschinensprache

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2016 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

1 pulsierender Speicher

1 pulsierender Speicher 1 pulsierender Speicher 1.1 Aufgabentyp Gegeben sei das folgende C-Programm: [...] (a) Geben Sie den Gültigkeitsbereich jedes Objektes des Programms an. (b) Stellen Sie die Rechnung des Programms für die

Mehr

3. Sprachkonzepte und ihre Übersetzungen

3. Sprachkonzepte und ihre Übersetzungen Übersetzung von dynamischen Feldern: var feld: array[u1..o1,,uk..ok] of integer; //ui, oi nicht alle konstant; z.b. Parameter Speicherbelegung: (Felddeskriptor) 0 fiktive Anfangsadresse 1 Feldgröße 2 Subtr.

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Kapitel 22: Mima-X Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik

Mehr

Übung Rechnerstrukturen. Aufgabenblatt 10 Ausgabe: , Abgabe: :00. Aufgabe 10.1 (Punkte 25) Gruppe Matrikelnummer(n)

Übung Rechnerstrukturen. Aufgabenblatt 10 Ausgabe: , Abgabe: :00. Aufgabe 10.1 (Punkte 25) Gruppe Matrikelnummer(n) 64-041 Übung Rechnerstrukturen Aufgabenblatt 10 Ausgabe: 17.12.14, Abgabe: 7.1.15 24:00 Gruppe Name(n) Matrikelnummer(n) Aufgabe 10.1 (Punkte 25) Entwurf eines Schaltwerks Wir betrachten ein Schaltwerk

Mehr

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 - Programmiersprachen: Klassifizierung und Methoden Programmier-Paradigmen Grundlagen der Programmierung 2 (1.C) - 1 - Programmiersprachen: Begriffe Syntax Beschreibung der Programme als Texte let xyz =

Mehr

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht Kap.2 Befehlsschnittstelle Prozessoren, externe Sicht 2 Befehlsschnittstelle 2.1 elementare Datentypen, Operationen 2.2 logische Speicherorganisation 2.3 Maschinenbefehlssatz 2.4 Klassifikation von Befehlssätzen

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners

Mehr

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester

Mehr

2.1 Rechnersichten 2.2 Rechnerorganisation: Aufbau und Funktionsweise

2.1 Rechnersichten 2.2 Rechnerorganisation: Aufbau und Funktionsweise Teil 1 Kapitel 2 Rechner im Überblick 2.1 Rechnersichten 2.2 Rechnerorganisation: Aufbau und Funktionsweise Frank Schmiedle Technische Informatik I 2.1 Rechnersichten Modellierung eines Rechners Zusammenspiel

Mehr

Auswertung von Python-Programmen

Auswertung von Python-Programmen Auswertung von Python-Programmen Themen: von-neumann Rechner operationale Semantik: Zustände und Zustandsübergänge lokale Definitionen zunächst ohne Listen P raktische Informatik 1, W S 2004/05, F olien

Mehr

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Kap 4. 4 Die Mikroprogrammebene eines Rechners 4 Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten (Befehl holen, Befehl dekodieren, Operanden holen etc.).

Mehr

7 Laufzeit-Speicherverwaltung

7 Laufzeit-Speicherverwaltung 7.1 Grundlagen Bevor wir die Code-Generierung betrachten, müssen wir uns Gedanken über zur Laufzeit des zu generierenden Programms notwendige Aktivitäten zur Zuordnung und Freigabe von Speicherplatz machen.

Mehr

Kapitel 4: Anweisungen und Kontrollstrukturen

Kapitel 4: Anweisungen und Kontrollstrukturen inführung in die Informatik: Programmierung und Softwareentwicklung Wintersemester 2018/19 Kapitel 4: Anweisungen und Kontrollstrukturen Prof. Dr. David Sabel Lehr- und Forschungseinheit für Theoretische

Mehr

Zwischencodeerzeugung Compiler II

Zwischencodeerzeugung Compiler II Zwishenodeerzeugung Compiler II Prof. Dr. Ursula Goltz 14.09.2012 Einleitung Front-End... Parser Sem. Analys Zwishenodegenerator Bak-End Codegenerator... Zwishendarstellung (Zwishenode) evtl. mashinennunabh.

Mehr

Abstrakte Maschinen und Kode-Erzeugung für Haskell

Abstrakte Maschinen und Kode-Erzeugung für Haskell Abstrakte Maschinen und Kode-Erzeugung für Haskell Implementierung der Reduktion: Compilierung: Terme als Bäume, Reduktion als Transformation auf Bäumen Terme als gerichtete Graphen, Template-Instantiation,

Mehr

Betriebssysteme Teil 3: Laufzeitsystem für Programme

Betriebssysteme Teil 3: Laufzeitsystem für Programme Betriebssysteme Teil 3: Laufzeitsystem für Programme 23.10.15 1 Literatur [3-1] Stack: http://fbim.fh-regensburg.de/~hab39652/pg1/skriptum/ ausdruecke/maschinenmodell.html [3-2] https://de.wikipedia.org/wiki/dynamischer_speicher

Mehr

6. Funktionen, Parameterübergabe

6. Funktionen, Parameterübergabe 6. Funktionen, Parameterübergabe GPS-6-1 Themen dieses Kapitels: Begriffe zu Funktionen und Aufrufen Parameterübergabearten call-by-value, call-by-reference, call-by-value-and-result in verschiedenen Sprachen

Mehr

Technische Informatik I - HS 18

Technische Informatik I - HS 18 Institut für Technische Informatik und Kommunikationsnetze Prof. L. Thiele Technische Informatik I - HS 18 Musterlösung zu Übung 3 Datum : 25.-26. Oktober 2018 Aufgabe 1: Wurzelverfahren nach Heron Das

Mehr

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR. Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition

Mehr

Assembler - Adressierungsarten

Assembler - Adressierungsarten Assembler - Adressierungsarten Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler - Adressierungsarten 1/31 2008-04-01

Mehr

Unterprogramme. Unterprogramme

Unterprogramme. Unterprogramme Unterprogramme Unterprogramme wichtiges Hilfsmittel für mehrfach benötigte Programmabschnitte spielen in höheren Programmiersprachen eine wesentliche Rolle in Assembler sind bestimmte Konventionen nötig

Mehr

Codegenerierung für Basisblöcke (1)

Codegenerierung für Basisblöcke (1) Codegenerierung für Basisblöcke (1) Basisblock (Grundblock): Teil des Kontrollflussgraphen, der keine Verzweigungen (Sprünge) oder Vereinigungen (Label) enthält keine Zyklen: bessere Optimierung möglich

Mehr

Übung Praktische Informatik II

Übung Praktische Informatik II Übung Praktische Informatik II FSS 2009 Benjamin Guthier Lehrstuhl für Praktische Informatik IV Universität Mannheim guthier@pi4.informatik.uni-mannheim.de 20.03.09 4-1 Heutige große Übung Ankündigung

Mehr

Grundlagen der Programmierung 3 A

Grundlagen der Programmierung 3 A Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Haskell, Typen, und Typberechnung Ziele: Haskells Typisierung Typisierungs-Regeln

Mehr

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches

Mehr

Die Mikroprogrammebene eines Rechners

Die Mikroprogrammebene eines Rechners Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.

Mehr

Programmieren lernen mit Perl

Programmieren lernen mit Perl Xpert.press Programmieren lernen mit Perl Bearbeitet von Joachim Ziegler 1. Auflage 2002. Buch. XIV, 400 S. Hardcover ISBN 978 3 540 42685 1 Format (B x L): 15,5 x 23,5 cm Gewicht: 783 g Weitere Fachgebiete

Mehr

Der von Neumann Computer

Der von Neumann Computer Der von Neumann Computer Grundlagen moderner Computer Technologie 1 Der moderne Computer ein weites Spektrum Typ Preis Anwendungsbeispiel embeded Computer 10-20 $ in Autos, Uhren,... Spielcomputer 100-200$

Mehr

1 Abstrakte Datentypen

1 Abstrakte Datentypen 1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;

Mehr

Grundlagen der Informatik I (Studiengang Medieninformatik)

Grundlagen der Informatik I (Studiengang Medieninformatik) Grundlagen der Informatik I (Studiengang Medieninformatik) Thema: 3. Datentypen, Datenstrukturen und imperative Programme Prof. Dr. S. Kühn Fachbereich Informatik/Mathematik Email: skuehn@informatik.htw-dresden.de

Mehr

Grundlagen der Rechnerarchitektur. MIPS Assembler

Grundlagen der Rechnerarchitektur. MIPS Assembler Grundlagen der Rechnerarchitektur MIPS Assembler Übersicht Arithmetik, Register und Speicherzugriff Darstellung von Instruktionen Logische Operationen Weitere Arithmetik Branches und Jumps Prozeduren 32

Mehr

Mächtigkeit von WHILE-Programmen

Mächtigkeit von WHILE-Programmen Mächtigkeit von WHILE-Programmen Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 1 / 23 Turingmaschine (TM) M = (Q, Σ, Γ, B, q 0, q, δ) Unendliches Band... 0 c

Mehr

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf)

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf) Musterlösung Übung 2 Aufgabe 1: Große Zahlen Das Ergebnis ist nicht immer richtig. Die Maschine erzeugt bei Zahlen, die zu groß sind um sie darstellen zu können einen Über- bzw. einen Unterlauf. Beispiele

Mehr

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C Übersicht Speichertypen Speicherverwaltung und -nutzung Speichertypen Beim Laden eines Programms in den Speicher (Programmausführung) kommen 3 verschiedene Speicherbereiche zum Einsatz: Text Segment (Code

Mehr

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C++ - Objektorientierte Programmierung Konstante und statische Elemente C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja

Mehr

Lösungsvorschlag Serie 2 Rekursion

Lösungsvorschlag Serie 2 Rekursion (/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma

Mehr

Inhalt. 4.9 Typen, Variable und Konstante

Inhalt. 4.9 Typen, Variable und Konstante Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Pointern

Mehr

Von Assembler zu Java

Von Assembler zu Java Von Assembler zu Java Prof. Dr.-Ing. Thomas Schwotzer 1 Einführung Die erste imperativen Programme wurden in den Urzeiten der IT tatsächlich direkt auf der Hardware der Maschinen geschrieben. Die verfügbaren

Mehr

(Ausnahmebehandlung)

(Ausnahmebehandlung) 16. Exceptions (Ausnahmebehandlung) 16-1 Objektorientierte Programmierung (Winter 2010/2011) Kapitel 16: Exceptions (Ausnahmebehandlung) Motivation Throw und Catch 16. Exceptions (Ausnahmebehandlung) 16-2

Mehr

Das Kontrollfluss-Diagramm für Ò ¼ µ:

Das Kontrollfluss-Diagramm für Ò ¼ µ: Das Kontrollfluss-Diagramm für Ò ¼ µ: find0(a,x,n1,n2) t = (n1+n2)/2; no a[t]==x yes no n1==n2 yes return t; no x > a[t] yes return 1; no n1 < t yes return find0(a,x,t+1,n2); return 1; return find0(a,x,n1,t

Mehr

1 Funktionale vs. Imperative Programmierung

1 Funktionale vs. Imperative Programmierung 1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.

Mehr

Mächtigkeit von WHILE-Programmen

Mächtigkeit von WHILE-Programmen Mächtigkeit von WHILE-Programmen und rekursive Funktionen Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 16. November 2010 Berthold Vöcking, Informatik 1 () Vorlesung

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

Übungsblatt 10 (Block C 2) (16 Punkte)

Übungsblatt 10 (Block C 2) (16 Punkte) georg.von-der-brueggen [ ] tu-dortmund.de ulrich.gabor [ ] tu-dortmund.de pascal.libuschewski [ ] tu-dortmund.de Übung zur Vorlesung Rechnerstrukturen Wintersemester 2016 Übungsblatt 10 (Block C 2) (16

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung Dank Vorlesung Theoretische Informatik II Bernhard Beckert Institut für Informatik Diese Vorlesungsmaterialien basieren zum Teil auf den Folien zu den Vorlesungen von Katrin Erk (gehalten an der Universität

Mehr

2. Imperative Programmierung und Berechenbarkeit - Registermaschinen -

2. Imperative Programmierung und Berechenbarkeit - Registermaschinen - 2. Imperative Programmierung und Berechenbarkeit - Registermaschinen - 2.1 Definition 2.2 Loop-Programme 2.3 While Programme 2.4 While Programme und rekursive Funktionen Im Wesentlichen: Tafel! Maschinenmodell

Mehr

Kap.3 Mikroarchitektur. Prozessoren, interne Sicht

Kap.3 Mikroarchitektur. Prozessoren, interne Sicht Kap.3 Mikroarchitektur Prozessoren, interne Sicht Kapitel 3 Mikroarchitektur 3.1 elementare Datentypen, Operationen und ihre Realisierung (siehe 2.1) 3.2 Mikroprogrammierung (zur Realisierung der Befehlsabarbeitung

Mehr

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert

Mehr

Haskell for Hackers... or why functional programming matters

Haskell for Hackers... or why functional programming matters ... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:

Mehr

Impact of Economics on Compiler Optimization

Impact of Economics on Compiler Optimization Impact of Economics on Compiler Optimization Arch D. Robinson Kai Software Seminar Zwischensprachen & Codegenerierung IPD Goos Dimitar Dimitrov Betreuer Rubino Geiß 0 Überblick Überblick Problem Übersetzer

Mehr

3. RAM als Rechnermodell

3. RAM als Rechnermodell 3. RAM als Rechnermodell Motivation Wir möchten Berechnungsvorschriften (Algorithmen) formal beschreiben und deren Eigenschaften wie Korrektheit und Laufzeit analysieren Rechnermodell abstrahiert vom verwendeten

Mehr

Rechnerstrukturen. 7. Assembler. Inhalt. Vorlesung Rechnerstrukturen. Assemblerprogrammierung SML-CPU. SML-Assembler. Binden

Rechnerstrukturen. 7. Assembler. Inhalt. Vorlesung Rechnerstrukturen. Assemblerprogrammierung SML-CPU. SML-Assembler. Binden Rechnerstrukturen 7. Assembler Assemblerprogrammierung SML-CPU Inhalt SML-Assembler Adressierungsarten Instruktionssatz Assembler-Direktiven Binden 7.2 1 Maschinensprache Instruktion = Bitkombination Für

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2010

Mehr

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04. Kontrollstrukturen Informatik II SS 2004 Teil 4: Assembler Programmierung Sprünge (bedingte und unbedingte) If-then-else, Case Loop (n Durchläufe) While (Abbruchbedingung) Institut für Informatik Prof.

Mehr

1 Programmiersprachen 1.1 1

1 Programmiersprachen 1.1 1 1 Programmiersprachen 1.1 1 Meilensteine imperativer Programmiersprachen (teilweise objektorientiert) Fortran 1960 Cobol Algol 60 PL/I Algol W Simula 67 Algol 68 1970 Pascal C Smalltalk Modula 1980 Ada

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2009 Kapitel 1: Informationsverarbeitung

Mehr

Arithmetik, Register und Speicherzugriff. Grundlagen der Rechnerarchitektur Assembler 9

Arithmetik, Register und Speicherzugriff. Grundlagen der Rechnerarchitektur Assembler 9 Arithmetik, Register und Speicherzugriff Grundlagen der Rechnerarchitektur Assembler 9 Arithmetik und Zuweisungen Einfache Arithmetik mit Zuweisung C Programm: a = b + c; d = a e; MIPS Instruktionen: Komplexere

Mehr

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen

Mehr

3AA. Prof. Dr. Wolfgang P. Kowalk. Universität Oldenburg WS 2005/2006

3AA. Prof. Dr. Wolfgang P. Kowalk. Universität Oldenburg WS 2005/2006 3AA Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006 Version vom 24.10.2005 Übersicht Einführung in maschinennahe Programmierung Verständnis für grundlegende Vorgänge im Computer Jedes Programm

Mehr

Datenpfad einer einfachen MIPS CPU

Datenpfad einer einfachen MIPS CPU Datenpfad einer einfachen MIPS CPU Die Branch Instruktion beq Grundlagen der Rechnerarchitektur Prozessor 13 Betrachten nun Branch Instruktion beq Erinnerung, Branch Instruktionen beq ist vom I Typ Format:

Mehr

Operationale Semantik: Haskell

Operationale Semantik: Haskell Kapitel 4 Operationale Semantik: Haskell 4.1 Semantik von Programmiersprachen Programme sind zunächst mal nur Text. Programme sollen aber etwas im Rechner bewirken bzw. eine Funktion oder Funktionalität

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Einleitung und Grundlagen Maike Buchin 18.4.2017 Verantwortliche Dozentin Organisation der Übungen Übungsleiter Korrekteure Maike Buchin Maike.Buchin@rub.de Raum NA 1/70 Sprechzeiten:

Mehr

Rechnergrundlagen SS Vorlesung

Rechnergrundlagen SS Vorlesung Rechnergrundlagen SS 2007 10. Vorlesung Inhalt Rechenwerk (ALU) Steuerwerk Instruktionssatz-Architekturen Assembler-Programmierung Synchroner/asynchroner Systembus RISC vs. CISC Kontrollfluss/Datenfluss

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

Mehr