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

Like dokumenter
Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

En oppsummering (og litt som står igjen)

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

Å løse eksamensoppgaver

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

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 )

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

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

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

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

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

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? Hvordan har utviklingen gått? Hva inneholder en datamaskin?

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

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

UNIVERSITETET I OSLO

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?

Hvordan en prosessor arbeider, del 1

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

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

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. Minnestrukturen Grovt sett ser minnet for hver process slik ut: Flytting av data. Programmering av x86

Generell informasjon

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.

Intro Rask kode x86-op Optimalisering Inline-kode Konklusjon

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

UNIVERSITETET I OSLO

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

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

Programmeringsspråket C

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

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

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Dagens tema: Enda mer MIPS maskinkode

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

Intro Evaluering Rask kode x86-op Optimalisering Inline-kode

Oversikt over IN147(A):

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

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

Løsningsforslag til eksamen i INF2270

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF2270

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

IN1010 Objektorientert programmering Våren 2019

Tema for siste forelesning:

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Notater: INF2270 Assembler

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

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

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

Oversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering

Eksamen INF2270 våren 2018

Programmeringsspråket C

Kapittel 1 En oversikt over C-språket

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Programmeringsspråket C

Programmering av x86 [REB&DRO H ]

Stack. En enkel, lineær datastruktur

IN 147 Program og maskinvare

IN 147 Program og maskinvare

Oppgave 1 JK-flip-flop (Total vekt 20%)

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

Del 4 Noen spesielle C-elementer

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

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

Del 1 En oversikt over C-programmering

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

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

Velkommen til. IN1010 Objektorientert programmering Våren 2018

UNIVERSITETET I OSLO

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Datamaskinarkitektur våren 2009

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

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

Programmeringsspråket C Del 2

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

IN 147 Program og maskinvare

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

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

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

Velkommen. Velkommen til INF2270. Datamaskinarkitektur. Motto: Datamaskinen på tvers

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

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

Dagens tema. LC-2 LC-2 er en «ekstrem-risc»; den har 16 instruksjoner og 3 adresseringsmåter.

EKSAMENSOPPGAVE. Kontaktperson under eksamen: Steffen Viken Valvåg Telefon:

Dagens tema. Oppsummering om assemblerspråk. Programmering i C. Bakgrunn. Et minimalt eksempel med forklaring. Datatyper i C.

Velkommen til INF2100

Forelesning 5. Diverse komponenter/større system

Transkript:

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 og øvingsoppgavene er pensum. (Forelesningene og ukeoppgavene demonstrerer hva vi legger vekt på.)

Hvorfor har dere tatt dette emnet? Hvorfor har dere lært dette? Ikke mange programmerer assemblerkode i dag, men noen gjør det noen må jobbe med kompilatorer som lager slik kode kjennskap til slik kode er en forutsetning for å forstå hvordan datamaskinen er bygget opp og fungerer kjennskap til maskinkode gjør oss til bedre programmere i høynivåspråk Vi har lært mest om Intel x86-kode, men prinsippene er de samme for alle prosessorer.

Kjernekunnskapen! Hovedtanke Glem aldri! Alt er bit!

Når kode også er bit Selvmodifiserende kode Når programkode lagres som bit-mønstre, kan man da la programmet endre på seg selv? 1.globl teller 2.data 3 0000 55 teller: pushl %ebp 4 0001 89E5 movl %esp,%ebp 5 6 0003 B8010000 movl $1,%eax 6 00 7 0008 83050400 addl $1,teller+4 7 000001 8 9 000f 5D popl %ebp 10 0010 C3 ret Denne funksjonen returnerer 1 første gang den kalles. Samtidig endres instruksjonen slik at den vil gi 2 neste gang den utføres osv.

Når kode også er bit Koden er plassert i.data for å kunne endres. På noen maskiner vil det kunne bli rot med data- og instruksjons-cache. Konklusjon Det er morsomt at det går an, men slik kode kan neppe kalles hverken lettlest eller trygg.

Hva når vi ikke har bit nok? Overflyt #include <stdio.h> int main (void) { signed char v = 100; v = v + v; printf("v = %d\n", v); return 0; } gir galt svar: v = -56 100 = 01100100 2 200 = 11001000 2 = 56 Feilen skyldes overflyt. Hva kan man gjøre med slikt? Strutseteknikken Sjekke data før operasjonen Sjekke om operasjonen gikk bra

Hva når vi ikke har bit nok? Heltall uten fortegns-bit For addisjon og subtraksjon settes C-flagget ved overflyt. Ved multiplikasjon blir det aldri problemer siden svaret kommer med dobbelt så mange bit. Ved divisjon kan det bli et avbrudd!.globl ovfl ovfl: movl mill,%eax imull mill idivl ti ret.data mill:.long 1000000 ti:.long 10 gir Floating point exception

Hva når vi ikke har bit nok? Heltall med fortegns-bit Ved addisjon kan man bruke O-flagget som settes ved overflyt. Nærmere bestemt settes det når 1 begge operandene har likt fortegns-bit og 2 resultatet har motsatt fortegns-bit. Tilsvarende skjer ved subtraksjon om 1 operandene har ulikt fortegn og 2 resultatregisteret skifter fortegn. Multiplikasjon og divisjon er som for tall uten fortegns-bit. Konklusjon Ved behov kan man bruke assemblerprogrammering til å sjekke på overflyt.

Hva må dere kunne? Forventet kunnskap til min del av eksamen oppbygningen av datamaskiner (registre, flagg, minne, stakk,... ) bit-lagring av instruksjoner, heltall (av ulike størrelser, ± fortegns-bit), flyt-tall, C-tekster,... notasjon for assemblerkode (registre, konstanter, adresser,... ) instruksjoner for dataflytting og -testing, regning, masking, hopp (± testing), skifting/rotasjoner,... implementasjon av datastrukturer (vektorer, lister, C-tekster, struct-er, union-er,... ) funksjoner og kall på disse overflyt, selvmodifiserende kode

Den store dagen! Eksamen Eksamen er 13. juni 2013 klokken 14.30 18.30. Hjelpemidler Alle trykte og skrevne hjelpemidler er tillatt. Batteridrevet lommekalkulator er lov og kan være nyttig.

Den store dagen! Frivillig prøveeksamen på datamaskin Dette skjer mandag 27. mai fra kl 10.00 14.00. Følg med på beskjedene på kursets nettsider for nærmere opplysninger.

Den store dagen! Hva slags oppgaver kan forventes fra meg? Programmering i C og assembler, for eksempel oversettelse den ene eller andre veien. Finne ut hva et program gjør.

Hva er det viktigste? Hva er viktig? Overbevise sensor om at man har skjønt ideen bak stoffet. Gode korte kommentarer. Enkel kode. Hva er ikke så viktig? Syntaksdetaljer Rask kode

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? Eksamensdagen vil faglærerne gå runde i eksamenslokalet omtrent klokken 15.30 16.00. 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%).