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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen. 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

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

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

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

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

= 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

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg Compiler: Vom Code zum Maschinen-Code C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg Prof. Dr. Jan Dünnweber Zusammenhänge: C und Assembler Hochsprachen

Mehr

Ausarbeitung des Interpreter Referats

Ausarbeitung des Interpreter Referats Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache

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

Ergänzungen zum Manual OS V 2.05/2.06

Ergänzungen zum Manual OS V 2.05/2.06 Ergänzungen zum Manual OS V 2.05/2.06 SYSTEMRESOURCEN - PROGRAMM DOWNLOAD - Ab der Betriebssystemversion 2.05 haben die C-Control Units M-2.0 und Station 2.0 die Möglichkeit das Anwenderprogramm von einem

Mehr

Karlsruher Institut für Technologie

Karlsruher Institut für Technologie Karlsruher Institut für Technologie Lehrstuhl für Programmierparadigmen Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting Übungsleiter: Matthias Braun Lösung zu Übungsblatt

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

Übung 1 - Betriebssysteme I

Übung 1 - Betriebssysteme I Prof. Dr. Th. Letschert FB MNI 13. März 2002 Aufgabe 0: Basiswissen Rechnerarchitektur: Übung 1 - Betriebssysteme I Aus welchen Komponenten besteht ein Rechner mit Von-Neumann Architektur? Was sind Bits

Mehr

1.4 Die Ackermannfunktion

1.4 Die Ackermannfunktion a : N 2 N : Beispiele: a(0, y) = y + 1, a(x, 0) = a(x 1, 1), x > 0, a(x, y) = a(x 1, a(x, y 1)), x, y > 0. Beh.: a(1, y) = y + 2 Bew. durch Induktion über y: a(1, 0) = a(0, 1) = 2 = 0+2. a(1, y + 1) =

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

Einführung in die Informatik Grammars & Parsers

Einführung in die Informatik Grammars & Parsers Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme

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

3.0 8051 Assembler und Hochsprachen

3.0 8051 Assembler und Hochsprachen 3.0 8051 Assembler und Hochsprachen Eine kurze Übersicht zum Ablauf einer Programmierung eines 8051 Mikrocontrollers. 3.1 Der 8051 Maschinencode Grundsätzlich akzeptiert ein 8051 Mikrocontroller als Befehle

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

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

Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines

Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines Wolfgang Schreiner Wolfgang.Schreiner@risc.jku.at Research Institute for Symbolic Computation (RISC) Johannes Kepler University,

Mehr

Grundlagen der Programmierung 2 (1.C)

Grundlagen der Programmierung 2 (1.C) Grundlagen der Programmierung 2 (1.C) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 3. Mai 2006 Funktionen auf Listen: map map :: (a -> b) -> [a] -> [b] map f [] = []

Mehr

Grundlagen der Programmierung 2. Parallele Verarbeitung

Grundlagen der Programmierung 2. Parallele Verarbeitung Grundlagen der Programmierung 2 Parallele Verarbeitung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 27. Mai 2009 Parallele Algorithmen und Ressourcenbedarf Themen: Nebenläufigkeit,

Mehr

Im Original veränderbare Word-Dateien

Im Original veränderbare Word-Dateien Das Von-Neumann-Prinzip Prinzipien der Datenverarbeitung Fast alle modernen Computer funktionieren nach dem Von- Neumann-Prinzip. Der Erfinder dieses Konzeptes John von Neumann (1903-1957) war ein in den

Mehr

2.2 Rechnerorganisation: Aufbau und Funktionsweise

2.2 Rechnerorganisation: Aufbau und Funktionsweise 2.2 Rechnerorganisation: Aufbau und Funktionsweise é Hardware, Software und Firmware é grober Aufbau eines von-neumann-rechners é Arbeitsspeicher, Speicherzelle, Bit, Byte é Prozessor é grobe Arbeitsweise

Mehr

Rechnerarchitektur. Dr. Andreas Müller TU Chemnitz Fakultät für Informatik Fakultätsrechen- und Informationszentrum anmu@informatik.tu-chemnitz.

Rechnerarchitektur. Dr. Andreas Müller TU Chemnitz Fakultät für Informatik Fakultätsrechen- und Informationszentrum anmu@informatik.tu-chemnitz. Rechnerarchitektur Dr. Andreas Müller TU Chemnitz Fakultät für Informatik Fakultätsrechen- und Informationszentrum anmu@informatik.tu-chemnitz.de Rechnerarchitektur Dr. Andreas Müller TU Chemnitz Fakultät

Mehr

Übersicht. Einführung in die Programmierung. main. main. main. main. Speicherverwaltung. Definition nach ANSI C:

Übersicht. Einführung in die Programmierung. main. main. main. main. Speicherverwaltung. Definition nach ANSI C: Übersicht Einführung in die Programmierung Bachelor of Science die -Funktion Prof. Dr. Rethmann Fachbereich Elektrotechnik und Informatik Hochschule Niederrhein WS 009/0 Einführung in die Programmierung

Mehr

Algorithmen und Datenstrukturen 1 Kapitel 4.1

Algorithmen und Datenstrukturen 1 Kapitel 4.1 Algorithmen und Datenstrukturen 1 Kapitel 4.1 Technische Fakultät robert@techfak.uni-bielefeld.de Vorlesung, U. Bielefeld, Winter 2005/2006 Kapitel 4: Maschinenmodelle [Dieses Kapitel hält sich eng an

Mehr

Betriebssysteme Teil 4: Übersetzung von C-Programmen

Betriebssysteme Teil 4: Übersetzung von C-Programmen Betriebssysteme Teil 4: Übersetzung von C-Programmen 18.10.13 1 Übersicht Übersetzungsprozess gcc(i) als Steuerprogramm Assembler Binder Hauptprogramme in C In dieser Einheit werden nur die Grundprinzipien

Mehr

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at 16.03.2011

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at 16.03.2011 Technische Universität Graz Institut tfür Angewandte Informationsverarbeitung und Kommunikationstechnologie Rechnerorganisation 2 TOY Karl C. Posch Karl.Posch@iaik.tugraz.at co1.ro_2003. 1 Ausblick. Erste

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

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

1 Einleitung zum RISC Prozessor

1 Einleitung zum RISC Prozessor 1 Einleitung zum RISC Prozessor Wesentliche Entwicklungsschritte der Computer-Architekturen [2, 3]: Familienkonzept von IBM mit System/360 (1964) und DEC mit PDP-8 (1965) eingeführt: Gleiche Hardware-Architekturen

Mehr

Grundlagen der Programmiersprache C++

Grundlagen der Programmiersprache C++ / TU Braunschweig Grundlagen der Programmiersprache C++ Um den Studierenden den Einstieg in die FE-Programmierung zu erleichtern werden die wesentlichen Elemente eines C-Programmes beschrieben, soweit

Mehr

Einführung in die Programmierung WS 2014/15. 2. Algorithmus, Berechenbarkeit und Programmiersprachen 2-1

Einführung in die Programmierung WS 2014/15. 2. Algorithmus, Berechenbarkeit und Programmiersprachen 2-1 Einführung in die Programmierung WS 2014/15 2. Algorithmus, Berechenbarkeit und Programmiersprachen 2-1 2. Alg., Ber. & PS Inhalt 1. Algorithmen 2. Programmiersprachen Algorithmus und Programm(iersprache)

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

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

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik 7 1.1 Was ist Informatik? 7 1.2 Teilgebiete der Informatik 8

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik 7 1.1 Was ist Informatik? 7 1.2 Teilgebiete der Informatik 8 Einleitung Was ist Informatik? 5 1 Informatik 7 1.1 Was ist Informatik? 7 1.2 Teilgebiete der Informatik 8 Programmierung 13 2 Vom Problem über den Algorithmus zum Programm 15 2.1 Vorgehensweise bei der

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

Assembler-Programmierung

Assembler-Programmierung Assembler-Programmierung Dr.-Ing. Volkmar Sieh Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011 Assembler-Programmierung 1/48 2012-02-29 Assembler-Programmierung

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

Compilerbau + Virtuelle Maschinen

Compilerbau + Virtuelle Maschinen Helmut Seidl Compilerbau + Virtuelle Maschinen München Sommersemester 2009 1 Organisatorisches Der erste Abschnitt Die Übersetzung von C ist den Vorlesungen Compilerbau und Virtuelle Maschinen gemeinsam

Mehr

a) Wandeln Sie folgende Dualzahlen durch Gruppenbildung in das Oktal- und Hexdezimalsystem um

a) Wandeln Sie folgende Dualzahlen durch Gruppenbildung in das Oktal- und Hexdezimalsystem um WI Zahlenumwandlungen Informatik I Aufgabentyp 1: a) Wandeln Sie folgende Dualzahlen durch Gruppenbildung in das Oktal- und Hexdezimalsystem um 000100010101 2 = Okt:., Hex:.. Wandeln Sie folgende Zahlen

Mehr

Systeme 1: Architektur

Systeme 1: Architektur slide 1 Vorlesung Systeme 1: Architektur Prof. Dr. Ulrich Ultes-Nitsche Forschungsgruppe Departement für Informatik Universität Freiburg slide 2 Prüfung 18. Februar 2004 8h00-11h40 13h00-18h20 20 Minuten

Mehr

Beispiel einer Übersetzung

Beispiel einer Übersetzung Beispiel einer Übersetzung Ausdruck in C aktuelle_zeit = Startzeit + vergangene_minuten*60 + vergangene_sekunden; Ausdruck im Instruktionssatz des R10000 LW r1,minuten LW r1,sekunden ADDI r2,r0,60 ADD

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

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

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 1 / 53 Inhaltsverzeichnis 1 Einführung 2 Assembler Syntax, Register und Flags 3 Hauptspeicher 4 Stack 5 Assemblerbefehle

Mehr

Programmiertechnik II

Programmiertechnik II Analyse von Algorithmen Algorithmenentwurf Algorithmen sind oft Teil einer größeren Anwendung operieren auf Daten der Anwendung, sollen aber unabhängig von konkreten Typen sein Darstellung der Algorithmen

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

13. Bäume: effektives Suchen und Sortieren

13. Bäume: effektives Suchen und Sortieren Schwerpunkte Aufgabe und Vorteile von Bäumen 13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Sortieren mit Bäumen Ausgabealgorithmen: - Preorder - Postorder

Mehr

Assembler - Variablen

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

Mehr

Der Computer von Neumann

Der Computer von Neumann 1. Einführung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Aufbau eines Computers!Systemumgebung!Vorgang des Programmierens!Editor, Debugger, Linker!Programmiersprachen - Geschichte Copyright:

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

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

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

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache Assembler Programmierung Motivation Informatik II SS 2004 Teil 4: Assembler Programmierung Was ist ein Programm? Eine Reihe von Befehlen, die der Ausführung einer Aufgabe dient Dazu wird das Programm sequentiell

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

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit Counting-Sort Counting - Sort ( A,B,k ). for i to k. do C[ i]. for j to length[ A]. do C[ A[ j ] C[ A[ j ] +. > C[ i] enthält Anzahl der Elemente in 6. for i to k. do C[ i] C[ i] + C[ i ]. > C[ i] enthält

Mehr