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

Like dokumenter
Dagens tema: Enda mer MIPS maskinkode

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

Oversikt over IN147(A):

IN 147 Program og maskinvare

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

Overordnet maskinarkitektur. Maskinarkitektur zoomet inn. I CPU: Kontrollenheten (CU) IT1101 Informatikk basisfag, dobbeltime 11/9

Dark load-store-maskin

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

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

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

Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

Dagens temaer. Fra kapittel 4 i Computer Organisation and Architecture. Kort om hurtigminne (RAM) Organisering av CPU: von Neuman-modellen

IN 147 Program og maskinvare

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. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

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

En oppsummering (og litt som står igjen)

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

Forelesning Instruksjonstyper Kap 5.5

Forelesning ISA: IJVM Kap 4.2

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

Oppgave 1 Oversettelse (total vekt 20%)

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

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

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

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 Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Hvordan en prosessor arbeider, del 1

Notater: INF2270 Assembler

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

Kap. 8 del 1 kodegenerering INF5110 Vår2007

Dark Stakkmaskin. Aritmetiske instruksjoner

Del 1 En oversikt over C-programmering

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

Kap. 8 del 1 kodegenerering INF april, 2008

Løsningsforslag til eksamen i IN147(A)

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

hvor mye hurtigminne (RAM) CPU en kan nyttiggjøre seg av. mens bit ene betraktet under ett kalles vanligvis et ord.

Stack. En enkel, lineær datastruktur

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

Norsk informatikkolympiade runde

Maskinvaredelen av INF 103: oversikt og innhold (1)

! Sentrale begreper er adresserbarhet og adresserom. ! Adresserbarhet: Antall bit som prosessoren kan tak samtidig i én operasjon

Løsningsforslag til eksamen i INF2270

Dagems temaer INF ! Fra kapittel 4 i Computer Organisation and Architecture. ! Kort om hurtigminne (RAM)

Løsningsforslag til eksamen i IN 147(A)

Løsningsforslag til eksamen i IN 147(A)

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

IN 147 Program og maskinvare

Dagems temaer. kapittel 4 i Computer Organisation and Architecture. av CPU: von Neuman-modellen. Transfer Language (RTL) om hurtigminne (RAM)

Norsk informatikkolympiade runde

Litt om Javas class-filer og byte-kode

Programmeringsspråket C Del 2

Runtime-omgivelser Kap 7 - I

INF3430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Del 4 Noen spesielle C-elementer

Forelesning ISA-nivået Kap 5.1

INF2270. Datamaskin Arkitektur

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

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

INF2270. Datamaskin Arkitektur

Forelesning Adresseringsmodi Kap 5.4

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

Norsk informatikkolympiade runde

ITPE/DATS 2400: Datamaskinarkitektur og Nettverk

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Runtimesystemer Kap 7 - I

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

Norsk informatikkolympiade runde

INF3430/4430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2015

Innhold. Oppgave 1 Oversettelse (vekt 15%)

Løsningsforslag eksamen TDT4160 høsten 2005

Runtimesystemer Kap 7 - I

INF3430/4431. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

INF225 høsten 2003 Prosjekt del 4: kodegenerering

Tall. Posisjons-tallsystemer. Representasjon av heltall. Tall positive, negative heltall, flytende tall. Tekst ASCII, UNICODE XML, CSS

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

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

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2013

Binære trær: Noen algoritmer og anvendelser

Mer om representasjon av tall

IN 147 Program og maskinvare

Dagens tema. Datamaskinenes historie. De første moderne datamaskiner. Løsning. Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.

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

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

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

Transkript:

Dagens tema Mer MIPS maskinkode (P&H: 4.4 + 3.6 + 3.3 + A.6 + A.10) Maske-operasjoner Skift-operasjoner Lesing og skriving Pseudo-instruksjoner Mer om funksjonskall Registeroversikt Ark 1 av 16 Forelesning 3.2.1998

Maskeoperasjoner Maskeoperasjonene brukes til å sette eller nulle ut bit i henhold til et gitt mønster (en maske). Maske-AND Denne operasjonen nuller ut de bit som ikke er markert i masken. 0 1 0 1 0 1 0 1 AND 0 0 0 0 1 1 1 1 = 0 0 0 0 0 1 0 1 Denne operasjonen er tilgjengelig i C og heter der &. NB! Det er forskjell på & (maske-and eller bit-and) og && (logisk AND): 1 & 4 == 0 1 && 4 == 1 Siden operasjonen er symmetrisk, er det vilkårlig hvilken operand som betraktes som maske og hvilken som er data. Forelesning 3.2.1998 Ark 2 av 16

Maske-OR Denne operasjonen setter de bit som er markert i masken. 0 1 0 1 0 1 0 1 OR 0 0 0 0 1 1 1 1 = 0 1 0 1 1 1 1 1 Denne operasjonen er tilgjengelig i C og heter der. Maske-XOR Denne operasjonen snur de bit som er markert i masken. 0 1 0 1 0 1 0 1 XOR 0 0 0 0 1 1 1 1 = 0 1 0 1 1 0 1 0 Denne operasjonen også ofte «logisk addisjon». Den er tilgjengelig i C og heter der ^. Forelesning 3.2.1998 Ark 3 av 16

Skift-operasjoner Dette er operasjoner som flytter alle bit-ene i et ord mot høyre eller venstre. Logisk skift Her settes det inn 0-er fra enden: 0 1 0 1 0 1 1 1 sll $x,$x,1 1 0 1 0 1 1 1 0 sll $x,$y,2 1 0 1 1 1 0 0 0 srl $x,$x,1 0 1 0 1 1 1 0 0 srl $x,$x,4 0 0 0 0 0 1 0 1 Forelesning 3.2.1998 Ark 4 av 16

Aritmetisk skift I vårt desimale tallsystem kan man gange med 10 ved å sette inn en 0, og dele med 10 ved å fjerne siste siffer: 42 10 = 420 217/10 = 21 Det samme gjelder i det binære tallsystemet, men her er effekten å gange med 2 eller dele på 2: 0 0 1 0 1 0 1 0 (=42 ti ) 0 1 0 1 0 1 0 0 (=84 ti ) 1 1 0 1 1 0 0 1 (=217 ti ) 0 1 1 0 1 1 0 0 (=108 ti ) Forelesning 3.2.1998 Ark 5 av 16

Hva gjør vi så hvis det er fortegnsbit? Løsningen er å kopiere inn fortegnsbittet ved aritmetisk skift mot høyre. 0 1 0 1 0 1 1 1 sra $x,$x,1 0 0 1 0 1 0 1 1 sra $x,$y,2 0 0 0 0 1 0 1 0 1 1 0 1 0 1 1 1 sra $x,$x,1 1 1 1 0 1 0 1 1 sra $x,$y,2 1 1 1 1 1 0 1 0 Skifting i C C har to operatorer for skifting: << skifter mot venstre. >> skifter mot høyre. Hvis data er unsigned, foretas logisk skifting; ellers er det implementasjonsavhengig om det skjer logisk eller aritmetisk skifting. Forelesning 3.2.1998 Ark 6 av 16

Lesing og skriving Hittil har vi kun benyttet registre og konstanter. Nå er det på tide å ta for oss instruksjonene som gir kontakt med hurtiglageret («RAM»). 0x00FFFFFF RAM. CPU 0x0000000C 0x00000008 0x00000004 0x00000000 RAM består av byte gruppert 4 og 4 i ord. Instruksjonen lw («load word») flytter ett ord fra RAM til CPU-en. lw $8,100($4) Hvis $4 inneholder 1000, vil bytene i adresser 1100 1103 bli kopiert over i $8. Instruksjonen sw («store word») flytter motsatt vei. Forelesning 3.2.1998 Ark 7 av 16

Tilpasning («alignment») De fleste prosessorer krever at operasjoner på ord ikke må krysse ordgrenser; dette gjelder også MIPS. Følgelig må adresser som benyttes av lw og sw være et muliplum av 4, siden disse instruksjonene flytter 4 byte. Assembleren tilbyr et eget direktiv for dette:.align 2 (Senere skal vi ta for oss instruksjoner som leser eller skriver én og én byte. Da trenger vi ikke bekymre oss for tilpasningen.) Forelesning 3.2.1998 Ark 8 av 16

Byte-rekkefølge Hvis $8 inneholder 01020304 hex, vil instruksjonen sw $8,1000($0) lagre de fire byte-ene i lokasjonene 1000 1003 i RAM. Vil så byte-en 01 hex havne i 1000 eller 1003? Her er det forskjell på prosessorene. «Big-endian» vil lagre 01 hex i 1000, 02 hex i 1001, 03 hex i 1002 og 04 hex i 1003. Eksempler på «big-endian»-maskiner er 680x0. «Little-endian» vil lagre 01 hex i 1003, 02 hex i 1002, 03 hex i 1001 og 04 hex i 1000. Eksempler på «little-endian»-maskiner er Intels prosessorer. MIPS kan være begge deler: «little-endian» på en DECstation og «big-endian» på en Silicon Graphics. spim følger vertsmaskinen. Forelesning 3.2.1998 Ark 9 av 16

Pseudo-instruksjoner Det er uheldig å måtte skrive «gale» instruksjoner som add $4,$2,$0 når vi egentlig bare ønsker å flytte en verdi. Dessuten er det dumt å måtte skrive sekvenser som mult $4,$5 mflo $2 bare fordi prosessoren velger å legge svaret fra en mulitplikasjon i et spesielt register. Forelesning 3.2.1998 Ark 10 av 16

Løsningen på begge disse problemene er pseudo-instruksjoner. Dette er instruksjoner som ikke finnes i prosessoren, men som assembleren godtar og «oversetter» til én eller flere ekte instruksjoner. Vi får således lov å skrive move $4,$2 mul $2,$4,$5 la $8,adresse Den siste instruksjonen («load address») er en pseudo-instruksjon for lui ori $8, adresse/0x10000 $8, adresse%0x10000 Alle standard pseudo-instruksjoner står listet opp sammen med de ekte instruksjonene i avsnitt A-10 i læreboken. Forelesning 3.2.1998 Ark 11 av 16

Funksjonskall Vi har tidligere sett på funksjonskall, men noen problemer ble ikke dekket: Hva skjer hvis funksjonen har mer enn 4 parametre? Hva skal man gjøre med returadressen i register $31 hvis funksjonen selv kaller andre funksjoner? Hvor skal man lagre funksjonens lokale variable? Hvilke registre har funksjonen lov å endre, og hva gjør den hvis den trenger noen registre den ikke har lov å endre? Hva skjer hvis funksjonen brukes rekursivt (kaller seg selv)? Løsningen på alle disse punktene er: Bruk stakken! Forelesning 3.2.1998 Ark 12 av 16

Stakken Stakken er et sammenhengende område i lageret som kan brukes til mellomlagring. Register $29 peker alltid på første ledige posisjon på stakken. Høye adresser.. Lave adresser $29 Man kan legge en verdi på stakken ved å utføre sw $x,0($29) addi $29,$29,-4 og verdien kan hentes tilbake med addi $29,$29,4 lw $y,0($29) Forelesning 3.2.1998 Ark 13 av 16

Funksjonskall Når en funksjon («caller») skal kalle en annen funksjon («callee»), bør følgende skje: 1. Kalleren legger de temporære registre $8 $15 samt $24 og $25 på stakken hvis de inneholder noe viktig. Dette er de usikre («caller-save») temporærregistrene. 2. Kalleren legger de fire første parametrene i registre $4 $7; hvis det er flere parametre, legges de på stakken (i omvendt rekkefølge). 3. Det hoppes til funksjonen med en jal. Den kalte funksjonen bør så gjøre følgende: 1. Gjem unna register $31, om nødvendig. 2. Gjem også registrene $16 $23 hvis de skal endres. Dette er de sikre («callee-save») temporærregistrene. Forelesning 3.2.1998 Ark 14 av 16

Retur fra funksjon Det er litt mindre arbeid å returnere fra en funksjon. Den kalte funksjonen bør gjøre følgende: 1. Plassér funksjonsverdien i $2. 2. Hent tilbake registrene $16 $23 og $31 hvis disse er lagret på stakken. 3. Returner ved å hoppe til $31. Funksjonen som kalte, må også rydde opp litt: 1. Fjern parametrene fra stakken (hvis det var mer enn 4 parametre). 2. Hent tilbake de usikre registrene som ble lagret unna før kallet. Forelesning 3.2.1998 Ark 15 av 16

Registre Siden registrene har spesielle oppgaver, har de også et alternativt navn som illustrerer denne oppgaven: $zero $0 Alltid 0 MIPS $at $1 For assembleren $v0 $v1 $2 $3 Returverdi fra funksjon $a0 $a3 $4 $7 Parametre til funksjon $t0 $t9 $8 $15, $24 $25 Temporære (usikre) $s0 $s7 $16 $23 Temporære (sikre) $k0 $k1 $26 $27 For OS-kjernen $gp $28 Globale data $sp $29 Stakkpeker $fp $30 Rammepeker $ra $31 Returadresse MIPS Denne tabellen finnes også på side A-23 i læreboken. Forelesning 3.2.1998 Ark 16 av 16