Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

En oppsummering (og litt som står igjen)

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

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

Å løse eksamensoppgaver

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

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 )

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?

UNIVERSITETET I OSLO

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

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?

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

Hvordan en prosessor arbeider, del 1

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

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: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler

Generell informasjon

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

UNIVERSITETET I OSLO

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

Programmeringsspråket C

Løsningsforslag til eksamen i INF2270

Dagens tema. Er maskinen big endian? Denne funksjonen tester det: INF1070 INF1070 INF1070 INF1070

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

UNIVERSITETET I OSLO

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

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

Tema for siste forelesning:

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

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Løsningsforslag til eksamen i INF2270

UNIVERSITETET I OSLO

Oversikt over IN147(A):

Dagens tema: Enda mer MIPS maskinkode

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

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

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

IN 147 Program og maskinvare

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

Intro Evaluering Rask kode x86-op Optimalisering Inline-kode

Notater: INF2270 Assembler

Del 1 En oversikt over C-programmering

Kapittel 1 En oversikt over C-språket

Programmeringsspråket C

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

Programmeringsspråket C

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

UNIVERSITETET I OSLO

Stack. En enkel, lineær datastruktur

IN 147 Program og maskinvare

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

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

Eksamen INF2270 våren 2018

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

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

Del 4 Noen spesielle C-elementer

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

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

Programmering av x86 [REB&DRO H ]

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

Programmeringsspråket C Del 2

Oversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

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

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

Læringsmål og pensum. v=nkiu9yen5nc

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

IN 147 Program og maskinvare

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

Velkommen til INF5110 Kompilatorteknikk

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

Velkommen til INF Kompilatorteknikk

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

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

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

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

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

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Velkommen til INF2100

Programmeringsspråket C Del 2

IN1010 Objektorientert programmering Våren 2019

Programmeringsspråket C Del 2

Transkript:

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 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 Intel x86-kode, men prinsippene er de samme for alle prosessorer.

Hovedtanke Glem aldri! Alt 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.

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.

Overflyt (læreboka 2.3) Dette programmet #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 Feilen skyldes overflyt. Hva kan man gjøre med slikt? Strutseteknikken Sjekke data før operasjonen Sjekke etter operasjonen

Heltall uten fortegns-bit For addisjon og subtraksjon vil C-flagget bli satt 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

Heltall med fortegns-bit Ved addisjon og subtraksjon 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. Multiplikasjon og divisjon er som for tall uten fortegns-bit. Konklusjon Ved behov kan man sjekke på overflyt i assemblerprogrammering.

Hvis dere likte kurset... INF2100 Programmeringslaboratorium INF3110 Programmeringsspråk INF3151 Operativsystemer (20 stp) INF5110 Kompilatorteknikk INF1400 Digital teknologi INF1410 Introduksjon til kretsanalyse INF3400 Digital mikroelektronikk INF3410 Analog mikroelektronikk INF3430 Digital systemkonstruksjon

Forventet kunnskap til 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

Eksamen Eksamen er 11. juni klokken 14.30 17.30. Hjelpemidler Alle trykte og skrevne hjelpemidler er tillatt. Batteridrevet lommekalkulator er lov og kan være nyttig.

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 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

Sjekk godkjenningslister Besøk https://wwws.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.

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%).

Lykke til!