Lösung 3
Lösung 3
Lösung 3
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Übung zur Vorlesung CompilerbauFlorian StockAufgabenblatt 3 - <strong>Lösung</strong>svorschlag3.1 Allgemeine Fragen1. Beschreiben Sie die unterschiedliche Verwendung des Stacks und Heaps inder Speicherverwaltung2. Schildern Sie die Unterschiede in der Verwendung des static bzw. dynamiclinks.3. Was ist die Aufgabe des Routinenprotokolls und warum ist es wichtigerBestandteil der Runtime-Spezifikation?3.1 <strong>Lösung</strong>1. Der Stack wird dazu verwendet alle statisch allozierbaren Variablen zuspeichern. Dabei ist aber nur die Größe dieses Bereichs für jede einzelneRoutine immer der gleiche. Da die Reihenfolge der Aufrufe während desProgrammablaufs dynamisch varieren kann ist die Größe des Stacks nichtstatisch. Da die TAM eine Stackmaschine ist liegen auch alle Operandenauf dem Stack. Der Heap hingegen wird verwendet um Datenstrukturenabzuspeichern deren Größe zur Compilierungszeit nicht bekannt ist, wiez.b. verkettete Listen.2. Der dynamic link dient dazu das Stackframe der aufrufenden Routine zumerken. Die ist notwendig um nach Fertigstellung der aufgerufenen Routinezum Stackframe der aufrufenden Routine zurückspringen zu können.Der static link hingegen ist ein Verweis auf die umgebende Routine, welcherverwendet wird um auf nicht lokale Variablen zuzugreifen.3. Das Routinenprotkoll gibt Aufschluss über Lage und Sortierung von Parameternbeim Aufruf von Routinen. Zusätzlich bestimmt es ob der Aufruferoder Aufgerufene Register sichert und wer den Stack und die Register beiRoutinenende aufräumt. Kompatible Bibliotheken sind nur denkbar, wennsie das gleiche Routinenprotokoll implementieren.1
3.2 Rechnung zur Stack-MaschineGeben Sie für die folgenden Ausdrücke die zur Auswertung notwendigen Instruktionenin der richtigen Reihenfolge an. Gehen Sie analog zu den Folien des 4.Vorlesungsblocks vor. Optimieren Sie, falls möglich, in Richtung einer möglichstkurzen Instruktionssequenz. Erlaubt sind alle Operationen einer typischen StackMaschine (Folie 29).1. x := 2 ∗ a ∗ b + 2 ∗ a ∗ c + 2 ∗ b ∗ c2. y := 11 + a ∗ (7 + a ∗ (−5 + a ∗ (−4 + a ∗ 2)))3.2 <strong>Lösung</strong>1. <strong>Lösung</strong> nach folgendem, optimierten Ausdruck: ((b + c) ∗ a + b ∗ c) ∗ 2(a) LOAD b(b) LOAD c(c) ADD(d) LOAD a(e) MUL(f) LOAD b(g) LOAD c(h) MUL(i) ADD(j) LOADL 2(k) MUL2. (a) LOADL 2(b) LOAD a(c) MUL(d) LOADL -4(e) ADD(f) LOAD a(g) MUL(h) LOADL -5(i) ADD(j) LOAD a(k) MUL(l) LOADL 72
(m) ADD(n) LOAD a(o) MUL(p) LOADL 11(q) ADD3.3 Statische SpeicherverwaltungNachfolgend finden Sie die zur Definition eines Schachspiels notwendigen Datentypen.Geben Sie für dieses Programm die Speicherorganisation der Variablestate gemäß des 4. Vorlesungsblocks an. Ihre <strong>Lösung</strong> sollte für jedenWort-Index des Speichers, beginnend ab der fiktiven Anfangsadresse 0, dessenbenutzerdefinierten- (Piece, Player...) und Basistyp (Integer, Boolean, Char) angeben.Markieren Sie auch welche Worte zu welchem Record bzw. Array gehören.l e ttype Player ˜ r ecordnumber : I n t e g e rend ;type Piece ˜ recordsymbol : Charend ;type Square ˜ r ecordempty : Boolean ,occupant : Piece ,owner : Playerend ;type Board ˜ recordboard : array 64 o f Squareend ;type State ˜ recordboard : Board ,next : Player ,moves : I n t e g e rend ;var s t a t e : Statein. . .Listing 1: Beispiel zur statischen Speicherverwaltung3.3 <strong>Lösung</strong>3
Index Variablenname Typ0 board.board[0].empty Boolean1 board.board[0].occupant.symbol Char Piece2 board.board[0].owner.number Integer Player... ...189 board.board[63].empty Boolean190 board.board[63].occupant.symbolChar Piece191 board.board[63].owner.number Integer Player192 next.number Integer193 moves IntegerStrukturhierarchieSquareBoardSquareStateAbbildung 1: <strong>Lösung</strong> zu Aufgabe 3.33.4 RoutinenprotokollDas nachfolgende Programm implementiert die notwendigen Funktionen zurBerechnung von power(x, n) = x n . Zeichnen Sie hierfür stack frames, die Argumenteund Resultate vor Eintritt in eine Funktion und nach Austritt aus einerFunktion zeigen für die Auswertung folgender Ausdrücke:1. power(2, 1)2. power(3, 3)l e tfunc sqr ( i : I n t e g e r ) : I n t e g e r ˜i ∗ i ;func even ( i : I n t e g e r ) : Boolean ˜( ( i // 2 ) = 0 ) ;func power ( x : Integer , n : I n t e g e r ) : I n t e g e r ˜i f n = 0 then1e l s e i f even ( n ) thensqr ( power ( x , n / 2 ) )e l s esqr ( power ( x , n / 2 ) ) ∗ xin. . .Listing 2: Beispielprogramm zum Routinenprotokoll3.4 <strong>Lösung</strong>1.4
efore&power(2,1) before&even(1) after&even(1) before&power(2,0)2 2 2 21 1 1 1static&link static&link static&linkdynamic&link dynamic&link dynamic&linkreturn&address return&address return&address1 0 20after&power(2,0) before&sqr(1) after&sqr(1) after&power(2,1)2 2 2 21 1 1static&link static&link static&linkdynamic&link dynamic&link dynamic&linkreturn&address return&address return&address1 1 1Abbildung 2: <strong>Lösung</strong> zu Aufgabe 3.4a2.5
efore&power(3,3) before&even(3) after&even(3) before&power(3,1)3 3 3 33 3 3 3static&link static&link static&linkdynamic&link dynamic&link dynamic&linkreturn&address return&address return&address3 0 31before&even(1) after&even(1) before&power(3,0) after&power(3,0)3 3 3 33 3 3 3static&link static&link static&link static&linkdynamic&link dynamic&link dynamic&link dynamic&linkreturn&address return&address return&address return&address3 3 3 31 1 1 1static&link static&link static&link static&linkdynamic&link dynamic&link dynamic&link dynamic&linkreturn&address return&address return&address return&address1 0 3 10before&sqr(1) after&sqr(1) after&power(3,1) before&sqr(3)3 3 3 33 3 3 3static&link static&link static&link static&linkdynamic&link dynamic&link dynamic&link dynamic&linkreturn&address return&address return&address return&address3 3 3 31 1static&link static&linkdynamic&link dynamic&linkreturn&address return&address1 1after&sqr(3)3 273static&linkdynamic&linkreturn&address9after&power(3,3)Abbildung 3: <strong>Lösung</strong> zu Aufgabe 3.4b6