Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015



Like dokumenter
Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

Mer kodegenerering: Tilleggsnotat fra AHU Om Javas Byte-kode INF april 2009

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

Mer kodegenerering: Tilleggsnotat fra AHU. INF mai Stein Krogdahl,

INF mai 2014 Stein Krogdahl, Ifi, UiO

Dette er foiler til: 1. Tilleggsnotat fra bok av Aho, Sethi og Ullman Notatet legges ut på undervisnings-planen. Beklager dårlig kopi!

INF-5110 Oppgaver kodegenerering etc. INF-5110, vår 2011

Avsluttende om kodegenerering: Tilleggsnotat fra AHU Samt: En oversikt over bruk av Javas Byte-kode

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

Kap. 8 del 1 kodegenerering INF5110 Vår2007

INF mai 2014 Stein Krogdahl, Ifi, UiO

UNIVERSITETET I OSLO

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

UNIVERSITETET I OSLO

Pensumoversikt - kodegenerering. Maskinen det oversettes til. Kodegenerering del 2: tilleggsnotat, INF5110 v2006

UNIVERSITETET I OSLO

Kap. 8 del 1 kodegenerering INF april, 2008

Introduksjon til DARK assembly

Kap. 8 kodegenerering INF april, 2009

MED SVARFORSLAG UNIVERSITETET I OSLO

INF og 13. april, Stein Krogdahl, Ifi UiO

INF Noen oppgaver til kap. 8

Kap. 5, Del 2: INF / (og 2/3 og 3/3)

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF /2-2011

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Dagens tema. Mer MIPS maskinkode. Maske-operasjoner Skift-operasjoner Lesing og skriving Pseudo-instruksjoner Mer om funksjonskall Registeroversikt

Løsningsforslag til øving 5 TFE4105 Digitalteknikk og Datamaskiner Høsten 2006

Litt om Javas class-filer og byte-kode

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

INF og 27. april, 2010 Kap. 8 kodegenerering. Stein Krogdahl, Ifi UiO

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Forelesning Adresseringsmodi Kap 5.4

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

INF april, 2015 Kap. 8 kodegenerering. Del 2

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgås tirsdag 21. febr. 2012

INF april, 2013 Kap. 8 Noen oppgaver som er meget relevante for Oblig 2

Runtimesystemer Kap 7 - I

Kap. 4: Ovenfra-ned (top-down) parsering

Oppgaver uke 1: Løsningsforslag

Oppgaver til INF 5110, kapittel 5

INF Noen oppgaver til kap. 8

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

INF-5110 Oppgaver kodegenerering, 7/5-09

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgått torsdag 14. febr Disse foilene er justert 15/2, kl. 11

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

Hvordan en prosessor arbeider, del 1

Kap.4 del 2 Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

2 Om statiske variable/konstanter og statiske metoder.

Utførelse av programmer, metoder og synlighet av variabler i JSP

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

Programmeringsspråket C

En oppsummering (og litt som står igjen)

Løsningsforslag til eksamen i INF2270

Forelesning Instruksjonstyper Kap 5.5

Obligatorisk oppgave 2 i INF 4130, høsten 2009

INF5110, onsdag 19. februar, Dagens tema: Parsering ovenfra-ned (top-down)

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Repetisjon Novice Videregående Python PDF

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Kapittel 1 En oversikt over C-språket

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

INF1000 : Forelesning 4

Runtime-omgivelser Kap 7 - I

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

INF /2, 2015 Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Obligatorisk oppgave 1 INF1020 h2005

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

Øving 1: Busser, adressemodi, multiplekser og styreord

TDT Øvingsforelesning 1. Tuesday, August 28, 12

UNIVERSITETET I OSLO

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

INF3/4130 PRØVE-EKSAMEN MED SVARFORSLAG Gjennomgås 1/ , (lille aud.)

Løsningsforslag eksamen TDT4160 høsten 2005

Stack. En enkel, lineær datastruktur

Transkript:

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet, side 539 a) (repetisjon fra forelesningene) Se på detaljene i hvorfor maskinkoden ble slik den ble ut fra algoritmen. Påvis at det finnes en bedre kodesekvens for de samme TA-setningene enn den angitte, som er generert av notatets algoritme (se neste tre foiler). a) Diskuter hvordan vi kunne forandre denne kodegenereringsalgoritmen, slik at den gir bedre kode i dette og andre tilfeller. c) (Se senere foil) Vi får oppgitt en mer komplisert sekvens av TAinstruksjoner som utgjør en basal blokk. Oversett denne etter algoritmen, og vurder om variasjonene vi fant i punkt 1b) kan hjelpe.

Kodegenerering for: X = Y op Z (Med rettelser som også er angitt i notatet) 1. Finn et register for å holde resultatet: L = getreg( X = Y op Z ) // Helst et sted Y allerede er 2. Sørg for at verdien av Y faktisk er i L: Hvis Y er i L, oppdater adressediskr. til Y: Y ikke lenger i L else Y := beste lokasjon der verdien av Y finnes OG: generer: MOV Y, L 3. Sjekk adresse-deskriptoren for Z: Z := beste lokasjon der verdien til Z ligger // Helst et register Generer så hovedinstruksjonen : OP Z, L 4. For hver av Y og Z: Om den er død og er i et register Oppdater i så fall register-deskriptoren: Registrene inneholder nå ikke lenger Y og/eller Z 5. Oppdaterer deskriptorer i forhold X: - X sin adr.deskr. := {L}, og X er ingen andre steder. 6. Hvis L er et register så oppdater register-deskr. for L: - L sin reg.deskr. := {X}

Getreg ( X = Y op Z ) Instruksjonen som utfører operasjonen vi få Y som target-adresse 1. Hvis Y ikke er i live etter X = Y op Z, og Y er alene i R i : Return(R i ) (punkt 1 kan lett forfines en god del) else 2. Hvis det finnes et tomt register R i : Return (R i ) else 3. Hvis X har en neste bruk eller X er lik Z eller operatoren ellers krever et register: Velg et (okkupert) register R Hvis verdien i R ikke også ligger hjemme i hukommelsen: Generer MOV R, mem // mem er lagerlokasjonen for R-verdien Oppdater adresse-deskriptor for mem return (R) else 4. return (X), altså lever hukommelses-plassen til X (må kanskje opprettes om X er en temp-variabel) Opprinnelig verdi av X ødelegges NB: For at X = Y + X skal funke, måtte pnk. 3 modifiseres, ellers ville vi fått: MOV Y X ADD X X

Til oppgave 1: Den genererte koden, samt bruk av deskriptorer Setninger Generert kode Reg. deskriptorer Adr. deskriptorer t = a - b MOV a, R0 SUB b, R0 Alle Reg er ubrukte R0 inneholder t t i R0 u = a c MOV a, R1 SUB c, R1 R0 inneholder t R1 inneholder u t i R0 u i R1 v = t + u ADD R1, R0 R0 inneholder v R1 inneholder u v i R0 u i R1 d = v + u ADD R1, R0 R0 inneholder d d i R0 og ikke i hjemmeposisjon Avslutning av basal blokk MOV R0, d Alle Reg er ubrukte (Alle prog.variable i hjemmepos.)

Vi ser på følgende sekvens av TA-instruksjoner. Denne skal oversettes til maskininstruksjoner etter bokas algoritme, men diskuter på veien variasjoner foreslått på 1b). Vi antar at maskinen har to registre, og at for operasjonen divisjon («/») må både source og destination være registre. TA-sekvensen er: t = a b u = a + c w = a / t d = w + u Oppgave 1c:

Oppgave 2 (Eksamen 2010, opg 4d) Oppgaven: Arne har sett på kodegenerings-algoritmen på slutten av det utdelte heftet (fra kap. 9 i ASU). Han mener da at for de to treadresseinstruksjonene: t1 = a b t2 = b c så vil algoritmen produsere instruksjonene under. Han har antatt at det er to registre, og at begge er tomme ved starten MOV a, R0 MOV b, R1 SUB R1, R0 SUB c, R1 Ellen er uenig. Hvem har rett? Forklar.

Oppgave 3 (Eksamen 2007, opg 4a) Gitt følgende program, der alle setningene er tre-addresseinstruksjoner, bortsett fra at vi også tillater if- og while-setninger på vanlig måte. Instruksjonene x = input og output x regnes som vanlige tre-addresse-instruksjoner, med den opplagte betydning. Vi antar at ingen variable er i live ved slutten av programmet. 1: a = input 2: b = input 3: d = a + b 4: c = a * d 5: if ( b < 5 ) { 6: while ( b < 0 ) { 7: a = b + 2 8: b = b + 1 9: } 10: d = 2 * b 11: } else { 12: d = b * 3 13: a = d - b 14: } 15: output a 16: output d Hvilke variable er i live her? Angi for hver av variablene a, b, c og d om de er i live eller ikke umiddelbart etter linje 4. Gi en kort forklaring for hver av variablene.

Oppgave 4 (Eksamen 2009, 4a, 4b, 4c, 4d og 4e) (oppgave 4.e er lagt på ekstra i 2015) Gitt følgende sekvens av treadresse-instruksjoner (TA-instruksjoner): 1 a = input 2 b = input 3 t1 = a + b 4 t2 = a * 2 5 c = t1 + t2 6 if a < c goto 8 7 t2 = a + b 8 b = 25 9 c = b + c 10 d = a b 11 if t2 = 0 goto 17 12 d = a + b 13 t1 = b c 14 c = d t1 15 if c < d goto 3 16 c = a + b 17 output c 18 output d

Oppgave 4 (Eksamen 2009, 4a og 4b) Oppgave 4a Angi hvor det starter en ny basal blokk ( basic block ). Oppgave 4b Gi hver basal blokk nedover i programmet navn B1, B2, osv, og tegn opp flytgrafen (uten koden, men bare med navnet inni hver node).

Oppgave 4 (Eksamen 2009, opg 4c og 4.d) Oppgave 4.c: Den som produserer TA-kode påstår at den er slik at temporære variable alltid er døde på slutten av hver basal blokk, og ved starten av programmet, selv om de samme temporærvariable altså blir brukt i flere basale blokker, slik som over. Formuler en generell regel som skal brukes lokalt på alle basale blokker for å sjekke om det produsenten av TA-kode sier er riktig, for et gitt TA-program. Vi antar her at alle variable er døde når programmet over stopper (etter siste instruksjon). Oppgave 4.d: Bruk reglen du fant under 4.c til å undersøke hvordan dette forholder seg i den TA-koden som er angitt over. De temporære variablene heter altså t1, t2.

Oppgave 4 (Eksamen 2009, opg 4e) Oppgave 4.e: Tegn flytgrafen til instruksjonssekvenesen i oppgaven, og finn inlive og outlive til hver av de basale blokkene. Du skal har regne at også de temporære veriable er vanlige varible. Påvis hvordan du kunne lese svaret på 4.d direkte ut av svaret her. Er det noen instruksjoner vi kunne stryke, og er det noen variable som ikke helt sikkert er initialisert første gang de brukes?

Oppgave 5 (Eksamen 2011, opg 4c) Oppgave 4.c: Vi vil oversette vår P-kode til maskinkode for en maskin der alle operasjoner (inkl. sammenlikninger) må gjøres mellom verdier som ligger i registre, og der kopiering mellom lageret og registre bare kan gjøres med egne LOAD- og STORE-instruksjoner. Under oversettelsen har vi en stakk med deskriptorer. Vi skal se på det å oversette P-instruksjonen ldv b, der b er en programvariabel med «hjemmeposisjon» i lageret (Denne instruksjonen «push er» altså verdien av variablen b til toppen av stakken.) Spørsmålet er om det da er fornuftigst å produsere en LOAD-instruksjon som henter verdien av variabelen b opp i et register, eller om det er best bare å legge en deskriptor på stakken som sier at denne verdien ligger i hjemmeposisjonen til b. Drøft dette ut fra forskjellige forutsetninger, f.eks. ut fra hva språket som vi oversetter fra lover om rekkefølgen ved beregning av uttrykk (men også ut fra andre ting som du mener er aktuelle).

Oppgave 5 (Eksamen 2011, opg 4d) Oppgave 4.d: Vi vil igjen oversette vår P-kode til maskinkode, slik som i oppgave 4c, og vi skal anta at vi skal oversette én og én basal blokk, og at alle registre skal tømmes på kontrollert måte etter utførelsen av en basal blokk. Spørsmålet her er hvilke data deskriptorene på stakken skal inneholde, og hva du eventuelt trenger av andre typer deskriptorer. Vi antar at vi kan tillate oss å lete gjennom alle kompilator-stakkens deskriptorer hver gang vi lurer på hvor visse verdier er etc., slik at informasjon vi kan finne på denne måten ikke behøver å lagres i ekstra deskriptorer. Forklar også kort hvordan du kan finne den informasjonen du trenger under kodegenereringen, og hvordan du eventuelt vil bruke de ekstra deskriptorene du vil ha.