Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen
|
|
- Helen Pettersen
- 7 år siden
- Visninger:
Transkript
1 Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variabler Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.)
2 Prosjektoversikt Del 0 Del 1 Del 2 f.alboc alboc f.s types chargenerator scanner syntax code error log f.log
3 Det endelige målet Formålet Vårt oppdrag er å lage en kompilator: Inndata er trerepresentasjonen av AlboC-programmet laget i del 1. Utdata er en fil med x86 assemblerkode. AlboC-program x = x+1; Kompilator alboc Assemblerkode addl $1,%eax Assembler gcc Maskinkode
4 Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen Hvordan ser datamaskinen vår ut? Datamaskinen vår Minnet inneholder tre former for data: Data inneholder globale variabler. Stakken inneholder parametre og lokale variabler. Koden er programmet (som tall).
5 Hvordan ser datamaskinen vår ut? movl v 1, v 2 Flytt v 1 til v 2. cdq Omform 32-bits %EAX til 64-bits %EDX:%EAX. leal v 1, v 2 Flytt adressen til v 1 til v 2. pushl v Legg v på stakken. popl v Fjern toppen av stakken og legg verdien i v. negl v Skift fortegn på v. addl v 1, v 2 Adder v 1 til v 2. subl v 1, v 2 Subtraher v 1 fra v 2. imull v 1, v 2 Multipliser v 1 med v 2. idivl v Del %EDX:%EAX med v ; svar i %EAX. call lab Kall funksjonen i lab. enter $ n,$0 Opprett n byte lokale variabler. leave Fjern lokale variabler ret Returner fra funksjonen. cmpl v 1, v 2 Sammenligning v 1 og v 2. jmp lab Hopp til lab. sete v Sett v =1 om =, ellers v =0. setne v Sett v =1 om =, ellers v =0. setl v Sett v =1 om <, ellers v =0. setle v Sett v =1 om, ellers v =0. setg v Sett v =1 om >, ellers v =0. setge v Sett v =1 om, ellers v =0.
6 Et eksempel Anta at vi har AlboC-koden v = 1 + 2;. Disse x86-instruksjonene gjør dette: leal v,%eax # %EAX=&v %ECX=? %EDX=? stack=... pushl %eax # %EAX=&v %ECX=? %EDX=? stack=&v movl $1,%eax # %EAX=1 %ECX=? %EDX=? stack=&v pushl %eax # %EAX=1 %ECX=? %EDX=? stack=1 &v movl $2,%eax # %EAX=2 %ECX=? %EDX=? stack=1 &v movl %eax,%ecx # %EAX=2 %ECX=2 %EDX=? stack=1 &v popl %eax # %EAX=1 %ECX=2 %EDX=? stack=&v addl %ecx,%eax # %EAX=3 %ECX=2 %EDX=? stack=&v popl %edx # %EAX=3 %ECX=2 %EDX=&v stack=... movl %eax,(%edx) # v = 3 Husk! Mange kodebiter gjør det samme. I kompendiet står angitt nøyaktig hvilke som skal brukes.
7 Metoden gencode Hvordan implementere kodegenerering Det beste er å følge samme opplegg som for å sjekke programkoden: Kodegenerering Legg en metode gencode inn i alle klasser som representerer en del av AlboC-programmet (dvs er subklasse av SyntaxUnit).
8 Metoden gencode class WhileStatm extends Statement { Expression test; StatmList void check(decllist curdecls) void gencode(funcdecl curfunc) {. static WhileStatm parse() void printtree() {.
9 Konvensjoner Konvensjoner Kodegenerering blir mye enklere om vi setter opp noen fornuftige konvensjoner: Alle beregninger skal ende opp i %EAX. %ECX og %EDX er hjelperegistre. Hovedstakken (aksessert via %ESP) er til mellomresultater funksjonskall (neste uke)
10 Hva slags variabler har vi? Variabler Det finnes fem sorter variabler i AlboC: Enkle Array-er Globale Lokale (De blå tar vi neste uke.) Parametre De kan være int eller pekere (dvs adresser). De kan forekomme i tre ulike situasjoner: Deklarasjon int v; Tilordning v = 1; Bruk if (v>0)...
11 Generering av globale variabler abstract class Declaration extends SyntaxUnit { String name, assemblername; DeclType typespec; Type type; boolean visible = false; Declaration nextdecl = null;. abstract class VarDecl extends Declaration { boolean isarray = false; int numelems = 0;.
12 Generering av globale variabler class GlobalVarDecl extends VarDecl { GlobalVarDecl(String n) { super(n); assemblername = (Alboc.underscoredGlobals()? "_" : "") + void gencode(funcdecl curfunc) { if (isarray) { Code.genVar(assemblerName, true, numelems, type.size()/numelems, type+" "+name); else { Code.genVar(assemblerName, true, 1, type.size(), type+" "+name);.
13 Generering av globale variabler Metoden Code.genVar vil sette av plass til globale variabler: public static void genvar(string name, boolean global, int n, int nbytes, String comment) { if (! generatingdata) { codefile.println(".data"); generatingdata = true; if (global) codefile.println(".globl " + name); printlabel(name, false); codefile.printf(".fill %-24s", n+","+nbytes+",0"); if (comment.length() > 0) { codefile.print("# " + comment); codefile.println();
14 Tilordning Tilordning assign-statm assignment ; assignment lhs-variable = expression lhs-variable * variable
15 Tilordning I kompendiet finner vi kodeskjemaer for alle setningene. Assignment * n w = ie ; Beregn adressen til w med svar i %EAX movl (%eax),%eax gjentas n ganger pushl %eax Beregn ie med svar i %EAX popl %edx movl %eax,(%edx)
16 Tilordning Et forslag til implementering: class AssignStatm extends Statement { Assignment void gencode(funcdecl curfunc) { assignment.gencode(curfunc);. class Assignment extends SyntaxUnit { LhsVariable lhs; /* "Left hand side" */ Expression rhs; /* "Right hand side" void gencode(funcdecl curfunc) { lhs.gencode(curfunc); Code.genInstr("", "pushl", "%eax", ""); rhs.gencode(curfunc); Code.genInstr("", "popl", "%edx", ""); Code.genInstr("", "movl", "%eax,(%edx)", " =");.
17 Tilordning class LhsVariable extends SyntaxUnit { int numstars = 0; Variable var; Type void gencode(funcdecl curfunc) { var.genaddresscode(curfunc); for (int i = 1; i <= numstars; ++i) Code.genInstr("", "movl", "(%eax),%eax", " *");
18 Tilordning Klassen Variable har både en gencode- og en genaddresscode-metode: void genaddresscode(funcdecl curfunc) { // Generate code to load the _address_ of the variable // rather than its value. if (index == null) { Code.genInstr("", "leal", declref.assemblername+",%eax", varname); else { index.gencode(curfunc); if (declref.type instanceof ArrayType) { Code.genInstr("", "leal", declref.assemblername+",%edx", varname+"[...]"); else { Code.genInstr("", "movl", declref.assemblername+",%edx", varname+"[...]"); Code.genInstr("", "leal", "(%edx,%eax,4),%eax", "");
19 Hvordan lagres uttrykk? Uttrykk expression Hvordan lager vi kode for et uttrykk som factor term term opr factor 4 * a - 17 primary factor opr primary primary? operand operand operand number variable number
20 Operander Operander Det er ganske enkelt å lage kode som legger en global enkel int-variabel i %EAX-registeret. v movl v,%eax Det er like enkelt for int-konstanter (tall eller tegn). n movl $ n,%eax ($-tegnet angir at det er snakk om en tallkonstant.)
21 Operatorer Aritmetisk operatorer ie 1 + ie 2 Beregn ie 1 med svar i %EAX pushl %eax Beregn ie 2 med svar i %EAX movl %eax,%ecx popl %eax addl %ecx,%eax Ved at alle int-operander er innom %EAX blir det enklere å skrive kodegenereringen. Divisjon og sammenligninger er litt vanskeligere; se tabellene i kompendiet. Hvorfor må ie 1 legges på stakken?
22 Kodegenering While-setningen while ( ie ) { S lab 1 : Beregn ie med svar i %EAX cmpl $0,%eax je lab 2 S jmp lab 1 lab 2 :
23 Navnelapper Lokale navnelapper Når vi skal lage slike hopp, trenger vi stadig nye navnelapper. Dette kan vi få fra Code-modulen: private static int numlabels = 0; public static String getlocallabel() { return String.format(".L%04d", ++numlabels);
24 Komplett kode Hele koden for WhileStatm class WhileStatm extends Statement { Expression test; StatmList void gencode(funcdecl curfunc) { String testlabel = Code.getLocalLabel(), endlabel = Code.getLocalLabel(); Code.genInstr(testLabel, "", "", "Start while-statement"); test.gencode(curfunc); Code.genInstr("", "cmpl", "$0,%eax", ""); Code.genInstr("", "je", endlabel, ""); body.gencode(curfunc); Code.genInstr("", "jmp", testlabel, ""); Code.genInstr(endLabel, "", "", "End while-statement");
25 Et eksempel a = 1; while (a < 10) { a = a + 1; leal a,%eax # a pushl %eax movl $1,%eax # 1 popl %edx movl %eax,(%edx) # =.L0001: # Start while-statement movl a,%eax # a pushl %eax movl $10,%eax # 10 popl %ecx cmpl %eax,%ecx movl $0,%eax setl %al # Test < cmpl $0,%eax je.l0002 leal a,%eax # a pushl %eax movl a,%eax # a pushl %eax movl $1,%eax # 1 movl %eax,%ecx popl %eax addl %ecx,%eax # Compute + popl %edx movl %eax,(%edx) # = jmp.l0001.l0002: # End while-statement
Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del-0
DetaljerOversikt Kodegenerering Variable Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del 0
DetaljerOversikt Kodegenerering Variable Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del-0
DetaljerOversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner og array-er.) Prosjektoversikt
DetaljerDagens tema: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler
Dagens tema Dagens tema: Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler Charles Babbage Datamaskinenes historie Menneskene har alltid prøvd
Detaljer2 Parser. 1 Skanner. 4 Kodegenerator. 3 Sjekker. Oversikt Datamaskinhistorie x86 Kodegenerering Setninger Uttrykk.
Dagens tema Dagens tema: Maskinkode del 1 Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode for setninger Konstanter og uttrykk Prosjektoversikt f.pas f.s 1 Skanner :Token
DetaljerOversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering
Dagens tema Dagens tema: Semantisk sjekking Hvordan finne deklarasjoner? Typesjekking Hvordan programmere sjekking av riktig navnebruk? Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode?
DetaljerKompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering
Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Statiske metoder og variabler Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at
DetaljerDagens tema: Semantisk sjekking. Maskinkode. Hvordan finne deklarasjoner? Hvordan programmere sjekking av riktig navnebruk?
Dagens tema Dagens tema: Semantisk sjekking Hvordan finne deklarasjoner? Hvordan programmere sjekking av riktig navnebruk? Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren
DetaljerOversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering
Dagens tema Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at vi lager dette lille
DetaljerKompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering
Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Statiske metoder og variabler Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at
DetaljerOversikt Deklarasjoner Typesjekk Datamaskinhistorie x86 Kodegenerering
Dagens tema Dagens tema: Semantisk sjekking Hvordan finne deklarasjoner? Typesjekking Hvordan programmere sjekking av riktig navnebruk? Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode?
DetaljerTema for siste forelesning:
Tema for siste forelesning: Kompilering av programsystemer make ant Kodegenerering Funksjoner Testing Ulike testprogrammer Hvordan kompilere riktig? Programmet make Det er mange praktiske problemer forbundet
DetaljerOversikt Oversettelse Logging Implementasjon Oppsummering
Dagens tema Dagens tema: Kodegenerering Introduksjon Modulen Code Enkle variable Noen enkle setninger Uttrykk Litt mer kompliserte setninger med betingelser (Alt unntatt program, funksjoner og array-er.)
DetaljerDagens tema: Formålet. Kodegenerering NB! Introduksjon Modulen Code. Enkle variable Noen enkle setninger Uttrykk
Dagens tema Prosjektoversikt Dagens tema: Del-0 Del-1 Del-2 Kodegenerering frusc Rusc frask Introduksjon Modulen Code Char- Generator Scanner Syntax Code Enkle variable Noen enkle setninger Error Log Litt
DetaljerTema for siste forelesning:
Dagens tema Tema for siste forelesning: Kodegenerering Funksjoner Testing Ulike testprogrammer Kompilering av programsystemer make ant Hva må gjøres for funksjoner? Funksjoner For funksjoner må vi kunne
DetaljerDagens tema: Formålet. Kodegenerering NB! Introduksjon Modulen Code. Enkle variable Noen enkle setninger Uttrykk
ng Dagens tema Prosjektoversikt Dagens tema: Del-0 Del-1 Del-2 Kodegenerering frusc Rusc frask Introduksjon Modulen Code Char- Generator Scanner Syntax Code Enkle variable Noen enkle setninger Error Log
DetaljerDagens tema: Mer av det dere trenger til del 1
Dagens tema Dagens tema: Mer av det dere trenger til del 1 Hvilke klasser trenger vi? Uttrykk Typer Testutskrifter 12 gode råd Dagens tema Prosjektet Utifra dette AlboC-programmet: int pot2 (int x) { int
DetaljerDagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?
Dagens tema Dagens tema Kildekode Hva er kompilering? Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Hvordan oppdage feil? Anta at vi lager dette lille
DetaljerDagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?
Dagens tema Dagens tema Kildekode Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette
DetaljerDagens tema: Kodegenerering. Versjonskontroll. Variabler, spesielt vektorer Funksjoner, kall og parametre Noen siste gode råd.
Dagens tema Dagens tema: Kodegenerering Variabler, spesielt vektorer Funksjoner, kall og parametre Noen siste gode råd Versjonskontroll CVS og Subversion Alt om variabler Variabler Variabler forekommer
DetaljerDagens tema: Sjekking
Dagens tema Dagens tema: Sjekking Navnebinding (obligatorisk oppgave 3) Biblioteket Logging Riktig bruk av navn (frivillig) Typesjekking (frivillig) Hele prosjektet Strukturen til kompilatoren vår f.pas
DetaljerHovedansvarlig. Symbolgenerator. Tregenerator. Litt mer kompliserte setninger med betingelser
Dagens tema: Kodegenerering Listing Minila Hovedansvarlig Listeansvarlig Flok Tegngenerator Linjegenerator Symbolgenerator Flinkrepresentant Tregenerator Kodegenerator Del 0 Del 1 Del 2 Introduksjon FlinkRepresentation
DetaljerDet viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Hovedkortet Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Hovedkortet Grovt sett inneholder et hovedkort En prosessor Minne (for både program og data) Klokke Kontrollere for periferutstyr.
DetaljerTema for siste forelesning:
Dagens tema Tema for siste forelesning: Versjonskontroll CVS og Subversion Kodegenerering Funksjoner Testing Ulike testprogrammer Samarbeidsproblemer Når flere samarbeider Når flere jobber sammen, kan
DetaljerOppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Grovt sett inneholder det En prosessor Minne (for både program og data) Klokke Kontrollere for periferutstyr.
DetaljerDet viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Hovedkortet Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Data.data Stakk %EAX %ECX %EDX %EBP %ESP Prosessor Kode Minne.text Hovedkortet Grovt sett inneholder et hovedkort En prosessor
DetaljerTema for siste forelesning:
Dagens tema Tema for siste forelesning: Versjonskontroll CVS og Subversion Kodegenerering Funksjoner Testing Ulike testprogrammer Samarbeidsproblemer Når flere samarbeider Når flere jobber sammen, kan
DetaljerEn oppsummering (og litt som står igjen)
En oppsummering (og litt som står igjen) Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen En oppsummering Oppsummering Pensum læreboken til og med kapittel 7 forelesningene de
DetaljerDagens tema: Resten av det dere trenger til del 1
Dagens tema Dagens tema: Resten av det dere trenger til del 1 Hvordan sjekke navn? Testutskrifter Programmeringsstil 12 gode råd Dagens tema Prosjektet Utifra dette C
DetaljerDen siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen
Den siste dagen Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen En oppsummering Oppsummering Pensum Læreboken til og med kapittel 7, kompendiet, forelesningene
DetaljerDagens tema Programmering av x86 Flytting av data Endring av størrelse
Dagens tema Programmering av x86 Flytting av data Endring av størrelse Aritmeriske operasjoner Flagg Maskeoperasjoner Hopp Tester Stakken Rutinekall Kall og retur Frie og opptatte registre Dokumentasjon
DetaljerDagens tema: Mer av det dere trenger til del 1
Dagens tema Dagens tema: Mer av det dere trenger til del 1 Hvilke klasser trenger vi? Uttrykk Typer Versjonskontroll Dagens tema Prosjektet Utifra dette C -programmet: int pot2 (int x) { int p2; p2 = 1;
DetaljerDagens tema: Resten av det dere trenger til del 1
Dagens tema Dagens tema: Resten av det dere trenger til del 1 Hvordan sjekke navn? Testutskrifter Programmeringsstil 12 gode råd Dagens tema Prosjektet Utifra dette RusC-programmet: int pot2 (int x) {
DetaljerDet viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Hovedkortet Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Data.data Stakk %EAX %ECX %EDX %EBP %ESP Prosessor Kode Minne.text Hovedkortet Grovt sett inneholder et hovedkort En prosessor
DetaljerPensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering
Oppsummering Pensum Grovt sett er alt fra forelesningene og øvingsoppgavene pensum. Detaljert oversikt finnes på kurssidene. Hovedtanker fra kurset Litt om eksamen Hvorfor har dere lært dette? Ikke mange
DetaljerAlboC og kompilatoren hans. Kompendium for INF2100
AlboC og kompilatoren hans Kompendium for INF2100 Stein Krogdahl, Dag Langmyhr Høsten 2014 Innhold Forord 9 1 Innledning 11 1.1 Hva er emnet INF2100?...................... 11 1.2 Hvorfor lage en kompilator?....................
DetaljerINF2100. Oppgaver 23. og 24. september 2010
INF2100 Oppgaver 23. og 24. september 2010 Oppgave 1 Vi skal se på et meget enkelt språk E som består av uttrykk med + og ; grammatikken ser du i figur 1 på neste side. Tallkonstanter består av bare ett
DetaljerDagens tema. Minnestrukturen Grovt sett ser minnet for hver process slik ut: Flytting av data. Programmering av x86
Dagens tema Programmering av x86 Minnestrukturen Flytting av data Endring av størrelse Aritmeriske operasjoner Flagg Maskeoperasjoner Hopp Tester Stakken Minnestrukturen Grovt sett ser minnet for hver
DetaljerINF2100. Oppgaver uke 40 og
INF2100 Oppgaver uke 40 og 41 2014 For å få trening i å programmere en parser, skal vi aller først gjøre det for et veldig enkelt programmeringsspråk: E. Dette språket består av uttrykk med de fire vanligste
DetaljerINF2100. Oppgaver 9. oktober 2012 C 100 X 10
INF2100 Oppgaver 9. oktober 2012 Oppgave 1 Vi skal se på et meget enkelt språk E som består av uttrykk med de fire vanligste regneartene +,, * og /; grammatikken 1 ser du i figur 1 på neste side. Tallkonstanter
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 14. juni 2012 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 10 sider. Vedlegg: Tillatte hjelpemidler: INF2270
DetaljerIntro Rask kode x86-op Optimalisering Inline-kode Konklusjon
Dagens tema Dagens tema Raskere kode Når er det viktig? Hvordan måle eksekveringshastighet? Hvordan oppnår man raskere kode? Blanding av C og assemblerkode Er hastighet så viktig? Når er eksekveringshastighet
DetaljerINF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10
INF2100 Oppgaver 6. og 11. oktober 2011 Oppgave 1 Vi skal se på et meget enkelt språk E som består av uttrykk med de fire vanligste regneartene +,, * og /; grammatikken 1 ser du i figur 1 på neste side.
DetaljerDagens tema. Raskere kode [REB&DRO H kap 5]
Dagens tema Dagens tema Raskere kode [REB&DRO H kap 5] Når er det viktig? Hvordan måle eksekveringshastighet? Hvordan oppnår man raskere kode? Blanding av C og assemblerkode Er hastighet så viktig? Når
DetaljerÅ løse eksamensoppgaver
Å løse eksamensoppgaver Programmeringsoppgaver Flervalgsoppgaver Prøveeksamen Eksamen Hva er hensikten med oppgavene? Programmeringsoppgaver Vil typisk være å skrive en funksjon eller oversette en funksjon
DetaljerDagens tema: 12 gode råd for en kompilatorskriver
Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter 12 gode råd Hva skal gjøres med navn? Sjekking av navn En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
DetaljerDel 3: Evaluere uttrykk
Del 3: Evaluere uttrykk Hva skal vi gjøre? Hvordan lagre Asp-verdier Hvilke operasjoner må jeg implementere? Er operasjonen lovlig? Utføre operasjonen Strukturen til interpreten vår f.asp 3&4 Interpret
DetaljerHvordan en prosessor arbeider, del 1
Hvordan en prosessor arbeider, del 1 Læringsmål Kompilator, interpret og maskinkode CPU, registre Enkle instruksjoner: de fire regnearter Mer informasjon om temaet Internett Lokalnett (LAN) Mitt program
DetaljerEn oppsummering. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen. Programmeringsoppgaver Flervalgsoppgaver
En oppsummering Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen Programmeringsoppgaver Flervalgsoppgaver Pensum Pensum Læreboken Forelesningene De obligatoriske oppgavene Ukeoppgavene
DetaljerIntro Evaluering Rask kode x86-op Optimalisering Inline-kode
Dagens tema Dagens tema Studentevalueringen 20.4.2009 Raskere kode Når er det viktig? Hvordan måle eksekveringshastighet? Hvordan oppnår man det? Blanding av C og assemblerkode Studentevalueringen 20.4.2009
DetaljerDagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?
Dagens tema: 12 gode råd for en kompilatorskriver Hva skal gjøres med navn? Sjekking av navn Hvordan sjekke navn? Testutskrifter 12 gode råd En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
DetaljerINF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april
INF5110 28. april, 2015 Stein Krogdahl Ifi, UiO Svar på oppgaver til kap. 8 Ble lagt ut 24. april 1 SVAR: Oppgave 8.1.c (fra boka) Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c Du skal ikke
DetaljerINF2100. Oppgave 1. Oppgave 2 4. Løsningsforslag til oppgaver uke 40 og Se figur 1 på neste side.
INF2100 Løsningsforslag til oppgaver uke 40 og 41 2014 Oppgave 1 Se figur 1 på neste side. Oppgave 2 4 Her er det mange mulige løsninger her er én: import java.io.*; import java.util.*; class E { public
DetaljerNotater: INF2270 Assembler
Notater: INF2270 Assembler Veronika Heimsbakk veronahe@student.matnat.uio.no 11. juni 2014 Innhold 1 Registere 2 2 Assembler-programmering 2 2.1 Instruksjoner........................... 3 2.2 Variabler..............................
DetaljerDagens tema: Sjekking (obligatorisk oppgave 3)
Dagens tema Dagens tema: Sjekking (obligatorisk oppgave 3) Navnebinding Biblioteket Logging Riktig bruk av navn Typesjekking Utregning av konstanter Hele prosjektet Strukturen til kompilatoren vår f.pas
DetaljerDagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Modifikasjon av grammatikken. Utifra dette RusC programmet:
Dagens tema Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter Programmeringsstil 12 gode råd Dagens tema Prosjektet Utifra dette RusC programmet: func pot2 (int x) int
DetaljerDagens tema INF1070. Bit fikling. Makroer. Blanding av C og assemblerkode. Mer om Core War. Dag Langmyhr,Ifi,UiO: Forelesning 22. mai 2006 Ark 1 av 25
Dagens tema Bit fikling Makroer Blanding av C og assemblerkode Mer om Core War Dag Langmyhr,Ifi,UiO: Forelesning 22. mai 2006 Ark 1 av 25 Bit fikling Når alt er bit, gir det oss som programmerere nye muligheter.
DetaljerINF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8
INF5110 25. april, 2014 Stein Krogdahl Ifi, UiO Svar på oppgaver til kap. 8 som ble lagt ut 24. april Feil bes rapportert til: «steinkr@ifi.uio.no» 1 SVAR: Oppgave 8.1.c (fra boka) Lag for hånd TA-kode
DetaljerDagens tema. Programmering av x86 INF2270. Minnestrukturen i en prosess. Flytting av data Endring av størrelse. Aritmeriske operasjoner Flagg
Dagens tema Programmering av x86 Minnestrukturen i en prosess Flytting av data Endring av størrelse Aritmeriske operasjoner Flagg Maskeoperasjoner Skifting og rotasjoner Hopp Tester Stakken Rutinekall
DetaljerDagens tema INF1070. Makroer. Sanntidsprogrammering. Avbrudd. Bruker- og supermodus. Blanding av C og assemblerkode. Selvmodifiserende kode
Dagens tema Makroer Sanntidsprogrammering Avbrudd Bruker- og supermodus Blanding av C og assemblerkode Selvmodifiserende kode Dag Langmyhr,Ifi,UiO: Forelesning 2. mai 2005 Ark 1 av 20 Makroer Ofte gjentar
DetaljerDagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Koblingen mellom grammatikken og klasser. Utifra dette RusC-programmet:
Dagens tema Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter Programmeringsstil 12 gode råd Dagens tema Prosjektet Utifra dette RusC-programmet: int pot2 (int x) int
DetaljerLøsningsforslag til eksamen i INF2270
Løsningsforslag til eksamen i INF227 Oppgave 9 Omid Mirmotahari Oppgave 6 Dag Langmyhr. juni 24 Eksamen INF227 Sensorveiledning Oppgave 2 Kretsforenkling Hva er funksjonsuttrykket for Output gitt av A
DetaljerIntro Digital eksamen Rask kode x86-op Optimalisering Inline-kode Konklusjon
Dagens tema Dagens tema Digital eksamen Raskere kode [REB&DRO H kap 5] Når er det viktig? Hvordan måle eksekveringshastighet? Hvordan oppnår man raskere kode? Blanding av C og assemblerkode Hva skjer ved
DetaljerDagens tema. Raskere kode [REB&DRO H kap 5]
Dagens tema Dagens tema Raskere kode [REB&DRO H kap 5] Når er det viktig? Hvordan måle eksekveringshastighet? Hvordan oppnår man raskere kode? Blanding av C og assemblerkode Dagens tema CPU-ene går ikke
DetaljerDagens tema. Makroer Ofte gjentar man kodelinjer når man skriver assemblerkode. Da kan det lønne seg å definere en makro:
Dagens tema Makroer Sanntidsprogrammering Avbrudd Bruker- og supermodus Blanding av C og assemblerkode Selvmodifiserende kode Makroer Ofte gjentar man kodelinjer når man skriver assemblerkode. Da kan det
DetaljerKort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon
Kort om meg INF1000 Uke 2 Variable, enkle datatyper og tilordning Fredrik Sørensen Kontor: Rom 4311-NR, Informatikkbygget Brukernavn/e-post: fredrso@ifi.uio.no Utdanning: Dataingeniør, 2000 Cand.Scient,
DetaljerINF Noen oppgaver til kap. 8
INF5110 2014 Noen oppgaver til kap. 8 Utvidet utgave lagt ut 24. april Gjennomgås 25. april, 2014 Stein Krogdahl 1 Oppgave 8.1.c (fra boka) Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c
DetaljerINF Noen oppgaver til kap. 8
INF5110 2015 Noen oppgaver til kap. 8 Gjennomgås 28. april, 2015 Stein Krogdahl 1 Oppgave 8.1.c (fra boka) Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c Du skal ikke prøve å optimalisere
DetaljerINF2100. Oppgave 1, 2 og 3. Løsningsforslag til oppgaver 23. og 24. september Her er det mange mulige løsninger her er én: import java.io.
INF2100 Løsningsforslag til oppgaver 23. og 24. september 2010 Oppgave 1, 2 og 3 Her er det mange mulige løsninger her er én: import java.io.*; class E { public static void main(string arg[]) { Scanner.init();
DetaljerSyntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100
Syntaksanalyse På skolen hadde vi grammatikkanalyse: Dagens tema: Syntaksanalyse Hva annet gjør en kompilator? Sjekking av navnebruk Testutskrifter Fanger krabber så lenge de orker Syntaksanalyse er på
DetaljerDagens tema. Er maskinen big endian? Denne funksjonen tester det: INF1070 INF1070 INF1070 INF1070
Dagens tema Bit fikling Makroer Blanding av C og assemblerkode Mer om Core War Dag Langmyhr,Ifi,UiO: Forelesning 22. mai 2006 Ark 1 av 25 Bit fikling Når alt er bit, gir det oss som programmerere nye muligheter.
DetaljerINF 1000 høsten 2011 Uke september
INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første
DetaljerINF1000 undervisningen INF 1000 høsten 2011 Uke september
INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første
DetaljerIN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)
IN00 Løsningsforslag Uke 0 019 Oppgave 1 (Disse filene finnes også i mappen ~inf0/e/e/.) 1 class E { public s t a t i c void main ( S t r i n g arg [ ] ) { Scanner s = new Scanner ( arg [ 0 ] ) ; Expression
DetaljerHva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }
Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =
Detaljer13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER
.9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,
DetaljerINF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene
Dagens tema: INF 2100 8. september 2004 Mer om strukturen i treet og hvordan bygge det Testing av at navn er deklarert og brukt riktig Arbeid i gruppene neste uke: Oppgaver relevant for dette stadiet i
DetaljerProgrammering av x86. Minnestrukturen i en prosess Flytting av data. Skifting og rotasjoner Hopp. Stakken Rutinekall. Aritmeriske regneoperasjoner
Programmering av x86 Minnestrukturen i en prosess Flytting av data Endring av størrelse Aritmeriske regneoperasjoner Flagg Maskeoperasjoner Skifting og rotasjoner Hopp Tester Stakken Rutinekall Kall og
DetaljerDagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter
Dagens tema: Syntaksanalyse Hva annet gjør en kompilator? Sjekking av navnebruk Testutskrifter Dag Langmyhr,Ifi,UiO: Forelesning 4. oktober 2005 Ark 1 av 20 Syntaksanalyse På skolen hadde vi grammatikkanalyse:
DetaljerVelkommen til INF2100
Kursopplegg Velkommen til INF2100 Jeg er (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Programmeringsspråket C En kort
DetaljerC< og kompilatoren hans
UNIVERSITETET I OSLO Institutt for informatikk C< og kompilatoren hans Kompendium til INF2100 Stein Krogdahl Dag Langmyhr Høsten 2011 Innhold Innhold 1 Figurer 5 Tabeller 7 Forord 9 1 Innledning 11 1.1
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 14. juni 2007 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 9 sider. Vedlegg: INF1070 og INF2270 Datamaskinarkitektur
DetaljerC og kompilatoren hans. Kompendium for INF2100
C og kompilatoren hans Kompendium for INF2100 Stein Krogdahl, Dag Langmyhr Høsten 2012 Innhold Innhold 3 Figurer 7 Tabeller 9 Forord 11 1 Innledning 13 1.1 Hva er emnet INF2100?..........................
DetaljerC< og kompilatoren hans
UNIVERSITETET I OSLO Institutt for informatikk C< og kompilatoren hans Kompendium til INF2100 Stein Krogdahl Dag Langmyhr Høsten 2010 Innhold Innhold 1 Figurer 5 Tabeller 7 Forord 9 1 Innledning 11 1.1
DetaljerOPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?
OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.
DetaljerMinneområder Det er vanlig å dele opp minnet til en prosess i disse ulike områdene: Fast minne Store og små indianere «align» ing struct er
Dagens tema: Minnet Minneområder Det er vanlig å dele opp minnet til en prosess i disse ulike områdene: Fast minne Store og små indianere «align» ing struct er 0xfffffffc Variable Stakk Lister Noen nyttige
Detaljerpublic static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren
Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en
DetaljerBakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?
Kursopplegg Velkommen til INF2100 Bakgrunnen Bakgrunnen for INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 13. juni 2013 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 9 sider. Vedlegg: Tillatte hjelpemidler: INF2270 Datamaskinarkitektur
DetaljerINF april, 2013 Kap. 8 Noen oppgaver som er meget relevante for Oblig 2
INF5110 16. april, 2013 Kap. 8 Noen oppgaver som er meget relevante for Oblig 2 Oppgave: Ut fra den objektorienterte trestrukturen vi laget for å representere Tiny-programmer (se neste foiler), gjør følgende
DetaljerHvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:
Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt: inchar INC inint INI Tegnet eller tallverdien kommer i I registeret. outchar OUTC outint (n) OUTI n outline OLIN I Flink maskinen
DetaljerLøsningsforslag til eksamen i INF2270
Løsningsforslag til eksamen i INF2270 Omid Mirmotahari (oppgave 1 4) Dag Langmyhr (oppgave 5 6) 14. juni 2012 Eksamen inf2270 V12 - fasit 1) (5%) Forkort følgende uttrykk med karnaugh diagram zw xy 00
DetaljerEn kompilator for Pascal. Kompendium for INF2100
En kompilator for Pascal Kompendium for INF2100 Stein Krogdahl, Dag Langmyhr Høsten 2015 Innhold Forord 9 1 Innledning 11 1.1 Hva er emnet INF2100?....................... 11 1.2 Hvorfor lage en kompilator?....................
DetaljerEivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen
Eivind Gard Lund 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen Informasjon Semantikksjekk Kodegenerering Oblig 2 tilgjengelig på kurssiden Bygger på deres oblig 1 kode. Det er lagt ut
DetaljerDiverse eksamensgaver
Diverse eksamensgaver Noen har fått den idé å lage et språk hvor klasser kan ha noe tilsvarende byvalue-result -parametere. Klasser har ingen konstruktører, og by-value-result parametere spesifiseres som
DetaljerHjemmeeksamen 2 i INF3110/4110
Hjemmeeksamen 2 i INF3110/4110 Innleveringsfrist: onsdag 19. november kl. 1400 Innlevering Besvarelsen av oppgave 2,3,4 og 5 skal leveres skriftlig på papir i IFI-ekspedisjonen. Merk denne med navn, kurskode,
DetaljerRuntime-omgivelser Kap 7 - I
Runtime-omgivelser Kap 7 - I Generelt Språk som bare trenger statiske omgivelser Språk som trenger stakk-orienterte omgivelser Språk som trenger mer generelle omgivelser Vel så riktig å si at forskjellige
DetaljerForhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema
Forhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Charles Babbage Midt på 1800-tallet
Detaljer