Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen

Save this PDF as:
 WORD  PNG  TXT  JPG

Größe: px
Ab Seite anzeigen:

Download "Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen"

Transkript

1 Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen Kode-Erzeugung: Syntaxbaum Ausgabeprogramm Starte mit Syntaxbaum: Darstellung des eingegebenen Programms Wähle Zielarchitektur Wähle abstrakte Maschine abstrakte Maschine Dann Kode-Erzeugung Zum Beispiel: andere Programmiersprache (C), oder Prozessor als Stackmaschine oder Registermaschine mit Assembler oder Akkumulatormaschine zur Zielarchitektur spezifiziert durch: Programmiersprache und operationale Semantik aus dem Syntaxbaum in die Sprache der abstrakten Maschine. Grundlagen der Programmierung 2 (Comp-G) 1/44

2 Rechnerarchitekturen Maschinenprogramm Software sieht externe Rechnerarchitektur Schnittstelle Maschinenbefehlssatz interne Rechnerarchitektur Hardware Grundlagen der Programmierung 2 (Comp-G) 2/44

3 Rechnerarchitekturen 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/44

4 Typische 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.) Grundlagen der Programmierung 2 (Comp-G) 4/44

5 Beispiel: externe Architekturen 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 Grundlagen der Programmierung 2 (Comp-G) 5/44

6 Abarbeitung auf der Stackmaschine Befehl Stack......, PUSH b..., b PUSH c..., b, c ADD..., b+c Grundlagen der Programmierung 2 (Comp-G) 6/44

7 Abarbeitung auf der Akkumulatormaschine: Befehl Zustand... Akku =? LOAD c Akku = c ADD b Akku = c+b STORE a Akku = c+b, (Adresse a wird überschrieben) Grundlagen der Programmierung 2 (Comp-G) 7/44

8 Abarbeitung auf der Registersatzmaschine: Befehl Zustand Anmerkung... R1 =? 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 Grundlagen der Programmierung 2 (Comp-G) 8/44

9 Kode-Erzeugung und abstrakte Maschinen 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/44

10 Abstrakte Maschine 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 Grundlagen der Programmierung 2 (Comp-G) 10/44

11 Stackmaschine: Zwischencode-Erzeugung Datenstrukturen dazu: Stack (übersetzt als 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/44

12 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. diese 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. Beschränkungen i, k konstant in pushk k und push i Grundlagen der Programmierung 2 (Comp-G) 12/44

13 Beispiel Stackmaschine Berechne : pushk 1 pushk 3 + pushk 5 pushk 6 * - print Grundlagen der Programmierung 2 (Comp-G) 13/44

14 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) 14/44

15 Funktionsaufrufe Mit Übergabekonventionen zu Argumenten: Argumente sind auf dem Stack das letzte Argument ist oben auf dem Stack usw. Am Ende steht statt der Argument das Ergebnis auf dem Stack Berechne x 2 + y 2, wenn der Stack am Anfang..., x, y ist: 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 print r; x Grundlagen der Programmierung 2 (Comp-G) 15/44

16 Funktionsaufrufe Mit Übergabekonventionen zu Argumenten: Argumente sind auf dem Stack das letzte Argument ist oben auf dem Stack usw. Am Ende steht statt der Argument das Ergebnis auf dem Stack Berechne x 2 + y 2, wenn der Stack am Anfang..., x, y ist: 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 print r; x Übergabekonvention nicht ganz erfüllt: x statt z Grundlagen der Programmierung 2 (Comp-G) 15/44

17 Funktionsaufrufe; slide Um Übergabekonvention sauber zu erfüllen: slide m n 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 (n+m) stack)) Grundlagen der Programmierung 2 (Comp-G) 16/44

18 Funktionsaufruf: jetzt richtig Beispiel jetzt mit richtiger Übergabekonvention des Resultats. 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/44

19 Fallunterscheidungen und Sprünge marke. symbolische Sprungmarke im Stack-Programm. branchz marke Wenn auf dem Stack eine Null steht, springe zu marke und lösche das oberste Element jump marke Springe zu marke. Die operationale Semantik muss erweitert werden: I(.,.,.) drittes Arg 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 Grundlagen der Programmierung 2 (Comp-G) 18/44

20 Beispiel: fakultaet 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/44

21 Programmablauf zu (fakultaet 3) 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 Grundlagen der Programmierung 2 (Comp-G) 20/44

22 Kode-Erzeugung für Stackmaschine 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/44

23 Kode-Erzeugung für Stackmaschine Kode-Erzeugung mittels rekursiven 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: pushk 1; pushk 3; +; pushk 5; pushk 6; ; Grundlagen der Programmierung 2 (Comp-G) 22/44

24 Speicheradressierung in der Stackmaschine 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 gelöscht. Der Wert Stack[0] wird nach SP[Stack[1]] kopiert. Die obersten zwei Elemente des Stacks werden gelöscht. Grundlagen der Programmierung 2 (Comp-G) 23/44

25 Erweiterter Interpreter 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] Grundlagen der Programmierung 2 (Comp-G) 24/44

26 Zuweisungen 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/44

27 Zusammengesetzte Objekte im Speicher 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 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. Grundlagen der Programmierung 2 (Comp-G) 26/44

28 Operationale Semantik der Paar-Befehle 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/44

29 Beispiel Die Liste [1, 2] kann man jetzt erzeugen durch: Befehl Stack Anmerkungen r; getmem r; nächste freie Adresse = push 0 r; 12348; pushk 1 r; 12348; 12348; 1 iput r; SP[12348] := 1 getmem r; 12348; push 0 r; 12348; 12349; pushk 2 r; 12348; 12349; 12349; 2 iput r; 12348; SP[12349] := 2 genpair r; SP[12350] := 12348, Grundlagen der Programmierung 2 (Comp-G) 28/44

30 Code-Optimierung durch den Compiler 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/44

31 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 Grundlagen der Programmierung 2 (Comp-G) 30/44

32 Gucklochoptimierungen 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/44

33 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. 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) Grundlagen der Programmierung 2 (Comp-G) 32/44

34 Beispiel: Terminierungsverhalten anders def f (x,y): if y == 0 then x else 0 def g (x): return g(x) f(g(x),1) wird zu if 1 == 0 then g(x) else 0 Grundlagen der Programmierung 2 (Comp-G) 33/44

35 Beispiel: Verdopplung von Seiteneffekten def f (x): x*x def g(x): print x;return x f (g x) wird zu g(x) * g(x) 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. Grundlagen der Programmierung 2 (Comp-G) 34/44

36 Partielle Auswertung Das sind Berechnungen, die man schon zur Compilezeit machen kann. 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: y*y Partielle Auswertung: Interpreter Terminierung Seiteneffekte Wenn im Compiler vorhanden, kann man den Interpreter zur partiellen Auswertung benutzen. 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/44

37 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 Grundlagen der Programmierung 2 (Comp-G) 36/44

38 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 (zeitlich Überlappende Ausführung von Befehlen) wird erleichtert. Grundlagen der Programmierung 2 (Comp-G) 37/44

39 Registersatzmaschinen, Beispiel Die Operation wird durch drei Befehle realisiert: LOAD R0,a ADD R0,R6 STORE R0,a SP[a] := SP[a] + R6 Grundlagen der Programmierung 2 (Comp-G) 38/44

40 Codegenerierung für RISC-Registersatzmaschinen 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/44

41 Codegenerierung für RISC-Registersatzmaschinen: 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 Grundlagen der Programmierung 2 (Comp-G) 40/44

42 Codegenerierung RegisterMaschine 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 Normaler Syntaxbaum 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; h 2 + h 1 a b c h 1 := b c; h 2 := h 1 + a; Grundlagen der Programmierung 2 (Comp-G) 41/44

43 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 h 2 := b h 3 := c h 4 := h 2 h 3 h 5 := h 4 + h 1 L T T L T Grundlagen der Programmierung 2 (Comp-G) 42/44

44 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 h 2 := b h 3 := c h 4 := h 2 h 3 L L L T T h 5 := h 4 + h 1 L T T L T Grundlagen der Programmierung 2 (Comp-G) 42/44

45 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 h 2 := b 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 Grundlagen der Programmierung 2 (Comp-G) 42/44

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 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 Grundlagen der Programmierung 2 (Comp-G) 42/44

47 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 Grundlagen der Programmierung 2 (Comp-G) 42/44

48 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/44

49 Register-Programm 3. Schritt Registerzuordnung. Zuweisungen unter RISC Umsortierung 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; Grundlagen der Programmierung 2 (Comp-G) 44/44

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

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

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

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

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

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

Programmierung in Python

Programmierung in Python Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Informatik 1, W S 2004/05, F olien P

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

J.5 Die Java Virtual Machine

J.5 Die Java Virtual Machine Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class

Mehr

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Compiler, Übersetzer. Allgemeine Erklärung / Definition Compiler, Übersetzer Allgemeine Erklärung / Definition Ein Übersetzer ist ein Programm, das ein S 1 -Wort den Quelltext in ein S 2 -Wort umwandelt den Zieltext wobei die Semantik erhalten bleibt. Frage:

Mehr

Static-Single-Assignment-Form

Static-Single-Assignment-Form Static-Single-Assignment-Form Compilerbau Static-Single-Assignment-Form 195 Static-Single-Assignment-Form besondere Darstellungsform des Programms (Zwischensprache) vereinfacht Datenflussanalyse und damit

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

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

Algorithmen und Programmierung

Algorithmen und Programmierung Algorithmen und Programmierung Kapitel 5 Formale Algorithmenmodelle A&P (WS 14/15): 05 Formale Algorithmenmodelle 1 Überblick Motivation Formale Algorithmenmodelle Registermaschine Abstrakte Maschinen

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

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

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

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Ziele der Übung Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Codeanalyse

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

1 ÜBERSETZER. Compilerbau 1

1 ÜBERSETZER. Compilerbau 1 1 ÜBERSETZER 1 A.V.Aho, J.D.Ullmann: Principles of Compiler Design, Addison Wesley (1977) J.Amsterdam: Building a computer in Software, BYTE (Okt. 1985) Programming Project: A SIMPL Compiler, BYTE (Dez.

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

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

L3. Datenmanipulation

L3. Datenmanipulation L Datenmanipulation Aufbau eines Computers Prozessor, Arbeitsspeicher und system Maschinensprachen und Maschinenbefehle Beispiel einer vereinfachten Maschinensprache Ausführung des Programms und Befehlszyklus

Mehr

Propädeutikum. Dipl.-Inf. Frank Güttler

Propädeutikum. Dipl.-Inf. Frank Güttler Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik

Mehr

Haskell auf der Überholspur mit LLVM. Henning Thielemann 2014-06-20

Haskell auf der Überholspur mit LLVM. Henning Thielemann 2014-06-20 Haskell auf der Überholspur mit LLVM Henning Thielemann 2014-06-20 1 2 Funktionsweise 3 Übungen Motivation 1 Motivation LLVM 2 Funktionsweise 3 Übungen Motivation Motivation Haskell-Programmierer: Was

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Interpreter für funktionale Sprache

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

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Java Virtual Machine (JVM) Bytecode

Java Virtual Machine (JVM) Bytecode Java Virtual Machine (JVM) durch Java-Interpreter (java) realisiert abstrakte Maschine = Softwareschicht zwischen Anwendung und Betriebssystem verantwortlich für Laden von Klassen, Ausführen des Bytecodes,

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

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 26. November 2009 Berthold Vöcking, Informatik 1 () Vorlesung Berechenbarkeit

Mehr

Hardware/Software-Codesign

Hardware/Software-Codesign Klausur zur Lehrveranstaltung Hardware/Software-Codesign Dr. Christian Plessl Paderborn Center for Parallel Computing Universität Paderborn 8.10.2009 Die Bearbeitungsdauer beträgt 75 Minuten. Es sind keine

Mehr

Instruktionssatz-Architektur

Instruktionssatz-Architektur Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2005/2006 Übersicht 1 Einleitung 2 Bestandteile der ISA 3 CISC / RISC Übersicht 1 Einleitung 2 Bestandteile

Mehr

INFORMATIK Oberstufe. Funktionsweise eines Rechners

INFORMATIK Oberstufe. Funktionsweise eines Rechners INFORMATIK Oberstufe Funktionsweise eines Rechners Lehrplan Inf 12.3 (ca. 17 Std.): Grundlegende Kenntnisse über den Aufbau eines Rechners und seiner prinzipiellen Funktionsweise helfen den Schülern, den

Mehr

Tooldemo: Soot. Softwareanalyse SS 2011 Veranstalter: Prof. Dr. Klaus Ostermann Tillmann Rendel, M.Sc. Von Kim Maurice Nuspl

Tooldemo: Soot. Softwareanalyse SS 2011 Veranstalter: Prof. Dr. Klaus Ostermann Tillmann Rendel, M.Sc. Von Kim Maurice Nuspl Softwareanalyse SS 2011 Veranstalter: Prof. Dr. Klaus Ostermann Tillmann Rendel, M.Sc. Tooldemo: Soot (http://www.sable.mcgill.ca/soot/) Von Kim Maurice Nuspl Gliederung: Was ist Soot? Eclipse Plugin Grundlagen

Mehr

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44 Aufgabe 33 a) Der Pseudobefehl move $rd,$rs wird als addu $rd,$0,$rs übersetzt. Dabei macht sich SPIM zunutze, dass das Register $0 immer Null ist. Somit wird das Register $rd ersetzt durch $rd=0+$rs=$rs,

Mehr

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C99: Zusammenfassung Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach

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

Funktionale Programmierung

Funktionale Programmierung Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein

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

Technische Informatik 1

Technische Informatik 1 Technische Informatik 1 2 Instruktionssatz Lothar Thiele Computer Engineering and Networks Laboratory Instruktionsverarbeitung 2 2 Übersetzung Das Kapitel 2 der Vorlesung setzt sich mit der Maschinensprache

Mehr

Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte

Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Musterlösung 1. Aufgabe (5 Punkte) Im folgenden Programmcode sind einige Fehler enthalten. Finden und markieren Sie mindestens

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von

Mehr

Der Toy Rechner Ein einfacher Mikrorechner

Der Toy Rechner Ein einfacher Mikrorechner Der Toy Rechner Ein einfacher Mikrorechner Dr. Gerald Heim Haid-und-Neu-Str. 10-14 76131 Karlsruhe 16. Mai 1995 Allgemeine Informationen 2 Quelle: Phil Kopmann, Microcoded versus Hard-Wired Logic, Byte

Mehr

Mikrocomputertechnik. Adressierungsarten

Mikrocomputertechnik. Adressierungsarten Adressierungsarten Ein Mikroprozessor bietet meist eine Reihe von Möglichkeiten, die Operanden für eine Rechenoperation zu bestimmen. Diese Möglichkeiten bezeichnet man als Adressierungsarten. unmittelbare

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Grundlagen der Programmierung (Vorlesung 14)

Grundlagen der Programmierung (Vorlesung 14) Grundlagen der Programmierung (Vorlesung 14) Ralf Möller, FH-Wedel Vorige Vorlesung Verifikation von Anweisungen und Anweisungsfolgen Schleifen Inhalt dieser Vorlesung Funktionen und Prozeduren Lernziele

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

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen Brainfuck 1 Brainfuck 1.1 Brainfuck Geschichte und Umfeld Brainfuck ist eine sogenannte esoterische Programmiersprache. Sie wurde 1993 vom Schweizer Urban Müller entworfen mit dem Ziel, eine Sprache mit

Mehr

Das Prinzip an einem alltäglichen Beispiel

Das Prinzip an einem alltäglichen Beispiel 3.2 Pipelining Ziel: Performanzsteigerung é Prinzip der Fließbandverarbeitung é Probleme bei Fließbandverarbeitung BB TI I 3.2/1 Das Prinzip an einem alltäglichen Beispiel é Sie kommen aus dem Urlaub und

Mehr

VisualBasic - Variablen

VisualBasic - Variablen Typisch für alle Basic-Dialekte ist die Eigenschaft, dass Variablen eigentlich nicht deklariert werden müssen. Sobald Sie einen Bezeichner schreiben, der bisher nicht bekannt war, wird er automatisch angelegt

Mehr

Compiler und Codegenerierung. Hw-Sw-Co-Design

Compiler und Codegenerierung. Hw-Sw-Co-Design Compiler und Codegenerierung Hw-Sw-Co-Design Wo sind wir? System Verhalten Modul Architektur Block SW HW Logik Struktur Compiler und Codegenerierung Compiler - Aufbau Codegenerierung Codeoptimierung Codegenerierung

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

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 4 Anweisungen... 4-2 4.1 Strukturierte Programmierung... 4-2 4.1.1 Geschichte... 4-2 4.1.2 Strukturierung im Kleinen... 4-2 4.2 Einige Beispielanwendungen... 4-4 4.2.1 Addierer (do-schleife)...

Mehr

Technischen Informatik I, WS 2004/05

Technischen Informatik I, WS 2004/05 PHILIPPS-UNIVERSITÄT MARBURG Fachbereich Mathematik und Informatik Prof Dr R Loogen, Dipl-Inform J Beringer D-3532 Marburg Hans-Meerwein-Straße Lahnberge Klausur zur Technischen Informatik I, WS 24/5 3

Mehr

Compilerbau mit Phoenix

Compilerbau mit Phoenix Übersicht 2 Was ist ein Compiler? Frontend Analyse Backend Synthese Compiler-Pässe 3 Was ist ein Compiler? Frontend (Eingabesprache) Analyse Backend (Ausgabesprache) Synthese 4 Was ist ein Compiler? Frontend

Mehr

Grundlagen der Rechnerarchitektur

Grundlagen der Rechnerarchitektur Grundlagen der Rechnerarchitektur Einführung Unsere erste Amtshandlung: Wir schrauben einen Rechner auf Grundlagen der Rechnerarchitektur Einführung 2 Vorlesungsinhalte Binäre Arithmetik MIPS Assembler

Mehr

Kapitel 1: Einführung

Kapitel 1: Einführung 10 Kapitel 1: Einführung 1.1 Was ist eine Programmiersprache? 1.2 Details zu C++ 1.3 Phasen der Programmierung 1.4 Ein erstes Programm: Hello World! 1.5 Addition zweier Zahlen 1.6 Entscheidungen 1.1 Was

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Cluster-Praktikum Sommersemester 2007 Transparent Replizierte Objekte in JavaParty Institut für Programmstrukturen und Datenorganisation

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

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

Äquivalente Grammatiken / attributierte Grammatik

Äquivalente Grammatiken / attributierte Grammatik Äquivalente Grammatiken / attributierte Grammatik Linksfaktorisierung Elimination von Linksrekursion Umwandlung von EBNF in BNF Attributierte Grammatik Semantikfunktionen und Übersetzungsschema Synthetisierte,

Mehr

Der λ-kalkül. Frank Huch. Sommersemester 2015

Der λ-kalkül. Frank Huch. Sommersemester 2015 Der λ-kalkül Frank Huch Sommersemester 2015 In diesem Skript werden die Grundlagen der Funktionalen Programmierung, insbesondere der λ-kalkül eingeführt. Der hier präsentierte Stoff stellt einen teil der

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

Datenpfad einer einfachen MIPS CPU

Datenpfad einer einfachen MIPS CPU Datenpfad einer einfachen MIPS CPU Zugriff auf den Datenspeicher Grundlagen der Rechnerarchitektur Prozessor 19 Betrachten nun Load und Store Word Erinnerung, Instruktionen lw und sw sind vom I Typ Format:

Mehr

Was ist Logische Programmierung?

Was ist Logische Programmierung? Was ist Logische Programmierung? Die Bedeutung eines Computer-Programms kann durch Logik erklärt werden. Die Idee der logischen Programmierung besteht darin, die Logik eines Programms selber als Programm

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

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

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

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

Über Arrays und verkettete Listen Listen in Delphi

Über Arrays und verkettete Listen Listen in Delphi Über Arrays und verkettete Listen Listen in Delphi Michael Puff mail@michael-puff.de 2010-03-26 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung 3 2 Arrays 4 3 Einfach verkettete Listen 7 4 Doppelt verkettete

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Datentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache

Datentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache Agenda für heute, 4. März, 2010 Zusammengesetzte if-then-else-anweisungen Datentypen Pascal ist eine streng typisierte Programmiersprache Für jeden Speicherplatz muss ein Datentyp t (Datenformat) t) definiert

Mehr

Debuggen mit GDB (Gnu DeBugger) unter Eclipse

Debuggen mit GDB (Gnu DeBugger) unter Eclipse Debuggen mit GDB (Gnu DeBugger) unter Eclipse Boris Budweg, 16.11.2009 Version 0.4 Abstract: Kleine Einführung in die Bedienung des GDB über Eclipse und die Möglichkeiten eines Debuggers. Viele Screenshots

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

Eine Einführung in C-Funktionen

Eine Einführung in C-Funktionen Eine Einführung in C-Funktionen CGK-Proseminar 2014 Philip Gawehn 04.07.2014, Hamburg Inhaltsverzeichnis 1 Einleitung 2 2 Grundlagen 2 2.1 Der Aufbau einer Funktion....................... 2 2.2 Schlüsselwörter.............................

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Datenpfad einer einfachen MIPS CPU

Datenpfad einer einfachen MIPS CPU Datenpfad einer einfachen MIPS CPU Zugriff auf den Datenspeicher Grundlagen der Rechnerarchitektur Prozessor 19 Betrachten nun Load und Store Word Erinnerung, Instruktionen lw und sw sind vom I Typ Format:

Mehr

I.1 Die Parrot Assemblersprache

I.1 Die Parrot Assemblersprache I.1 Die Parrot Assemblersprache Die virtuelle CPU Parrot ermöglicht die Verarbeitung der Parrot Assemblersprache (PASM). Zum Einstieg soll ein erstes Beispiel die Ausführung einer PASM-Datei zeigen. Legen

Mehr

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 21. Oktober 2015 Automat versus Computer Ein Automat ist eine Maschine,

Mehr

GOTO simuliert Turingmaschinen

GOTO simuliert Turingmaschinen GOTO simuliert Turingmaschinen Wir wissen bisher: LOOP ( GOTO = WHILE TM Jetzt zeigen wir, dass auch WHILE = TM gilt: Die Turingmaschine M =(Z,,,,z 1,, E) berechne f. Wir simulieren M mit einem GOTO-Programm

Mehr

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

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

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

Rechner Architektur. Martin Gülck

Rechner Architektur. Martin Gülck Rechner Architektur Martin Gülck Grundlage Jeder Rechner wird aus einzelnen Komponenten zusammengesetzt Sie werden auf dem Mainboard zusammengefügt (dt.: Hauptplatine) Mainboard wird auch als Motherboard

Mehr

Struktur und Implementierung von Programmiersprachen I. (Compilerbau) SS 2006

Struktur und Implementierung von Programmiersprachen I. (Compilerbau) SS 2006 Struktur und Implementierung von Programmiersprachen I (Compilerbau) SS 2006 http://infosun.fmi.uni-passau.de /cl/passau/sips2006/index.html Vorlesung und Übung: Dr. Christoph Herrmann 1/1 Einordnung im

Mehr

Grundlagen der Rechnerarchitektur. Einführung

Grundlagen der Rechnerarchitektur. Einführung Grundlagen der Rechnerarchitektur Einführung Unsere erste Amtshandlung: Wir schrauben einen Rechner auf Grundlagen der Rechnerarchitektur Einführung 2 Vorlesungsinhalte Binäre Arithmetik MIPS Assembler

Mehr

Stack, Stackpointer, Unterprogramm HP: 0 * 1 * 2 * 3 CAL UP1 4 * 5 * 6 CAL UP2 7 *... UP1: 30 * 33 RET UP2: 40 * 41 CAL UP1 42 * 43 RET

Stack, Stackpointer, Unterprogramm HP: 0 * 1 * 2 * 3 CAL UP1 4 * 5 * 6 CAL UP2 7 *... UP1: 30 * 33 RET UP2: 40 * 41 CAL UP1 42 * 43 RET Stack, Stackpointer, Unterprogramm HP: 0 * 1 * 2 * 3 CAL UP1 4 * 5 * 6 CAL UP2 7 *... UP1: 30 * 33 RET UP2: 40 * 41 CAL UP1 42 * 43 RET Stack, Stackpointer, UP Stack (Stapel, FIFO) wird benötigt UP-Ruf:

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

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

2 Grundlagen der Programmierung

2 Grundlagen der Programmierung 2 Grundlagen der Programmierung In diesem Kapitel bereiten wir die Grundlagen für ein systematisches Programmieren. Wichtigstes Ziel ist dabei die Herausarbeitung der fundamentalen Konzepte von Programmiersprache.

Mehr

Symbolbearbeitung mit EPLAN 5.60/5.70 DIC_***D.SYM

Symbolbearbeitung mit EPLAN 5.60/5.70 DIC_***D.SYM Symbolbearbeitung mit EPLAN 5.60/5.70 DIC_***D.SYM Beispielhaft anhand einer kopierten DIC_ESSD.SYM nach DIC_BGID.SYM werden hier die einzelnen Schritte der Symbolbearbeitung erklärt. Es ist generell empfehlenswert

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

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