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

Like dokumenter
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»):

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

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?

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

Hvordan en prosessor arbeider, del 1

En oppsummering (og litt som står igjen)

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

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

Notater: INF2270 Assembler

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

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

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

Tema for siste forelesning:

Å løse eksamensoppgaver

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Intro Evaluering Rask kode x86-op Optimalisering Inline-kode

Intro Rask kode x86-op Optimalisering Inline-kode Konklusjon

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

UNIVERSITETET I OSLO

Tema for siste forelesning:

UNIVERSITETET I OSLO

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

Prosessoren. Bakgrunnen Innhold LMC. Assemblerkode Oppsummering instruksjonene [Englander kap 6] Hva inneholder den? Hvordan utføres instruksjonene?

Dagens tema: Enda mer MIPS maskinkode

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

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

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF2270

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

Oversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering

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

Programmering av x86 [REB&DRO H ]

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

UNIVERSITETET I OSLO

Del 4 Noen spesielle C-elementer

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. Representasjon av mantissen En desimalbrøk: 1 1, INF1070 INF1070 INF1070 INF1070

Debugging. Tore Berg Hansen, TISIP

Dagens tema. Rask-maskinen. Rasko-kode Raskas-kode. Litt datamaskinhistorie Registre og lagre Instruksjoner

Forelesning 5. Diverse komponenter/større system

En overikt. Dagens tema. Datamaskinenes historie. Rask-maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner. Rasko-kode.

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.2.3) Hvordan lagres de? Hvordan regner man med dem? Overflyt (B&O H boken )

Tema for siste forelesning:

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.

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

IN 147 Program og maskinvare

Løsningsforslag til eksamen i INF2270

INF1400 Kap4rest Kombinatorisk Logikk

Rutiner [REB&DRO H 3.7]

Del 1 En oversikt over C-programmering

Tema for siste forelesning:

UNIVERSITETET I OSLO

Datamaskinen LC-2. Dagens tema. Tall i datamaskiner Hvorfor kan LC-2 lagre tall i intervallet ? Hvorfor er det akkurat celler i lageret?

Dagens tema. Datamaskinen LC-2 En kort repetisjon. Binære tall Litt om tallsystemer generelt. Binære tall. Heksadesimale og oktale tall

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Oppgave 1 - Linux kommandolinje (%)

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

Datamaskinens oppbygning

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

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

Programmeringsspråket C

Programmeringsspråket C

Minnehåndtering i operativsystemer

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

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

Programmeringsspråket C

INF3430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

Dagens tema. Nyttige programmer Programmet make. Flyt-tall Representasjon av flyt-tall. Standarden IEEE 754. Systemkall i Unix

Generell informasjon

INF3430/4431. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

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

Høynivåspråk og assembly

Programmeringsspråket C Del 2

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

Dagens tema 1: Minnet

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.

C< og kompilatoren hans

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

Dagens tema. Nyttige programmer Programmet make. Hvis én fil endres, hvilke filer må da kompileres på nytt?

Transkript:

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 Minne (for både program og data) Klokke Kontrollere for periferutstyr.

Prosessoren Prosessoren Prosessoren er «selve datamaskinen». Det finnes mange ulike prosessorer fra ulike produsenter. I dette kurset skal vi se på IA-32 (= x86) fra Intel, en 32-bits prosessor. Det finnes en hel familie med x86-prosessorer fra Intel og andre, fra Intels 8086 (fra 1987) til dagens AMD Bulldozer. Vi skal konsentrere oss om Pentium 4 fra 2000.

Prosessoren Prosessoren En prosessor inneholder: En ALU («Arithmetic and Logic Unit») eller flere Registre Kontrollogikk (I dag ligger det også coprosessorer, cache og mye annet på prosessorbrikken, men dette er logisk sett ikke del av prosessoren.)

Registre Registre En x86-prosessor har følgende registre: Mer eller mindre generelle 32-bits %AX %EAX %AH %AL %EBX %BH %BL %ECX %CH %CL %EDX %DH %DL %EBP %ESP %ESI %EDI

Registre Spesielle 16-bits %CS %DS %ES %FS %GS %SS Spesielle 32-bits %EFLAGS %EIP

En minimal assemblerfunksjon Assembler-programmering Denne lille C-funksjonen returnerer verdien 19: int nineteen (void) { return 19; } nineteen.c Denne assembler-funksjonen gjør det samme:.globl nineteen: movl ret nineteen $19, %eax nineteen.s Den legger verdien 19 i register %EAX der alle funksjoner legger resultatverdien, og returnerer.

Et passende testprogram Et testprogram Dette programmet kan teste funksjonen: #include <stdio.h> test-nineteen.c extern int nineteen (void); int main (void) { printf("nineteen() = %d\n", nineteen()); return 0; }

Assemblering Programmet gcc kan håndtere både C-kompilering og assemblering: $ gcc -m32 test-nineteen.c nineteen.s -o test-nineteen NB! Ikke glem opsjonen m32! Det ferdige programmet kan nå kjøres: $./test-nineteen nineteen() = 19

Maskinkode er nesten det samme som assemblerkode Maskinkode kontra assemblerkode Programmet ligger lagret som maskinkode, dvs bit-mønstre. 1 nineteen.list GAS LISTING nineteen.s page 1 1.globl nineteen 2 nineteen: 3 0000 B8130000 movl $19, %eax 3 00 4 0005 C3 ret Siden numeriske koder er vanskelige å huske, brukes assemblerkode som bare er huskekoder. 1 Ved å skrive gcc -m32 -Wa,-a -c minfil.s >minfil.list kan vi få se hvordan maskinkoden ser ut.

Høynivåkode er noe helt annet Assemblerkode kontra høynivåprogrammering Det er stor forskjell på assemblerkode og høynivåspråk: Kompilering av høynivåspråk Vi vet ikke hvilke maskininstruksjoner som genereres (men er ikke interessert). Programmet kan (stort sett) flyttes uendret til en annen datamaskin uansett fabrikat eller operativsystem. Assemblering Vi vet nøyaktig hvilke maskininstruksjoner som genereres. Programkoden kan ikke flyttes til datamaskiner med annet instruksjonssett eller operativsystem.

Parametre Parametre Parametre ligger på stakken så man får tak i dem med «4(%esp)», «8(%esp)»,... Data Stakk.data %EAX %ECX %EDX %EBP %ESP Prosessor Kode Minne.text

Parametre incr:.globl incr movl incl ret #include <stdio.h> extern int incr (int n); int main (void) { int i; incr.s 4(%esp),%eax %eax test-incr.c for (i = 10; i <= 14; ++i) printf("incr(%d) = %d\n", i, incr(i)); return 0; } Resultatet av kjøringen: incr(10) = 11 incr(11) = 12 incr(12) = 13 incr(13) = 14 incr(14) = 15

Parametre Et eksempel til Denne funksjonen har to parametre: add:.globl add movl addl ret add.s 4(%esp),%eax 8(%esp),%eax

Parametre #include <stdio.h> test-add.c extern int add (int a, int b); int tab[] = {1, 17, -3}; int main (void) { int tab_length = sizeof(tab)/sizeof(int); int i1, i2; for (i1 = 0; i1 < tab_length; ++i1) { for (i2 = 0; i2 < tab_length; ++i2) { int a1 = tab[i1], a2 = tab[i2]; printf("add(%d,%d) = %d\n", a1, a2, add(a1,a2)); } } return 0; } add(1,1) = 2 add(1,17) = 18 add(1,-3) = -2 add(17,1) = 18 add(17,17) = 34 add(17,-3) = 14 add(-3,1) = -2 add(-3,17) = 14 add(-3,-3) = -6

Hva har vi lært? Oppsummering Vi kjenner nå til følgende instruksjoner: movl addl subl Flytt en verdi Adder en verdi til en annen Subtraher incl Øk en verdi med 1 decl Senk en verdi med 1 ret Returner fra funksjon Operander kan være: $17 Konstanter %eax Registeret %EAX 4(%esp) Parametre (på stakken)