Tema for siste forelesning:
|
|
|
- Arnulf Ervik
- 8 år siden
- Visninger:
Transkript
1 Tema for siste forelesning: Kompilering av programsystemer make ant Kodegenerering Funksjoner Testing Ulike testprogrammer
2 Hvordan kompilere riktig? Programmet make Det er mange praktiske problemer forbundet med programmering av et større program: Hvordan holde orden på et stort program når det er mange separatkompilerte filer? Hvis én fil endres, hvilke filer må da kompileres på nytt? Hvordan sikre at alle de riktige opsjonene er med ved hver kompilering? Hvordan unngå at brukeren skriver seg i hjel på lange kommandolinjer? Den vanligste Unix-løsningen er make!
3 pmakefile-en Brukeren lager en fil med navn makefile eller Makefile. Den ser slik ut: F 0 : F 1 F 2... F n Tab Kommandolinje Tab Kommandolinje. Dette betyr: 1 Filen F 0 er «avhengig» av filene F 1, F 2,..., F n. Det betyr at hvis F 0 er eldre enn noen av disse, må F 0 regenereres. 2 Kommandolinjene må da utføres for å generere F 0. Disse linjene må starte med en Tab.
4 Bruk av make Programmet make gjør altså følgende: 1 Først leses filen makefile eller Makefile. 2 Så bygger make opp en oversikt (nærmere bestemt en graf) over hvilke filer som avhenger av hvilke. Utgangspunktet (roten) for denne grafen oppgis som parameter til make; ellers tas første fil. Denne grafen angir hvilken rekkefølge filene skal sjekkes (og eventuelt regenereres) i. For Java-programmer spiller ikke dette noen rolle, men av og til er dette vesentlig.
5 Bruk av make Nå kan hver fil sjekkes i riktig rekkefølge. Hvis 1 filen ikke finnes, eller 2 noen av filene den er avhengig av ikke finnes, eller 3 filen er eldre enn noen av de den er avhengig av, blir den regenerert. Brukeren får beskjed om hvilke kommandoer som utføres.
6 Bruk av make Et eksempel Denne bruker jeg for å kompilere dagens forelesning: uke-46.pdf: uke-46.tex demo.s f4.s pdflatex uke-46.tex pdflatex uke-46.tex demo.s: demo.alboc alboc -logb demo.alboc f4.s: f4.alboc alboc f4.alboc clean: rm -f *.log *.s
7 Bruk av make make-operasjoner Det fine med make er at man også kan legge inn handlinger (som «make clean» på forrige ark). $ make clean rm -f *.log *.s
8 Oppsummering Oppsummering om make make er meget nyttig til å holde orden på programsystemer med flere filer. Makefile-er er meget enkle å skrive. Det dokumenterer hva som må gjøres. Et Unix-system har tusener av Makefile-er.
9 Er ikke alt perfekt? Men... Så... make er veldig Unix-orientert. Tilbudet av kommandoer, kommandonavnene, parameternotasjon og mye annet er forskjellig fra Unix til andre operativsystemer. Programmet ant ble laget for støtte kompilering av Java-programmer kunne fungere uendret under ulike operativsystemer benytte et mer standisert spesifikasjonsspråk (i XML)
10 Her er ant I kurset kompilerer vi med denne build.xml: <?xml version="1.0"?> <project name="alboc" default="jar"> <target name="clean" description="fjern genererte filer"> <delete dir="classes"/> <delete file="alboc.jar"/> </target> <target name="compile" description="kompiler Java-programmet"> <mkdir dir="classes"/> <javac srcdir="." destdir="classes" includeantruntime="false"/> </target> <target name="jar" depends="compile" description="lag en JAR-fil"> <jar destfile="alboc.jar"> <fileset dir="classes" includes="**/*.class"/> <manifest> <attribute name="main-class" value="no.uio.ifi.alboc.alboc.alboc"/> </manifest> </jar> </target> <target name="zip" description="lag en ZIP-fil"> <zip destfile="alboc.zip" basedir="."/> </target> </project>
11 Hva må gjøres for funksjoner? Funksjoner For funksjoner må vi kunne lage kode for 1 funksjonskall parametre 2 funksjonen initiering lokale variabler avslutning resultatverdi 3 return-setningen
12 Så enkelt som mulig Et eksempel Den enklest mulige funksjonen (og et kall på den) ser slik ut: int f() { } int main () { f(); }.globl f f: enter $0,$0 # Start function f.exit$f: leave ret # End function f.globl main main: enter $0,$0 # Start function main call f # Call f.exit$main: leave ret # End function main
13 Så enkelt som mulig Kallet Kallet skjer enkelt ved å generere en call. (Parametre venter vi litt med.)
14 Faste ledd i en funksjonsdeklarasjon Initiering i funksjonen Funksjonens navn angis som en vanlig merkelapp. (Siden alle funksjoner er globale, må vi ha med en.globl-spesifikasjon.) Vi må starte med å initiere funksjonen og sette av plass til lokale variabler (første parameter til enter):.globl f f: enter $0,$0 # Start function f
15 Faste ledd i en funksjonsdeklarasjon Avslutning av funksjonen Ved retur må vi rydde opp i funksjonen før tilbakehoppet med en ret-instruksjon:.exit$f: leave ret # End function f Alle funksjoner får en navnelapp pga return-setningene.
16 Faste ledd i en funksjonsdeklarasjon Lokale variabler Lokale variabler ligger på stakken, og vi må beregne adressen deres: int f1 () { int a; int *p; int c; } a = 1; p = 0; c = 3;.globl f1 f1: enter $12,$0 # Start function f1 leal -4(%ebp),%eax # a pushl %eax movl $1,%eax # 1 popl %edx movl %eax,(%edx) # = leal -8(%ebp),%eax # p pushl %eax movl $0,%eax # 0 popl %edx movl %eax,(%edx) # = leal -12(%ebp),%eax # c pushl %eax movl $3,%eax # 3 popl %edx movl %eax,(%edx) # =.exit$f1: leave ret # End function f1
17 Faste ledd i en funksjonsdeklarasjon Følgende gjelder ved lokale variabler i funksjoner: 1 Start med en «offset»-teller o = 0. 2 For alle lokale variabler v: 1 o = o + v.declsize() 2 v får «navnet» o(%ebp). 3 Instruksjonen enter setter av plass til alle de lokale variablene. 4 Plassen frigjøres med instruksjonen leave.
18 Faste ledd i en funksjonsdeklarasjon Dette gjelder også for lokale vektorer: int f2 () { int x[2]; int y; int z[3]; int w; } x[0] = 1; y = 2; z[2] = 3; w = 4;.globl f2 f2: enter $28,$0 # Start function f2 movl $0,%eax # 0 leal -8(%ebp),%edx # x[...] leal (%edx,%eax,4),%eax pushl %eax movl $1,%eax # 1 popl %edx movl %eax,(%edx) # = leal -12(%ebp),%eax # y pushl %eax movl $2,%eax # 2 popl %edx movl %eax,(%edx) # = movl $2,%eax # 2 leal -24(%ebp),%edx # z[...] leal (%edx,%eax,4),%eax pushl %eax movl $3,%eax # 3 popl %edx movl %eax,(%edx) # = leal -28(%ebp),%eax # w pushl %eax movl $4,%eax # 4 popl %edx movl %eax,(%edx) # =.exit$f2: leave ret # End function f2
19 Parametre Parametre Vi kan gi funksjonen parametre: int fd (int da, int db) { int va; int vb; } int two; int main () { two = 2; fd(1, two); }
20 Parametre Konvensjonen er at parametrenes verdi overføres på stakken. 1 Før kallet må parametrene legges på stakken med instruksjonen pushl. NB! Parametrene må legges på stakken i omvendt rekkefølge! 2 Under utførelsen av funksjonen er parametrene som vanlige variabler med «navnene» 8(%ebp), 12(%ebp), 16(%ebp) etc. 3 Ved retur skal resultatverdien ligge i %EAX-registeret. 4 Etter retur fra funksjonen må parametrene fjernes fra stakken igjen.
21 Parametre Slik beregnes adressene til parametrene: 1 Start med en «offset»-teller o = 8. 2 For alle parametre p: 1 p får «navnet» o(%ebp). 2 o = o + p.declsize() 3 Siden det er kalleren som legger parametrene på stakken, trenger ikke funksjonen gjøre det.
22 Parametre (%ebp) 1 8(%ebp) Stakken etter kallet og initieringen: returadresse gammel %ebp %ebp va vb %esp...
23 Parametre int fd (int da, int db) { int va; int vb; } int two; int main () { two = 2; fd(1, two); }.globl fd fd: enter $8,$0 # Start function fd.exit$fd: leave ret # End function fd.data.globl two two:.fill 1,4,0 # int two.text.globl main main: enter $0,$0 # Start function main leal two,%eax # two pushl %eax movl $2,%eax # 2 popl %edx movl %eax,(%edx) # = movl two,%eax # two pushl %eax # Push parameter #2 movl $1,%eax # 1 pushl %eax # Push parameter #1 call fd # Call fd addl $8,%esp # Remove parameters.exit$main: leave ret # End function main
24 Parametre Navn i generert kode I koden vi genererer, vil navn på variabler og funksjoner se litt anderledes ut enn i AlboC-programmet: Globale navn (både variabler og funksjoner) beholder AlboC-navnet. På Windows og Mac får navnet en «_» foran. Parametre får «navn» på formen «n(%ebp)» (der n > 0). Lokale variabler får samme «navn» som parametre, men n < 0. Declaration.name er navnet i AlboC-koden. Declaration.assemblerName er navnet slik det skal se ut i generert kode.
25 Hva skjer ved retur? return-setningen return skal gjøre følgende: 1 Beregne resultatverdien slik at den ligger i %EAX-registeret. 2 Hoppe (med en jmp-instruksjon) til avslutningen.exit$xxxx. Men hva heter den funksjonen jeg er i? Løsningen er å la gencode ha en parameter som angir void gencode(funcdecl curfunc) { :
26 Hva skjer ved retur? Et lite tips Typesjekkingen skjer normal gjennomløpet av check-metodene. Men for å kunne typesjekke returverdien, må vi finne funksjonsdeklarasjonen. Hvor er den? Løsningen er å vente med typesjekking av returverdien til gencode-gjennomløpet. Da har vi en referanse til den funksjonen vi er inni.
27 Hva skjer ved retur? Hva om vi glemmer return? Det er lov å droppe return-setningen. Da kan funksjonen returnere hvilken verdi den vil.
28 Et eksempel Et siste eksempel int pot2 (int x) { int p2; p2 = 1; while (p2 < x) { p2 = 2*p2; } return p2; } int main () { putint(pot2(getint())); putchar(10); } Programmet kjøres slik: $ ~inf2100/alboc -logb demo.alboc $./demo
29 Et eksempel Navnebindinger (opsjonen -logb) 1 int pot2 (int x) { 2 int p2; p2 = 1; 3 while (p2 < x) { 4 p2 = 2*p2; 5 } 6 return p2; 7 } 8 9 int main () { 0 putint(pot2(getint())); 1 putchar(10); 2 } Binding: Line 2: p2 refers to declaration in line 2 Binding: Line 3: p2 refers to declaration in line 2 Binding: Line 3: x refers to declaration in line 1 Binding: Line 4: p2 refers to declaration in line 2 Binding: Line 4: p2 refers to declaration in line 2 Binding: Line 6: p2 refers to declaration in line 2 Binding: Line 10: putint refers to declaration in the library Binding: Line 10: pot2 refers to declaration in line 1 Binding: Line 10: getint refers to declaration in the library Binding: Line 11: putchar refers to declaration in the library Binding: main refers to declaration in line 9
30 Et eksempel Typesjekk (opsjonen -logt) 1 int pot2 (int x) { 2 int p2; p2 = 1; 3 while (p2 < x) { 4 p2 = 2*p2; 5 } 6 return p2; 7 } 8 Checking types: Line 2: v = e, where Type(v) is int and Type(e) is int Checking types: Line 3: x lesstoken y, where Type(x) is int and Type(y) is int Checking types: Line 4: x startoken y, where Type(x) is int and Type(y) is int Checking types: Line 4: v = e, where Type(v) is int and Type(e) is int Checking types: Line 3: while (t)..., where Type(t) is int Checking types: Line 10: Parameter #1 in call on pot2, where Type(actual) is int and Type(formal) is int 9 int main () { Checking types: Line 10: Parameter #1 in call on putint, 0 putint(pot2(getint())); 1 putchar(10); 2 } where Type(actual) is int and Type(formal) is int Checking types: Line 11: Parameter #1 in call on putchar, where Type(actual) is int and Type(formal) is int Checking types: Line 6: return e; in int f(...), where Type(e) is int
31 Et eksempel Generert kode int pot2 (int x) { int p2; p2 = 1;.globl pot2 pot2: enter $4,$0 # Start function pot2 leal -4(%ebp),%eax # p2 pushl %eax movl $1,%eax # 1 popl %edx movl %eax,(%edx) # =
32 Et eksempel } while (p2 < x) { p2 = 2*p2; } return p2;.l0001: # Start while-statement movl -4(%ebp),%eax # p2 pushl %eax movl 8(%ebp),%eax # x popl %ecx cmpl %eax,%ecx movl $0,%eax setl %al # Test < cmpl $0,%eax je.l0002 leal -4(%ebp),%eax # p2 pushl %eax movl $2,%eax # 2 pushl %eax movl -4(%ebp),%eax # p2 movl %eax,%ecx popl %eax imull %ecx,%eax # Compute * popl %edx movl %eax,(%edx) # = jmp.l0001.l0002: # End while-statement movl -4(%ebp),%eax # p2 jmp.exit$pot2 # Return-statement.exit$pot2: leave ret # End function pot2
33 Et eksempel int main () { putint(pot2(getint())); putchar(10); }.globl main main: enter $0,$0 # Start function main call getint # Call getint pushl %eax # Push parameter #1 call pot2 # Call pot2 addl $4,%esp # Remove parameters pushl %eax # Push parameter #1 call putint # Call putint addl $4,%esp # Remove parameters movl $10,%eax # 10 pushl %eax # Push parameter #1 call putchar # Call putchar addl $4,%esp # Remove parameters.exit$main: leave ret # End function main
34 Har vi fått med alt? Hva med rekursive funksjoner? Vårt opplegg med å legge parametre, returadresse og lokale variabler på stakken gjør at rekursive funksjoner ikke er noe problem. int fak (int n) { if (n <= 1) { return 1; } return n * fak(n - 1); }
35 Har vi fått med alt? Biblioteksfunksjonene Hvordan tar vi oss av standardfunksjonene exit, getchar etc? Vi må legge inn funksjonsnavnene i kompilatoren slik at vi vet at de er deklarert og at de brukes riktig (dvs har korrekt antall parametre og riktig type). Ellers kan vi benytte dem fritt i assemblerkoden vi lager; den eksekverbare koden til disse funksjonene hentes av gcc med -L/hom/inf2100 -lalboc eller fra C-biblioteket. Vi trenger altså ikke skrive standardfunksjonene.
36 Alle programemr bør testes Testing Alle programmer må testes. NB! De beste testprogrammene skriver du selv! Tenk på noe som kan gå galt. Skriv et testprogram som sjekker akkurat dette.
37 Alle programemr bør testes Det finnes også ferdiglagde testprogrammer: inneholder ti testprogrammer: *.alboc AlboC-programmet *.s Generert assemblerkode *.input Data til testprogrammet (for noen) *.res Utskrift fra testprogrammet har 19 småprogrammer med feil, som int main (int argc) /* main skal ikke ha parametre! */ { putchar(! ); putchar(10); }
Tema 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
Tema 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
Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variabler Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del 0
Oversikt 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
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
Kompilering 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
Det 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
Dagens 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
Det 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.
Det 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
En 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
IN 147 Program og maskinvare
Dagens tema Mer om C Cs preprosessor Allokering av variable Separat kompilering Programmet make Pekere i C Operasjoner på pekere Pekere og vektorer Referanseparametre Pekere til «alt» og «ingenting» Dynamisk
2 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
Den 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
Pensum 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
Lø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
Dagens tema: Generelt om variable. Kodegenerering. Deklarasjon av array er. Versjonskontroll. Oppslag i array er
Dagens tema Dagens tema: Kodegenerering og kall Hovedprogrammet Noen siste gode råd Versjonskontroll CVS og Deklarasjon av array er Når programmet deklarerer en array, må kompilatoren vår sette av plass
Dagens 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.
Dagens 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
Dagens tema. Nyttige programmer Programmet make. Flyt-tall Representasjon av flyt-tall. Standarden IEEE 754. Systemkall i Unix
Dagens tema Nyttige programmer Programmet make Flyt-tall Representasjon av flyt-tall Standarden IEEE 754 Systemkall i Unix Ark 1 av 24 Programmet make Det er mange praktiske problemer forbundet med programmering
Dagens 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
Lø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
Dagens tema. Rask-maskinen. Rasko-kode Raskas-kode. Litt datamaskinhistorie Registre og lagre Instruksjoner
Dagens tema Dagens tema Rask-maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner Rasko-kode Raskas-kode Dagens tema En overikt RusC-program x = x+1; ADD R1,R2,R1 Raskas-kode Kompilator rusc
En overikt. Dagens tema. Datamaskinenes historie. Rask-maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner. Rasko-kode.
Dagens tema Dagens tema Dagens tema En overikt RusC-program x = x+1; ADD R1,R2,R1 Raskas-kode Rask-maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner Kompilator rusc raskas Rasko-kode 401020000000001...
Dagens tema. Datamaskinenes historie. De første moderne datamaskiner. Løsning. Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.
Dagens tema Dagens tema Charles Babbage Datamaskinenes historie maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner kode kode Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.
Dagens 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
Dagens 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
Programmeringsspråket C
Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger
Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?
Kursopplegg Velkommen til INF2100 Bakgrunnen Bakgrunnen for INF2100 Jeg er Dag Langmyhr ([email protected]). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får
Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering
Dagens tema Vektorer (array er) Tekster (string er) Adresser og pekere Dynamisk allokering Dag Langmyhr,Ifi,UiO: Forelesning 23. januar 2006 Ark 1 av 23 Vektorer Alle programmeringsspråk har mulighet til
Dagens 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
AlboC 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?....................
Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI
Viktig Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon Fredrik Sørensen OMS-gruppen, IfI Ny patch (patch_oblig2.zip) legges ut på kurssiden i dag. Oblig 1 vil bli rettet denne uken Sjekk
En 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
Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer
Dagens program Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer Nyttige forklaringer Sikker opprettelse av nye prosesser Hva
Velkommen til INF2100
Kursopplegg Velkommen til INF2100 Jeg er ([email protected]). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Pause (med registrering av fremmøte)
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: Eksamensdag: 12. juni 2015 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 11 sider. Vedlegg: Tillatte hjelpemidler: INF2270
Forhistorien 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
Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin?
Dagens tema Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin? Intel-prosessoren Enkel assemblerprogrammering Dag
Programmeringsspråket C Del 3
Programmeringsspråket C Del 3 Michael Welzl E-mail: [email protected] 29.08.13 inf1060 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen
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.6,.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/5 Repetisjon: Statiske språk uten rekursive
Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)
Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/25 Forelesning 11 5.11.2003 Repetisjon:
Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.
Dagens tema Dagens tema C-programmering Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Adresser og pekere Parametre Vektorer (array-er) Tekster (string-er) Hvordan ser minnet
Velkommen til INF2100 Jeg er Dag Langmyhr
Velkommen til Jeg er Dag Langmyhr ([email protected]). Bakgrunn for I INF1000 20 har dere lært å rammere, men bare små rammer (< 1000 linjer). Hensikten med er å gi mer rammeringstrening Dagens tema: Hva
INF5110. Oblig 2 presentasjon
INF5110 Oblig 2 presentasjon Informasjon Oppgaven Semantikksjekk Kodegenerering Bytecode-biblioteket Ant-targets Oppsummering Oversikt Informasjon Oblig 2 tilgjengelig på kurssiden Patch med testfiler
Dagens tema C, adresser og pekere
Dagens tema C, adresser og pekere (Kapittel 17 i Patt&Patel-boken) Variable og adresser Pekervariable Parametre Dynamisk allokering Stakker og ringbuffere Ark 1 av 26 Adresser Som nevnt tidligere ligger
Oppgave 1 - Linux kommandolinje (%)
Løsningsforslag Eksamen høst 2017 Operativsystemer Oppgave 1 - Linux kommandolinje (%) a) pwd b) ps Oppgave 2 - Bash-scripting (%) a) ping -i 5 www.hin.no b) ping -c 1 www.hin.no ping -c 1 -t 1 www.hin.no
Obligatorisk Innlevering 2
Obligatorisk Innlevering 2 INF5110 - Kompilatorteknikk Våren 2017 Frist 07.05.2017 23:59 Dette er den andre av to oppgaver våren 2017. Den bygger videre på det som er gjort i den første innleveringen.
INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt
INF5110 Obligatorisk Oppgave 2 del 2 Andreas Svendsen SINTEF 23. April 2009 Oversikt Tilbakeblikk på oppgaven Eksempel på sjekk av semantikk Eksempel på kodegenerering Nødvendige instruksjoner for IF-noden
Vektorer. Dagens tema. Deklarasjon. Bruk
Dagens tema Dagens tema Deklarasjon Vektorer Vektorer (array-er) Tekster (string-er) Adresser og pekere Dynamisk allokering Alle programmeringsspråk har mulighet til å definere en såkalte vektor (også
Kapittel 1 En oversikt over C-språket
Kapittel 1 En oversikt over C-språket RR 2015 1 Skal se på hvordan man En innføring i C Skriver data til skjermen Lese data fra tastaturet Benytter de grunnleggende datatypene Foretar enkle matematiske
Fra Python til Java, del 2
Fra Python til Java, del 2 Hvordan kjøre Java? På Ifis maskiner På egen maskin Et eksempel Array-er For-setninger Lesing og skriving Metoder Biblioteket Hva trenger vi egentlig? Å kjøre Java For å kunne
