En oppsummering (og litt som står igjen)



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

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

Oppbygningen av en datamaskin 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»):

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:

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

Å løse eksamensoppgaver

Hvordan en prosessor arbeider, del 1

UNIVERSITETET I OSLO

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

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

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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?

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

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

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.

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Løsningsforslag til eksamen i INF2270

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

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

UNIVERSITETET I OSLO

Intro Rask kode x86-op Optimalisering Inline-kode Konklusjon

Programmeringsspråket C

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Tema for siste forelesning:

Løsningsforslag til eksamen i INF2270

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Programmering av x86 [REB&DRO H ]

Dagens tema: Enda mer MIPS maskinkode

UNIVERSITETET I OSLO

Intro Evaluering Rask kode x86-op Optimalisering Inline-kode

Notater: INF2270 Assembler

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

Programmeringsspråket C

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Oversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering

Kapittel 1 En oversikt over C-språket

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

Utførelse av programmer, metoder og synlighet av variabler i JSP

Del 1 En oversikt over C-programmering

VELKOMMEN TIL MAT-INF1100(L) Knut Mørken Rom 1033, Niels Henrik Abels hus

Husk å registrer deg på emnets hjemmeside!

Del 4 Noen spesielle C-elementer

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

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

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

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

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

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

Dagens tema. Mer MIPS maskinkode. Maske-operasjoner Skift-operasjoner Lesing og skriving Pseudo-instruksjoner Mer om funksjonskall Registeroversikt

Generell informasjon

MAT-INF 1100: Obligatorisk oppgave 1

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

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

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

Generiske mekanismer i statisk typede programmeringsspråk

IN 147 Program og maskinvare

Forelesning Instruksjonstyper Kap 5.5

UNIVERSITETET I OSLO

MAT-INF 1100: Obligatorisk oppgave 1

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

Stack. En enkel, lineær datastruktur

UNIVERSITETET I OSLO

Programmeringsspråket C Del 2

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Tema for siste forelesning:

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Velkommen til INF2100

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Programmeringsspråket C

Debugging. Tore Berg Hansen, TISIP

Forelesning 5. Diverse komponenter/større system

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

Tema for siste forelesning:

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

UNIVERSITETET I OSLO

INF1400 Kap4rest Kombinatorisk Logikk

Transkript:

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 obligatoriske oppgavene øvingsoppgavene (Forelesningene, de obligatoriske oppgavene 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 ( INF3151/4151) noen må jobbe med kompilatorer som lager slik kode ( INF2100) 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.

Hva er viktigst av alt dere har lært? Hovedtanke Glem aldri! Alt er bit!

Hva er viktigst av alt dere har lært? En byte med innholdet 195 = 0xCE kan være Verdien 195 Verdien 61 En del av et 16-bits, 32-bits eller 64-bit heltall (med eller uten fortegns-bit) En del av et 32-bits eller 64-bits flyt-tall Tegnet à i kodingen ISO LATIN-1 Starten av et Unicode-tegn Instruksjonen ret En del av en fler-bytes instruksjon Brukdefinerte data

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? Funksjonen teller returnerer 1 første gang den kalles, 2 neste gang osv. #include <stdio.h> extern int teller (void); test-tellerink.c int main (void) { printf("teller() -> %d\n", teller()); printf("teller() -> %d\n", teller()); printf("teller() -> %d\n", teller()); } teller() -> 1 teller() -> 2 teller() -> 3

Når kode også er bit 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 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 kommer svaret med dobbelt så mange bit. Da kan vi sjekke øverste 32 bit av svaret. 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. Hva med subtraksjon? Husk at a b beregnes oftest som a + ( b) 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

Hva må dere kunne? 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