Tema for siste forelesning:
|
|
|
- Torhild Larsen
- 8 år siden
- Visninger:
Transkript
1 Dagens tema Tema for siste forelesning: Kodegenerering Funksjoner Testing Ulike testprogrammer Kompilering av programsystemer make ant
2 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
3 Så enkelt som mulig Et eksempel Den enklest mulige funksjonen (og et kall på den) ser slik ut: int f() { } int main () { f(); }.text.globl f f: enter $0,$0 # Start function f.exit$f: leave ret # End function f call f # Call f
4 Så enkelt som mulig Kallet Kallet skjer enkelt ved å generere en call. (Parametre venter vi litt med.)
5 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):.text.globl f f: enter $0,$0 # Start function f
6 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.
7 Faste ledd i en funksjonsdeklarasjon Lokale variabler Lokale variabler ligger på stakken, og vi må beregne adressen deres: int f1 () { int a; int b; int c; } a = 1; b = 2; c = 3;.globl f1 f1: enter $12,$0 # Start function f1 movl $1,%eax # 1 movl %eax,-4(%ebp) # a = movl $2,%eax # 2 movl %eax,-8(%ebp) # b = movl $3,%eax # 3 movl %eax,-12(%ebp) # c =.exit$f1: leave ret # End function f1
8 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.datasize() 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.
9 Faste ledd i en funksjonsdeklarasjon Dette gjelder også for lokale vektorer: double f2 () { double x; double y[10]; double z; } x = -1; y[0] = -2; z = -3;.globl f2 f2: enter $96,$0 # Start function f2 movl $-1,%eax # -1 movl %eax,.tmp fildl.tmp # (double) fstpl -8(%ebp) # x = movl $0,%eax # 0 pushl %eax movl $-2,%eax # -2 leal -88(%ebp),%edx popl %ecx movl %eax,.tmp fildl.tmp # (double) fstpl (%edx,%ecx,8) # y[...] = movl $-3,%eax # -3 movl %eax,.tmp fildl.tmp # (double) fstpl -96(%ebp) # z = fldz.exit$f2: leave ret # End function f2
10 Parametre Parametre Vi kan gi funksjonen parametre: int fd (int da, double db) { double va; int vb; } double two; int main () { fd(1, two); }
11 Parametre Konvensjonen er at parametrenes verdi overføres på stakken. NB! 1 Før kallet må parametrene legges på stakken. int: pushl double: subl+fstpl 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 int: %EAX double: på flyttallsstakken 4 Etter retur fra funksjonen må parametrene fjernes fra stakken igjen.
12 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.datasize() 3 Siden det er kalleren som legger parametrene på stakken, trenger ikke funksjonen gjøre det.
13 Parametre... 2,0 12(%ebp) 1 8(%ebp) Stakken etter kallet og initieringen: returadresse gammel %ebp %ebp va vb %esp...
14 Parametre.globl one one:.fill 8 # double one;.text.globl f2 f2: enter $0,$0 # Start function f2 double one;.exit$f2: leave int f2 (int a, ret # End function f2.globl main double b, main: enter $0,$0 # Start function main movl $1,%eax # 1 int c) movl %eax,.tmp {} int main () { one = 1; f2(0, one, 2); } fildl.tmp # (double) fstpl one # one = movl $2,%eax # 2 pushl %eax # Push parameter #3 fldl one # one subl $8,%esp fstpl (%esp) # Push parameter #2 movl $0,%eax # 0 pushl %eax # Push parameter #1 call f2 # Call f2 addl $16,%esp # Remove parameters.exit$main: leave ret # End function main
15 Parametre Navn i generert kode I koden vi genererer, vil navn på variabler og funksjoner se litt anderledes ut enn i C -programmet: Globale navn (både variabler og funksjoner) beholder C -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 C -koden. Declaration.assemblerName er navnet slik det skal se ut i generert kode.
16 return -setningen return-setningen return skal gjøre følgende: 1 Beregne resultatverdien slik at den ligger i %EAX-registeret eller på toppen av flyttallsstakken. 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) { :
17 return -setningen Hva om vi glemmer return? Det er lov å droppe return-setningen. Da kan funksjonen returnere hvilken verdi den vil. Men... Flyttallsstakken kommer i ulage om en double-funksjon ikke returnerer noen verdi. Løsning Vi avslutter alle double-funksjoner med en fldz som legger 0,0 på flyttallsstakken. Hvis funksjonen utfører en return, hopper vi over fldz. Hvis ikke, vil fldz legge 0,0 på stakken.
18 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: $ cflat -logb demo.cflat $./demo
19 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
20 Et eksempel Generert kode int pot2 (int x) { int p2; p2 = 1;.data.tmp:.fill 4 # Temporary storage.text.globl pot2 pot2: enter $4,$0 # Start function pot2 movl $1,%eax # 1 movl %eax,-4(%ebp) # p2 =
21 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 movl $2,%eax # 2 pushl %eax movl -4(%ebp),%eax # p2 movl %eax,%ecx popl %eax imull %ecx,%eax # Compute * movl %eax,-4(%ebp) # p2 = jmp.l0001.l0002: # End while-statement movl -4(%ebp),%eax # p2 jmp.exit$pot2 # Return-statement.exit$pot2: leave ret # End function pot2
22 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
23 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); }
24 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/local/share/inf2100 -lcflat eller fra C-biblioteket. Vi trenger altså ikke skrive standardfunksjonene.
25 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.
26 Alle programemr bør testes Det finnes også ferdiglagde testprogrammer: inneholder ni testprogrammer: *.cflat C -programmet *.s *.input *.res Generert assemblerkode Data til testprogrammet (for noen) Utskrift fra testprogrammet har 19 småprogrammer med feil, som int main (int argc) /* main skal ikke ha parametre! */ { putchar(! ); putchar(10); }
27 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!
28 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.
29 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.
30 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.
31 Bruk av make Et eksempel Denne bruker jeg for å kompilere dagens forelesning: demo.s: demo.cflat cflat -logb demo.cflat f2.s: f2.cflat cflat f2.cflat f4.s: f4.cflat cflat f4.cflat clean: rm -f *.log *.s
32 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
33 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.
34 Er ikke alt perfekt? Men... make er veldig Unix-orientert. Tilbudet av kommandoer, kommandonavnene, parameternotasjon og mye annet er forskjellig fra Unix til andre operativsystemer. Så... 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)
35 Her er ant I kurset kompilerer vi med denne build.xml: <?xml version="1.0"?> <project name="cflat" default="jar"> <target name="clean" description="fjern genererte filer"> <delete dir="classes"/> <delete file="cflat.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="cflat.jar"> <fileset dir="classes" includes="**/*.class"/> <manifest> <attribute name="main-class" value="no.uio.ifi.cflat.cflat.cflat"/> </manifest> </jar> </target> </project>
36 Veien videre... Om dere likte kurset har dere flere kurs innen samme felt ved Ifi: INF2270 lærer dere om hvordan en datamaskiner er bygget opp og hvordan de programmeres i assemblerkode. INF3110 introduserer dere for mange flere programmeringsspråk (og litt mer om kompilering) INF5110 gir en grundig innføring i hvordan man skriver en ekte kompilator
Tema 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
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 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
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
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
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»): Data.data Stakk %EAX %ECX %EDX %EBP %ESP Prosessor Kode Minne.text Hovedkortet Grovt sett inneholder et hovedkort En prosessor
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
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
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
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
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
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
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
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. 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.
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 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. 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
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.
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
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
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)
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
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
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
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. 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
C 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?..........................
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
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
Velkommen til INF2100. Bakgrunnen for INF2100. Hva gjør en kompilator? Prosjektet. Jeg er Dag Langmyhr
Kursopplegg Velkommen til INF2100 en en for INF2100 Jeg er ([email protected]). Dagens tema: Hva går kurset ut på? for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Pause (med registrering
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
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
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
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
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
Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011)
Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse
Dagens 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
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
Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.
Oppgaver uke 35: Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin. Oppgave 1. Skriv et C-program som leser mål i tommer og skriver det ut i fot og tommer. (Det er 12 tommer
Del 1 En oversikt over C-programmering
Del 1 En oversikt over C-programmering 1 RR 2016 Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av
public 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
public 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
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
OPPGAVE 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.
Dagens 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
Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays
Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson
