Å løse eksamensoppgaver

Like dokumenter
UNIVERSITETET I OSLO

En oppsummering. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen. Programmeringsoppgaver Flervalgsoppgaver

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Intro Rask kode x86-op Optimalisering Inline-kode Konklusjon

Løsningsforslag til eksamen i INF2270

Intro Digital eksamen Rask kode x86-op Optimalisering Inline-kode Konklusjon

Dagens tema. Raskere kode [REB&DRO H kap 5]

Debuggere En «debugger» er et meget nyttig feilsøkingsverktøy. Det kan analysere en program dump, Dagens tema INF1070 INF1070 INF1070 INF1070

Dagens tema. Raskere kode [REB&DRO H kap 5]

Intro Evaluering Rask kode x86-op Optimalisering Inline-kode

Løsningsforslag til eksamen i INF2270

Dagens 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. Er maskinen big endian? Denne funksjonen tester det: INF1070 INF1070 INF1070 INF1070

En oppsummering (og litt som står igjen)

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

Dagens tema Programmering av x86 Flytting av data Endring av størrelse

Dagens tema INF2270. Flyt-tall (B&O H-boken 2.4, 3.14) Hvordan lagres de? Hvordan regner man med dem? Bit-fikling (B&O H-boken 2.1.

Dagens tema INF2270. Flyt tall (B&O H boken 2.2.3) Hvordan lagres de? Hvordan regner man med dem? Overflyt (B&O H boken )

Programmering av x86. Minnestrukturen i en prosess Flytting av data. Skifting og rotasjoner Hopp. Stakken Rutinekall. Aritmeriske regneoperasjoner

Dagens tema. Minnestrukturen Grovt sett ser minnet for hver process slik ut: Flytting av data. Programmering av x86

Dagens tema. Representasjon av mantissen En desimalbrøk: 1 1, INF2270 INF2270 INF2270 INF2270

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

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

Rutiner [REB&DRO H 3.7]

Dagens tema: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler

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

Programmering av x86 [REB&DRO H ]

UNIVERSITETET I OSLO

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

Dagens tema. Programmering av x86 INF2270. Minnestrukturen i en prosess. Flytting av data Endring av størrelse. Aritmeriske operasjoner Flagg

UNIVERSITETET I OSLO

Dagens tema. 2. Feilsøking. 1. Minnet. Fast minne. gdb ddd Valgrind Egne testutskrifter. Noen nyttige instruksjoner. Bit-fikling

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Tema for siste forelesning:

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Dagens tema. 1. Funksjonskall. 3. Feilsøking. 2. Minnet. Noen nyttige instruksjoner. Stakken Lokale variable. gdb ddd. Fast minne

2 Parser. 1 Skanner. 4 Kodegenerator. 3 Sjekker. Oversikt Datamaskinhistorie x86 Kodegenerering Setninger Uttrykk.

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Dagens tema 1: Minnet

Dagens tema. 1. Funksjonskall. 3. Feilsøking. 2. Minnet. Noen nyttige instruksjoner. Stakken Lokale variable. gdb ddd. Fast minne

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Dagens tema INF1070. Makroer. Sanntidsprogrammering. Avbrudd. Bruker- og supermodus. Blanding av C og assemblerkode. Selvmodifiserende kode

Tema for siste forelesning:

Dagens tema. 1. Funksjonskall. 3. Feilsøking. 2. Minnet. Noen nyttige instruksjoner. Stakken Lokale variabler. gdb ddd. Fast minne

Tema for siste forelesning:

Dagens tema: Kodegenerering. Versjonskontroll. Variabler, spesielt vektorer Funksjoner, kall og parametre Noen siste gode råd.

Notater: INF2270 Assembler

Dagens tema. Makroer Ofte gjentar man kodelinjer når man skriver assemblerkode. Da kan det lønne seg å definere en makro:

Tema for siste forelesning:

Forhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema INF1070 INF1070 INF1070

Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin?

Dagens tema. Funksjonskall. Flyt-tall. Rekursive kall Lokale variable. Hvordan lagres de? Hvordan regner man med dem?

Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin?

Forhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema

Dagens tema. Representasjon av mantissen En desimalbrøk: 1 1, INF1070 INF1070 INF1070 INF1070

Løsningsforslag til eksamen i INF2270

Generell informasjon

Oversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering

IN1010 Objektorientert programmering Våren 2019

Hvordan en prosessor arbeider, del 1

UNIVERSITETET I OSLO

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

UNIVERSITETET I OSLO

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Eksamen INF2270 våren 2018

UNIVERSITETET I OSLO

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

UNIVERSITETET I OSLO

Informasjon Eksamen i IN1000 høsten 2017

Dagens tema: Semantisk sjekking. Maskinkode. Hvordan finne deklarasjoner? Hvordan programmere sjekking av riktig navnebruk?

UNIVERSITETET I OSLO

Dagens tema. Flyt-tall. Koding. 64-bits kode. Hvordan lagres de? Hvordan regner man med dem? Koding av instruksjoner Kodefiler Linking

UNIVERSITETET I OSLO

Løsningsforslag til 2. del av Del - EKSAMEN

Informasjon Prøveeksamen i IN1000 høsten 2018

Oversikt over IN147(A):

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Dagens tema. Flyt-tall. Koding. Tegnsett. Hvordan lagres de? Hvilke egenskaper har de? Hvordan regner man med dem?

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Dagens tema: Enda mer MIPS maskinkode

Seksjon 1. INF2270-V16 Forside. Eksamen INF2270. Dato 1. juni 2016 Tid Alle trykte og skrevne hjelpemidler, og en kalkulator, er tillatt.

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Del 1 En oversikt over C-programmering

Innhold. 2 Kompilatorer. 3 Datamaskiner og tallsystemer. 4 Oppsummering. 1 Skjerm (monitor) 2 Hovedkort (motherboard) 3 Prosessor (CPU)

UNIVERSITETET I OSLO

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Løsningsforslag til eksamen i INF103

Dagens tema. Flyt-tall. Koding. 64-bits kode. Hvordan lagres de? Hvordan regner man med dem? Koding av instruksjoner Kodefiler Linking

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Løsningsforslag til eksamen i INF2270

Programmering i C++ Løsningsforslag Eksamen høsten 2005

UNIVERSITETET I OSLO

Transkript:

Å 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 fra C til assemblerkode. Hvorfor gi slike oppgaver? Se om studenten har forstått assemblerprogrammering. La studenten velge hvordan han/hun vil løse oppgaven.

Et lite hint Hint Du kan programmere ganske fritt så lenge koden gjør det den skal. Eksempel: for (i=1; i<=n; ++i)... kan godt oversettes til n,%ecx Lab1:... loop Lab1 Det vesentlig er å overbevise sensor om at du kan dette.

Selve eksamensoppgaven Eksamensoppgaven Funksjonen strcpy kopierer én tekst til et angitt sted. Du skal skrive funksjonen char *multistrcpy (char *res,...) som kan kopiere vilkårlig mange tekster til res; etter siste tekst kommer parameteren 0. Funksjonen skal skrives i x86-assemblerspråk.

Løsningen Standard start og slutt.globl multistrcpy # Navn: multistrcpy. # Synopsis: En strcpy for mange tekster. # C-signatur: char *multistrcpy (char *res,...). # Registre: %AL - tegnet som skal kopieres # %EDX - peker på neste parameter # %ESI - hvor det skal kopieres fra # %EDI - res, der resultatet havner multistrcpy: pushl %ebp # Standard %esp,%ebp # funksjonsstart pushl %edi # Gjem unna %EDI pushl %esi # og %ESI. 8(%ebp),%edi # Hent parameter res. leal 12(%ebp),%edx # Sett %EDX til å peke på parameter nr 2. cld # La adressene øke under kopering.. msc_x: movb $0,(%edi) # Avslutt res med 0-byte. 8(%ebp),%eax # Angi svarverdien. popl %esi # Hent tilbake %ESI popl %edi # og %EDI. popl %ebp # Standard ret # retur.

Løsningen Ytre løkke # Ytre løkke: løper gjennom alle paramtrene. msc_l: cmpl $0,(%edx) # Hvis neste parameter er 0, je msc_x # er vi ferdig. (%edx),%esi # Hent neste parameter, og addl $4,%edx # legg den i %ESI.. Indre løkke # Indre løkke: kopierer alle tegnene. msc_c: cmpb $0,(%esi) # Hvis neste tegn er 0, je msc_l # er kopieringen ferdig, # og vi kan gjenta ytre løkke. movsb # Flytt ett tegn (og oppdater %ESI og %EDI). jmp msc_c # Gjenta indre løkke.

Hvorfor gi slike oppgaver? Flervalgsoppgaver Her vil du få oppgitt små kodesnutter i C og assembler med spørsmål om hva som blir resultatet. Hvorfor gi slike oppgaver? Studenten skal vise forståelse for både C-kode og assemblerinstruksjoner. Studenten skal få slippe å skrive seg i hjel.

Et par små hint Hint Vær ekstremt nøye med å lese koden! Hensikten med oppgavene er ikke å «lure» studenten, men å sjekke detaljforståelse. Hint Bruk hjelpemidlene! Slå opp instruksjonene om du er i den minste tvil. Hint Ikke vær redd for å oppgi flere svaralternativer eller for å gjette! Du kan ikke få verre enn blankt svar.

Flervalgsoppgavene extern unsigned int f1 (unsigned int a, unsigned int b, unsigned int c); int main (void) { unsigned int v = f1(0x12345678, 0x000000ff, 0x0000ff00); printf("test 1: 0x%08x\n", v); }.globl f1 f1: pushl %ebp %esp,%ebp andl orl popl ret 8(%ebp),%eax 12(%ebp),%eax 16(%ebp),%eax %ebp 1 Test 1: 0x00000000 2 Test 1: 0x0000ff00 3 Test 1: 0x0000ff78 4 Test 1: 0x0000ffff 5 Test 1: 0x1234ff78 6 Det vil oppstå en feil («exception») 7 Noe annet enn alternativene over

Flervalgsoppgavene extern int f2 (int a[], int n); int data[6] = { 33, -2, 49, -88, 0, 13 }; int main (void) { int v = f2(data, 6); printf("test 2: %d\n", v); }.globl f2 f2: pushl %ebp %esp,%ebp 8(%ebp),%edx 12(%ebp),%ecx (%edx),%eax f2_l: decl %ecx jz f2_x addl $4,%edx cmpl (%edx),%eax jge f2_l (%edx),%eax jmp f2_l f2_x: popl %ebp ret 1 Test 2: -88 2 Test 2: 0 3 Test 2: 13 4 Test 2: 33 5 Test 2: 49 6 Det vil oppstå en feil («exception») 7 Noe annet enn alternativene over

Flervalgsoppgavene extern int f3 (char *a); char *txt = "En bitte liten test!"; int main (void) { int v = f3(txt+9); printf("test 3: %d\n", v); }.globl f3 f3: pushl %ebp %esp,%ebp pushl %edi cld movb repnz scasb subl popl popl ret 8(%ebp),%edi $0xffffffff,%ecx $,%al $-2,%eax %ecx,%eax %edi %ebp 1 Test 3: -1 2 Test 3: 0 3 Test 3: 2 4 Test 3: 5 5 Test 3: 20 6 Det vil oppstå en feil («exception») 7 Noe annet enn alternativene over

Flervalgsoppgavene extern int f4 (int a, int b); int main (void) { int v = f4(4,1); printf("test 4: %d\n", v); }.globl f4 f4: pushl %ebp %esp,%ebp pushl pushl call popl popl popl ret 8(%ebp),%edx %edx 12(%ebp),%edx %edx sub %edx %edx %ebp sub: pushl %ebp %esp,%ebp subl 8(%ebp),%eax 12(%ebp),%eax 1 Test 4: -3 2 Test 4: 0 3 Test 4: 3 4 Test 4: 4 5 Test 4: 5 6 Det vil oppstå en feil («exception») 7 Noe annet enn alternativene over popl ret %ebp

Flervalgsoppgavene extern float f5 (float a, float b, float c); int main (void) { float v = f5(1.0, 2.0, -1.0); printf("test 5: %f\n", v); }.globl f5 f5: pushl %ebp %esp,%ebp flds flds flds faddp fsqrt faddp popl ret 8(%ebp) 12(%ebp) 16(%ebp) %ebp 1 Test 5: 0.000000 2 Test 5: 0.732051 3 Test 5: 1.000000 4 Test 5: 1.414214 5 Test 5: 2.000000 6 Det vil oppstå en feil («exception») 7 Noe annet enn alternativene over

Flervalgsoppgavene extern int f6 (int a[], int n); int data[6] = { 2, 3, 5, 7, 11, 13 }; int main (void) { int v = f6(data,6); printf("test 6: %d\n", v); }.globl f6 f6: pushl %ebp %esp,%ebp 8(%ebp),%edx 12(%ebp),%ecx $0,%eax f6_l: subl js $1,%ecx f6_x addl (%edx),%eax incl %edx jmp f6_l f6_x: popl %ebp ret 1 Test 6: 0 2 Test 6: 6 3 Test 6: 13 4 Test 6: 28 5 Test 6: 41 6 Det vil oppstå en feil («exception») 7 Noe annet enn alternativene over

Prøveeksamen Frivillig prøveeksamen Tid: Tirsdag 20.5 kl 10.15 12. Sted: Oppmøte i Store auditorium Formål: 1 Teste programvaren 2 Teste egne kunnskaper

Den store dagen! Eksamen Eksamen er 11. juni 2014 klokken 14.30 18.30. Sted Eksamen vil finne sted i Ole-Johan Dahls hus. Følge med på StudentWeb for å få vite hvilke rom.

Den store dagen! Hjelpemidler Alle trykte og skrevne hjelpemidler er tillatt. Batteridrevet lommekalkulator er lov og kan være nyttig. Selv om eksamen skjer på datamaskin, har dere ikke tilgang til annen programvare enn den sikre nettleseren. I tillegg til å svare på datamaskinen kan dere levere svar (med diagrammer etc) på papir.

Siste gode råd Sjekk godkjenningslister Besøk //devilry.ifi.uio.no/ og sjekk godkjentlisten for kurset for å se din status. Ta kontakt med gruppelærer (eller meg) hvis du mener det er gjort feil. I siste instans: Møt opp på eksamensdagen og krev å få avlegge eksamen.

Siste gode råd Problemer under eksamen? Faglærerne vil være til stede eksamenslokalene hele tiden. Da er det anledning til å stille spørsmål om alt. Bruk tiden riktig Det er mye bedre å svare litt på alle spørsmålene enn perfekt på noen og intet på andre. Forslag: Bruk så mye av tiden som oppgaven teller (dvs bruk 25% av tiden på en oppgave som teller 25%).