Dark load-store-maskin

Like dokumenter
Dark Stakkmaskin. Aritmetiske instruksjoner

Introduksjon til DARK assembly

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

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

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

Løsningsforslag til øving 5 TFE4105 Digitalteknikk og Datamaskiner Høsten 2006

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

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

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

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

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

Forelesning Instruksjonstyper Kap 5.5

INF2270. Datamaskin Arkitektur

AVSLUTTENDE EKSAMEN I. TDT4160 Datamaskiner Grunnkurs Løsningsforslag. Torsdag 29. November 2007 Kl

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

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

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

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

AVSLUTTENDE EKSAMEN I. TDT4160 Datamaskiner Grunnkurs. Torsdag 29. November 2007 Kl

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

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

INF2270. Datamaskin Arkitektur

Forelesning 5. Diverse komponenter/større system

Løsningsforslag til eksamen i INF2270

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

INF1400 Kap4rest Kombinatorisk Logikk

ITPE/DATS 2400: Datamaskinarkitektur og Nettverk

Maskinvaredelen av INF 103: oversikt og innhold (1)

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

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

Notater: INF2270 Assembler

Del 4 Noen spesielle C-elementer

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

Avdelingfor ingeniørutdanning

INF2100. Dagens tema: Flink-maskinen Litt datamaskinhistorie. Registre og lagre. Instruksjoner. Flass-koden

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

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

Forelesning ISA: IJVM Kap 4.2

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

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

Betinget eksekvering og logiske tester i shell

Programmeringsspråket C

Forelesning Adresseringsmodi Kap 5.4

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

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT AUGUST, 2013, 09:00 13:00. Norwegian University of Science and Technology Engineering The Department of Computer and Information Science

IN1020. Datamaskinarkitektur

Litt om Javas class-filer og byte-kode

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

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

En oppsummering (og litt som står igjen)

Eksterne minnekort Brukerhåndbok

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

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

Datamaskinens virkemåte

EKSAMEN I TDT4160 DATAMASKINER GRUNNKURS

Fortsetelse Microarchitecture level

Løsningsforslag eksamen TDT4160 høsten 2005

EKSAMEN I TDT4160 DATAMASKINER GRUNNKURS

Del 1 En oversikt over C-programmering

Datamaskinenes historie Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.

UNIVERSITETET I OSLO

Dagens temaer. Mer om adresseringsmodi. Indeksert adressering med offset og auto-inkrement eller dekrement. Register-indirekte adressering

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

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

Forelesning Forgreningspredikering Kap 4.5 Superskalaritet Kap 4.5 Spekulativ utføring Kap 4.5

Brukermanual for Tumam Data Collection

INF3430. Funksjoner og prosedyrer Standardbiblioteker Komplekse sekvensielle systemer

Norsk informatikkolympiade runde

Institiutt for informatikk og e-læring, NTNU CPUens deler og virkemåte Geir Ove Rosvold 4. januar 2016 Opphavsrett: Forfatter og Stiftelsen TISIP

NORGES TEKNISK-NATURVITENSKAPELIGE UNIVERSITET INSTITUTT FOR DATATEKNIKK OG INFORMASJONSVITENSKAP

2. Pekere og referanser.

Datamaskinens oppbygning

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

Transkript:

Dark load-store-maskin Figur 1: Load-store arkitektur i Dark Dette dokumentet beskriver arkitekturen til load-store-maskina som benyttes i Dark. Figur 1 viser hvordan den ser ut. Det finnes 32 registre i maskinen. I alle instruksjoner som jobber med data må minst en av operandene være et register og resultatet blir satt inn i et av registrene. Tre av registrene har spesielle anvendelsesområder og bør anvendes forsiktig: Register 0 (null) har alltid verdien null og kan ikke endres Register 1 (en, «zero») er reservert for assembleren Register 31 (brukes til «sp») brukes til stakkpekeren og peker alltid på nåværende stakktopp i nåværende stakk. definisjon Noe som er skrevet i courier er et nøkkelord som må være med. Noe som er skrevet i SMALL CAPS er et ord eller uttrykk som må settes, men programmereren kan selv bestemme den rette verdien f.eks. variabelnavn. Variabelnavnet kan ikke være det samme som et av nøkkelordene. Noe som er skrevet i kursiv er noe som eventuelt kan forekomme Noe som er skrevet i normal stil i semantiskbeskrivelse er en oppdatering av et internt (usynlig) register. {a b} betyr enten a eller b. NUMMER er hvilket som helst nummer. VARIABEL er hvilken som helst variabel.

Om en stakk(f.eks. returstakk) står på venster side av en betyr det at verdien legges på stakken. Om den står til høyre for pilen betyr det at verdien hentes fra toppen av stakken og tas bort. Symbolske adresser ETIKETT ETIKETT minneposisjon Lag en LABEL som viser hvor i minne et gitt kodestykke begynner. Disse LABEL-ene kan man skrive hvor som helst foruten inne i instruksjonene, f.eks. så går det fint å skrive snurra ret. Register $ $ NUMMER Sifferne angir hvilket register man bruker. sp sp Angir at man vil bruke register 31. zero zero Angir at man vil bruke register 0. Register- og minneinstruksjoner load load REGISTER,{ REGISTER, NUMMER NUMMER VARIABEL} register {mem[register+ NUM] NUM VAR} Målregisteret får enten verdien som er angitt som et nummer, innholdet i variabelen eller innholdet i minneposisjonen som man finner ut fra registeret + nummeret.

mov Se mv mv mov mv REGISTER, REGISTER register register Verdien av det andre registeret kopieres inn i det første. store store REGISTER,{ REGISTER NUMMER VARIABEL} {mem[register+ NUMMER] VARIABEL} register Registeret lagres i variabelen eller i minneposisjonen som pekes ut av registeret + nummeret. Variabeldefinisjoner data data nummer NAVN Om et nummer er gitt kommer varibelen ha denne verdien i begynnelsen av eksekveringen av programmet, ellers så er ikke verdien definert. Kommentarer ; tekst All tekst som står etter et semikolon(;) blir tolket som kommentarer Aritmetiske instruksjoner add add REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register + {register NUMMER VARIABEL} Målregisteret får summen av andre og siste verdi.

and and REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register {register NUMMER VARIABEL} Målregisteret får verdien til den logiske AND-en mellom andre og siste verdi band band REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register. {register NUMMER VARIABEL} Målregisteret får verdien til den bitvise logiske AND-en mellom andre og siste verdi. bnot bnot REGISTER, REGISTER register. register Den bitvise logiske NOT av register to legges inn i målregisteret. bor bor REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register. {register NUMMER VARIABEL} Målregisteret får verdien til den bitvise logiske OR-en mellom andre og siste verdi. bxor bxor REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register. {register NUMMER VARIABEL} Målregisteret får verdien til den bitvise logiske XOR-en mellom andre og siste verdi. dec dec REGISTER register register 1 Målregisteret blir dekrementert(minsket) med 1. div

div REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register / {register NUMMER VARIABEL} Målregisteret får svaret av divideringen mellom andre og siste verdi. inc inc REGISTER register register + 1 Målregisteret blir inkrementert(øker) med 1. mod mod REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register {register NUMMER VARIABEL} Målregisteret får resten etter divisjon mellom den andre og siste verdien. mul mul REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register {register NUMMER VARIABEL} Målregisteret får produketet av den andre verdien og den siste verdien. not not REGISTER, REGISTER register register Logisk NOT av det andre registeret legges i det første. or or REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register {register NUMMER VARIABEL} Målregisteret får verdien til den logiske OR mellom det andre og siste verdiene. sub sub REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL}

register register {register NUMMER VARIABEL} Målregisteret får differansen av det andre registeret og den siste verdien. xor xor REGISTER, REGISTER,{ REGISTER NUMMER VARIABEL} register register {register NUMMER VARIABEL} Målregisteret får verdien til XOR-en mellom det andre registeret og den siste verdien. Instruksjoner som kontrollerer programflyt call call ETIKETT returstakk pc pc ETIKETT Legger adressen til nåværende instruksjon på retrustakken og hopper til neste instruksjon som ETIKETT peker på. end end ETIKETT pc ETIKETT Slutt på kildekodefilen. Om ETIKETT er gitt skal prosessoren begynne å eksekvere på denne instruksjonen, ellers starter prosessoren med den absolutt første instruksjonen. jeq jeq REGISTER, REGISTER, ETIKETT Om verdiene i registrene er like hopper programmet til den symbolske adresse ETIKETT, eller skjer det ingenting. jge jge REGISTER, REGISTER, ETIKETT

Om verdien i det første registeret er større eller lik verdien i det andre registeret så hopper programmet til ETIKETT, eller skjer det ingenting. jgt jgt REGISTER, REGISTER, ETIKETT Om verdien i det første registeret er større en verdien i det andre registeret hopper programmet til ETIKETT, eller skjer det ingenting. jle jle REGISTER, REGISTER, ETIKETT Om verdien i det første registeret er minder eller lik verdien i det andre registeret hopper programmet til ETIKETT, ellers skjer ingenting. jlt jlt REGISTER, REGISTER, ETIKETT Om verdien i det første registeret er minder en verdien i det andre registeret hopper programmet til ETIKETT, ellers skjer ingenting. jmp jmp ETIKETT Eksekveringen fortsetter med instruksjonen via ETIKETT jne jne REGISTER, REGISTER, ETIKETT Om verdiene i registrene er ulike hopper programmet til ETIKETT, ellers skjer ingenting. ret ret

pc returstakk Ekekveringen hopper tilbake fra subrutine. stop stop Eksekveringen avsluttes.