Design af et ISA. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Relaterede dokumenter
Mikroarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Niveauer af abstrakte maskiner

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet)

CPUer og maskinkode DM534. Rolf Fagerberg

Eksamen dcomnet Q2/2010. Navn

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

Maskinarkitektur. Lars Kristensen Christian Storm dmasark 1

Introduktion til Computerarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

Computere og Netværk (dcomnet)

Algorithms & Architectures II

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Computer Literacy. En stationær bordmodel. En Bærbar Notebook, Labtop, Slæbbar, Blærebar mm.

Computerarkitektur. - en introduktion til computerarkitektur med LINDA

Computerens Anatomi. Af Martin Arnetoft

AVR MP Ingeniørhøjskolen i Århus Michael Kaalund

Eksamen dcomnet 2012Q4. Årskortsnummer Navn

Pentium IA-32 Maskinarkitekturen

Introduktion til Operativsystemer

Eksamen dcomnet Q2/2012. Studiekortsnummer Navn

3. Computerens opbygning.

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

COMPUTER ANATOMI klasse 23. FEBRUAR 2015 HTX - ROSKILDE

Maskinsprog. Martin Zachariasen, DIKU. Programmer og ordrer. Ordretyper. Operander og deres placering. Ordreformat. Procedurekald. Andre arkitekturer

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003

Repræsentation af tal

Eksamen Computerarkitektur 2013Q4. Niels Olof Bouvin. Studienummer Navn

Computerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn

Bits, bit operationer, integers og floating point

Microcontroller, Arduino

Niveauer af abstrakte maskiner

Principper for Samtidighed og Styresystemer

Repræsentation af tal

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

\ \ Computerens Anatomi / /

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Programmering i C Intro og grundlæggende C 5. marts 2007

Arduino Programmering

Til dig som vil have et indblik i computeren

Computerens Anatomi KOM/IT

Algoritmer og Datastrukturer 1

Niveauer af abstrakte maskiner

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1]

MSS CONSULT Dato: SALGSBROCHURE. Autoværksted. Indeholdende. Hardware Software Netværk

Operativsystemer - dopsys

Repræsentation af tal

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E

Microcontroller, Arduino

Introduktion til programmering. Af mikroprocessor Atmel ATmega328P i en Arduino Uno

Talsystemer I V X L C D M Hvad betyder halvanden??. Kan man også sige Halvtredie???

Hvad skal du vide for at bygge din egen computer?

Til dig som vil have et indblik i computeren

Data Warehouse Knowledge is Power - Sir Francis Bacon -

Amokpriser på it til din virksomhed!

Intro til AVR. Mads Pedersen, OZ6HR

Internt interrupt - Arduino

CPU i7 2.2 GHz 4 kerner i5-4210u 1,7 GHz 2 kerner, 4 logiske kerner GPU integreret Nvidia GeForce 820M Ram 8GB 6 GB Harddisk HDD HDD

Brug af digitale ind og udgange

Mini DVB-T USB stik S6

Søren Guldbrand Pedersen Diverse noter til PC & Net Side 2 af 8. TYPE - viser fil eller program på skærmen.

Datatekniker med programmering som speciale

Opgave: BOW Bowling. Rules of Bowling. danish. BOI 2015, dag 1. Tilgængelig hukommelse: 256 MB

Programmering i C. Lektion december 2008

INFORMATIONS TEKNOLOGI B

Vejledning INSTALLATION AF ZHC5010 BETJENINGSTRYK MED FIBARO HOME CENTER. ZHC5010 Firmware Version: 1.0

ATD. Bruger manual. By AntiTremor.org. Revsion 1.1

Når man taler om computere eller kigger i annoncer om den slags, så dukker der en del mærkelige fagudtryk op:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

Planen for idag. Kontrol af ydre enheder. Systemarkitektur. Synkronisering ved aktiv venten. Multiprogrammering[1]: Ydre enheder og multiprogrammer

Tietgenskolen - Nørrehus. Data warehouse. Database for udviklere. Thor Harloff Lynggaard DM08125

Transkript:

Design af et ISA Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Level 2: Maskinniveau (ISA) Level 5 Problem-oriented language level Translation (compiler) Level 4 Assembly language level Translation (assembler) Level 3 Operating system machine level Partial interpretation (operating system) Level 2 Instruction set architecture level Interpretation (microprogram) or direct execution Level 1 Micro-architecture level Hardware Level 0 Digital logic level

Hvad karakteriserer en processor? Central Processing Unit (CPU) Control Unit Arithmetic Logic Unit (ALU) ISA niveauet og von Neumann-maskiner maskininstruktioner og instruktionsformater symbolsk og absolut maskinkode registre og hukommelse Registers Main Memory Input/Output devices Disk SP Printer Bus IJVM PC, SP, LV, CPP method area, constant pool, stakken metodekald, stakafsnit, parametre og lokale variabler Constant Pool CPP Current Operand Stack 3 Local Variable Frame 3 Local Variable Frame 2 Local Variable Frame 1 LV Method Area PC 32 bit 32 bit 8 bit

Design af et ISA Generelle overvejelser Introduktion til Intel Core i7, OMAP4430 og AVR ATMega Datatyper ISA design og eksempler Adressering

Kunsten at designe et instruktionssæt Hvad er formålet med maskinen? Hvilke operationer og hvilken slags data skal understøttes? Hvordan skal hukommelsen adresseres? Effektivitet! tid plads pris Bagudkompabilitet

CISC vs. RISC Før blev CPUer programmeret meget mere i symbolske maskinsprog der var naturligvis compilere, men den bedste kode blev skrevet i hånden For at gøre programmørerne mere effektive, tilføjede man med tiden flere og flere kommandoer til instruktionssættene disse kommandoer kunne typisk udføre flere handlinger i en omgang, f.eks. et procedurekald eller beregning med efterfølgende hukommelsesaccess dette betød, at man kún behøvede én instruktion for en række skridt fremfor adskillige instruktioner bedre performance, da man slap for adskillige cykler af fetch-decode-execute men med tiden kom der mange komplekse instruktioner til og nogen af instruktionerne blev nødvendigvis lange i udførsel alt dette gjorde mikrokoden på CPUerne mere og mere kompleks Disse CPUer blev under ét kaldt Complex Instruction Set Computers af folkene bag

Reduced Instruction Set Computers Filosofi: Fjern alt unødigt der behøver kun være én måde at gøre tingene på Hellere tre simple instruktioner end én kompleks skjul ikke kompleksitet på CPUen Al hukommelsetilgang ordnes eksplicit via load og store alle beregninger foregår i registre (som der til gengæld kan være masser af) Simple, men besværlige at programmere typisk via compilere (der var blevet bedre i mellemtiden) snarere end i symbolsk maskinkode Uniforme instruktioner (ofte af ens længde) simple nok til at kunne udføres af digitale kredsløb fremfor mikrokode høj performance og klokhastighed Vandt frem til (Unix) workstations og servere i senfirserne og halvfemserne

CISC vs. RISC i dag Mest af historisk interesse Moderne CISC CPUer (som Intels Core processorer) er internt højeffektive RISC processorer, gemt under det gamle IA-32 ISA lag, hvor de gamle CISC instruktioner bliver brudt om til korte RISC instruktioner og udført Moderne RISC CPUer (som ARM, SPARC eller POWER) har masser af instruktioner og har en sofistikeret intern arkitektur Performancemæssigt ligger de nogenlunde på niveau i dag er de vigtigste benchmarks snarere performance/watt

Registre og hukommelse Moderne processorer er typisk mellem 8- og 64-bit Dette har betydning for registre hukommelse En given registerbredde er typisk begrænsende for, hvor meget hukommelse man kan adressere, og hvor store tal, man kan regne på af gangen

Adressering af hukommelse Mængden af hukommelse, der kan adresseres, afhænger umiddelbart af registerbitbredden og ordlængden i hukommelsen!!! Bitbredde 8-bit ord 16-bit ord 32-bit ord 64-bit ord 8 256 bytes 512 bytes 1 KiB 2 KiB 16 64 KiB 128 KiB 256 KiB 512 KiB 32 4 GiB 8 GiB 16 GiB 32 GiB 64 17.179.869.184 GiB 34.359.738.368 GiB 68.719.476.736 GiB 137.438.953.472 GiB Hvis man vælger at adressere i større ord, kan man altså håndtere mere hukommelse på bekostning af granularitet

Hukommelsesalignment Skønt man (nutildags) tæller sin hukommelse i bytes, varierer det fra arkitektur til arkitektur, hvilke adresser der kan tilgås direkte Typisk tilgås hukommelsen i 4- eller 8-bytes intervaller dvs. man kan tilgå adresse 0, 4, 16, 40 i en 4-byte aligned hukommelse eller adresse 0, 8, 16, 64, 512 i en 8-byte aligned hukommelse men ikke adresse 5, 13, 129, 222 Grundet bagudkompabilitet, er man som regel tvunget til at kunne tilgå i byteopløsning, men i virkeligheden hentes data ind efter alignment Hvis man kún skal bruge én byte, virker det som spild at hente 8 bytes sådan som hukommelseadgang fungerer, er det faktisk ikke noget stort problem, men man skal naturligvis bruge cache på unødig data og tid på at fiske den relevante byte ud

Statusregister (Program Status Word) Vi kender N og Z fra Mic-1 Rigtige CPUer har et større sortiment Typisk i ét register PSW med bits efter behov Der vil være ISA understøttelse for at checkke de enkelte bits Der vil typisk også være bits, der relaterer sig til processorens tilstand N Negativt resultat Z Nul resultat V overløb C Mente på venstre bit A Mente på bit 3 P Lige paritet

Design af et ISA Generelle overvejelser Introduktion til Intel Core i7, OMAP4430 og AVR ATMega Datatyper ISA design og eksempler Adressering

Typer af CPUer Mikrokontrollere billige, kontrol af ydre enheder Mobile CPUer lavt strømforbrug Desktop CPUer høj performance Med forskellige brugsmønstre og markedsforhold kommer forskellige krav til CPUernes arkitekturer

Intel Core i7 Har sin egen forelæsning, så her kigger vi kún på de overordnede aspekter Intel (verdens største CPU-fabrikant) 8086 (1978), 8088 (1978) 80286 (1982) 80386 (1985), 80486 (1989) Pentium (1993), Pentium Pro (1995), Pentium II-III (1997), Pentium 4 (2000) Pentium M (2003) Core 2 (2006), Core i3/i5/i7 (2008), Atom (2008) Sandy Bridge/Ivy Bridge (2011) Haswell (2013) Herudover diverse varianter rettet mod servere og bærbare, og mange x86 kompatible CPUer fra (især) AMD, samt Cyrix, VIA, Transmeta og NEC

x86 s udvikling 8086 var til dels baseret på Intel 8080, der igen var baseret på 4004, den første CPU 8086 (8088) blev en massiv succes (IBM PC og MS-DOS), hvilket medførte, at bagudkompabilitet blev en afgørende parameter for alle fremtidige designvalg for Intel CPUer firmaet har flere gange prøvet, uden held, at introducere nye designs, der brød med fortidens synder seneste forsøg er Itanium (omtalt i SCO 5.8), der er endt som en nicheprocessor med meget uvis fremtid ( Itanic ) Apple er stort set det eneste eksempel på et firma, der TO gange har skiftet processorarkitektur med medfølgende tab af bagudkompabilitet Motorola 68XXX IBM PowerPC Intel IA-32

Pentium 4 Egenskaber mål: højtydende processor til personlige computere dyb pipeline (>20 trin) og høj klokfrekvens (introduceret med 1.3 Ghz; sluttede ved 3.8 Ghz) højt strømforbrug stort behov for køling relativ dyr Pentium 4 var ved lanceringen langsommere end Pentium III først da klokfrekvensen kom op i senere modeller, kunne ambitionerne opfyldes Arkitekturen kunne i længden ikke opfylde forventningerne (herunder forventede max klokfrekvens på 10 Ghz), og blev erstattet af Pentium M (og senere Core)

Intel Core i7 Intel opdeler deres Core linje i i3, i5, i7 og Xeon i7 er en processor rettet mod høj performance den i bogen omtalte processor er af Sandy Bridge E generationen 6 cores, 3,3 GHz, 15 MB cache, 64-bit 16 trins pipeline (tror man) Max. 130 watt (men kan skrue ned) 2,3 milliarder transistorer Extreme (angiveligt)

Dyb pipelining Fordele ved dybe pipelines Jo dybere pipeline, des flere instruktioner kan være i pipelinen, des højere antallet af udførte instruktioner per tid Da en dyb pipeline består af små (hurtigt udførte) skridt, kan klokfrekvensen skrues op Ulemper Ovenstående antager, at vi hele tiden kan holde pipelinen fyldt med instruktioner under udførsel Dette er langt fra tilfældet, f.eks. tager hukommelsesadgang kolossal lang tid i forhold til CPUen, og så løber pipelinen tør Hvis pipelinen ikke kan holdes fyldt, forsvinder hastighedsfordelene Klokfrekvensen skal typisk tilsvarende højere op for at matche andre CPUer med kortere pipelines i hastighed Blandt p.gr.a. pipelining er det meningsløst at sammenligne klokfrekvens på tværs af CPU-arkitekturer, for udført arbejde per taktslag er helt forskelligt

Core registre Skønt Core tilsyneladende har en del registre, er det kun de fire øverste (E(A-D)X), der kan bruges generelt, og selv de har specielle egenskaber (herunder indeholdte 8- og 16-bit registre (A-D og (A-D)X) ESI-ESP bruges til pointere CS-GS er fortidslevn til segmenteret hukommelse EIP er Program Counter (PC fra IJVM) EFLAGS indeholder CPUens status (herunder bits til brug for conditional branches)

ARMs historie Den oprindelige ARM1 processor blev designet i 1985 af fire ingeniører en til instruktionssættet, en til mikroarkitekturen, to til udvikling af understøttende chipsæt. Det tog 14 måneder Oprindeligt en del af det britiske Acorn, men blev et selvstændig firma i 1990 med Acorn, Apple og VLSI som investorer Apple anvendte en ARM CPU i deres Apple Newton Messagepad Har siden udviklet på ARM designet med stor succes 2300 ansatte, hovedkvarter i Cambridge, U.K. næsten total dominans på mobil og tabletmarkedet. Også meget udbredt på mindre enheder Designer chips, men overlader fabrikationen til deres licenstagere ARMs kunder har solgt mere end 34,8 milliarder ARM processorer (!!!)

ARM processorens udvikling Arkitektur Bitbredde Cores designet af ARM Holdings Cores designet af tredjepart ARMv1 32/26 ARM1 ARMv2 32/26 ARM2, ARM3 Amber ARMv3 32 ARM6, ARM7 ARMv4 32 ARM8 StrongARM, FA526 ARMv4T 32 ARM7TDMI, ARM9TDMI ARMv5 32 ARM7EJ, ARM9E, ARM10E XScale, FA626TE, Feroceon, PJ1/Mohawk ARMv6 32 ARM11 ARMv6-M 32 ARM Cortex-M0, ARM Cortex-M0+, ARM Cortex-M1 ARMv7-M 32 ARM Cortex-M3 ARMv7E-M 32 ARM Cortex-M4 ARMv7-R 32 ARM Cortex-R4, ARM Cortex-R5, ARM Cortex-R7 ARMv7-A 32 ARM Cortex-A5, ARM Cortex-A7, ARM Cortex-A8, ARM Cortex-A9, ARM Cortex-A12, ARM Cortex-A15 Krait, Scorpion, PJ4/Sheeva, Apple A6/A6X (Swift) ARMv8-A 64/32 ARM Cortex-A53, ARM Cortex-A57[22] X-Gene, Denver, Apple A7 (Cyclone) ARMv8-R 32 Endnu ikke annonceret

ARM specialitet: big.little De fleste processorer er i dag multi-core Hvis man har arbejde til dem alle, kan det gå stærkt Hvis ikke, spilder man strøm sluk for ikke anvendte cores Hvis man har en lille og svag, men strømbesparende, core, og en stor og stærk, men strømslugende, core i stedet for to ens cores, kan man spare mere strøm, når der ikke er meget at lave

ARM registre Mere ensartet og flad registerstruktur end hos Intel Tilsyneladende helt homogent, men konventioner dikterer anvendelsen af en række registre Bemærk: R12-R15 reserverede

Programmering på en ARM processor Hukommelsen tilgås gennem eksplicitte load og store instruktioner, der henter og bringer mellem hukommelsen og registrene Når der skal regnes på noget, foregår det altid i registrene Når man er færdig, gemmer man eksplicit i hukommelsen med store (i modsætning til sædvanlige (CISC) processorer, hvor hukommelsesoperationer ofte kan være implicitte, og bliver håndteret af processoren) et eksempel på, hvordan simple instruktioner kan medføre (lidt) mere arbejde for programmøren De enkelte instruktioner på ARM kan typisk udføres meget hurtigt ofte direkte af logiske kredsløb end igennem afvikling af et mikroprogram

OMAP4430 Produceret på licens af Texas Instruments Dual-core ARM Cortex-A9, ARM v7 ISA 1,2 GHz Indbygget GPU, accellereret video dekodning, SIMD 32-bit 0,6 watt Findes bl.a. i Kindle Fire og Google Glass

ATMEL ATmega168 AVR En microcontroller en CPU beregnet til indlejrede systemer styring af clockradioer, komfurer, USB-sticks, Arduino De to vigtigste designparametre for indlejrede CPUer: BILLIG, helst MEGET billig kraftfuld nok til at udføre den nødvendige opgave, men heller ikke mere (for ellers har den været for dyr) En 8-bit RISC processor Udviklet af Alf-Egil Bogen og Vegard Wollan, studerende på NTH i 1996

ATMEL ATmega168 AVR ATmega168 er et eksempel på SoC (System on a Chip) CPU, RAM, ROM, I/O, timere på den samme chip simpelt at integrere for designerne ATmega168 karakteristika 8-bit processor, op til 20 Mhz 16 kib flash RAM til program og 1 kib RAM til data Programhukommelsen opdelt i to bootloader: kan skrives én gang programhukommelse: kan skrives til af bootloaderen mulighed for signeret programkode sikrer, at softwaren ikke kan overskrives af tredjepart

ATmega168 AVR: Registre og hukommelse De nederste 32 bytes i hukommelsen er registre R0-31 De næste 64 bytes bruges til I/O De øvrige 928 bytes kan man bare bruge løs af SREG bruges til statusflag SP er delt over to bytes for at kunne adressere 1024 bytes

Design af et ISA Generelle overvejelser Introduktion til Intel Core i7, OMAP4430 og AVR ATMega Datatyper ISA design og eksempler Adressering

Datatyper Valget af datatyper, som en CPU understøtter fra designerens hånd, varierer helt efter hvad skal den bruges til? er der noget, som vi kan understøtte bedre ved direkte hardwareunderstøttelse, og er dét tilstrækkeligt vigtigt? hvad hænger vi på fra fortiden? Det typiske primitiv er heltal, med og uden fortegn, i forskellig længder Samt floating point tal (som vi ikke kommer ind på hér) Det er i høj grad et spørgsmål om, hvad vi ønsker at understøtte i hardware, og hvad vi overlader til programmøren/operativsystemet hvis vi bare har 8-bits heltal (bytes), kan vi klare resten i software

Numeriske datatyper på en Core i7 Type 8 bits 16 bits 32 bits 64 bits Signed Integer Unsigned integer Binary coded decimal integer Typiske integer typer for en 64-bits maskine Floating point BCD bruges hovedsageligt i financielle systemer (4 bits (en nibble) bruges til at repræsentere ét decimaltal) ikke så pladseffektivt som binære tal, men matcher præcist på decimaltal, hvor binære repræsentation af floating point tal kan være problematiske med hensyn til afrundingsfejl o.lign.

Numeriske datatyper på en OMAP4430 Type 8 bits 16 bits 32 bits 64 bits Signed Integer Unsigned integer Binary coded decimal integer Floating point Skønt ARMv7 er en 32-bit ISA, er den veludstyret med load og store instruktioner til at kunne hente 8- og 16-bitsværdier til og fra registre

Numeriske datatyper på en ATmega168 Type 8 bits 16 bits 32 bits 64 bits Signed Integer Unsigned integer Binary coded decimal integer Floating point Hér har vi skåret ind til benet. Det absolut nødvendige og intet mere 16 bit er hovedsageligt til hukommelsesadresser

Design af et ISA Generelle overvejelser Introduktion til Intel Core i7, OMAP4430 og AVR ATMega Datatyper ISA design og eksempler Adressering

Valget af en ISA enkodning Når man har valgt sin arbejdsområde for sin CPU, de grundlæggende karakteristika (f.eks. registerbredde og hukommelsens organisering) og de nødvendige instruktioner til understøttelse heraf, melder spørgsmålet sig hvordan repræsenteres de nødvendige instruktioner mest effektivt i bitmønstre? Dette er på ingen måde simpelt

Ønsker til et ISA Jo kortere instruktioner, des bedre mere pladseffektivt, flere instruktioner kan hentes over tid, bedre udnyttelse af kodecache, bedre performance Jo mere ensartede instruktioner, des bedre det gør det enkelt og dermed hurtigt at afkode dem, altså bedre performance Der skal være plads til udvidelser til senere generationer af CPUen vi kan på ingen måde forudsige nu, hvad behovet måske er om 10 år Man skal kunne adressere tilstrækkelig hukommelse med passende opløsning hvad er den mindst adressérbare enhed i hukommelsen? En byte, et 4 bytes word, 8 bytes, 16? Hvilke forfærdelige valg gjorde vores forgængere? disse fortidsvalg er uomgængelige, hvis man vil være bagudkompatibel

Typiske instruktionsformater Fire typiske instruktionsformater: jo længere adresse, des højere opløsning (a) Ingen adresse angivet (b) En adresse angivet! (c) To adresser angivet (d) Tre adresser angivet

Længden af instruktioner Man kan vælge instruktioner af forskellig, men ensartet længde eller tillade blandede længder Ensartede længde er hurtige at afkode, men kan spilde plads ARM er speciel ved at have 32-bits instruktioner OG et 16-bits Thumb instruktionsæt, der ganske vist er reduceret, men fylder det halve

Udvidbare opcodes (16-bit eksempel) En instruktion med 4-bit opcode og tre 4-bit adressefelter velegnet f.eks. til at angive tre registre ud af maksimalt 16 Hvor mange typer instruktioner kan der maksimalt være af denne type? absolut ikke flere end 16, for vi har 4 bits til angive opcode med men hvis vi bruger 16 opcodes, har vi afskåret os fra andre muligheder

Udvidbare opcodes (16-bit eksempel) Hvis man pakker det effektivt, kan man have 15 tre-adresser, 14 to-adresser, 31 en-adresse og 16 adresseløse instruktioner i 16-bit

Core i7 s instruktionsformat! Historisk betinget instruktionssæt har betydet, at afkodning af x86 instruktioner er kompliceret med masser af special tilfælder Instruktioner varierer i længde fra 1 op til 17 bytes

OMAP4430 s instruktionsformat 32 bit ISA vist her Meget tæt pakket kompleks decode

Brug af conditionals i ARM ISA 32 bits instruktionerne bruger 4 bits til cond hvorfor dét? Conditionals afhænger af statusbits, og den tilhørende instruktion udføres kún, hvis conditions er opfyldte Kan skabe super kompakt og hurtig kode: loop: CMP Rx, Ry ; set condition "NE" if (x!= y), ; "GT" if (x > y), ; or "LT" if (x < y) SUBLT Ry, Ry, Rx ; if "LT" (Less Than), y = y-x; SUBGT Rx, Rx, Ry ; if "GT" (Greater Than), x = x-y; BNE loop ; if "NE" (Not Equal), then loop ARM IJVM // { while: // while iload x iload y if_icmpeq end_while // (x!=y) { iload x // if iload y isub // stack=x-y, x-y<0 (x<y) iflt then goto else then: // then iload y iload x isub istore y // y=y-x; goto end_if else: // else iload x iload y isub istore x // x=x-y; end_if: goto while end_while: // }

ATmega168 s instruktionsformat Simpelt og kompakt: 2 til 4 bytes lange instruktioner

Design af et ISA Generelle overvejelser Introduktion til Intel Core i7, OMAP4430 og AVR ATMega Datatyper ISA design og eksempler Adressering

Adressering CPUens instruktioner har behov for at kunne referere/adressere data og lokationer i hukommelsen og i registrene (også kendt som operander) Hvordan gør man dét? fleksibelt? kompakt? effektivt? Følgende er eksempler på adresseringsformer det er langtfra afgjort, at en processor understøtter dem alle

Immediate addressing OPCODE OPERAND Operanden er en del af instruktionen bipush 42 Det sætter selvfølgeligt sine begrænsninger på operandens størrelse i IJVMs tilfælde med bipush er vi begrænset til en byte Effektivt vi har vores operand med det samme (immediately!) Begrænset det skal være hardcodet fra begyndelsen

Register addressing Operanderne ligger i registre add R1, R2 // R1 = R1 + R2 add R1, R2, R3 // R1 = R2 + R3 OPCODE REGISTER REGISTER OPCODE REGISTER REGISTER REGISTER Kræver, at vi har vores data liggende i registre Effektivt registre er den hurtigste form for hukommelse Kompakt vil ofte kunne enkodes i en (relativ) kort instruktion

Direct addressing OPCODE REGISTER ADDRESS Operand ligger på en absolut adresse i hukommelsen add R1, 1069 // R1 = R1 + m[1069] Meget ufleksibelt kræver, at vi ved præcist hvor i hukommelsen vores data ligger, når vi skriver programmet Dvs. måske velegnet til konstanter og globale variable, men ikke til adressering relativt til f.eks. stakken Fint nok til processorer som ATmega168, men uholdbart til multitasking

Register indirect addressing OPCODE REGISTER REGISTER Operand ligger på en absolut adresse i hukommelsen udpeget af et register add R1, (R2) // R1 = R1 + m[r2] Mere fleksibelt, nu kan vi beregne adressen på operanden

Register indexed addressing Operand udpeges af et register og et offset add R1, 4(R2) // R1 = R1 + m[r2 + 4] Fleksibelt og effektivt OPCODE REGISTER REGISTER OFFSET OPCODE OFFSET Bruges f.eks. implicit i IJVM, når vi bruger iload og istore (indekseret relativt til LV) goto og branching i IJVM foregår også indekseret relativt til PC

Based-indexed addressing OPCODE REGISTER REGISTER OFFSET OPCODE REGISTER REGISTER Operand udpeges af summen af to registre (og måske et offset) add R1, (R2+R3) // R1 = R1 + m[r2 + R3] Effektivt og særdeles fleksibelt

Core i7, OMAP4430 ARMv7 og ATmega168 AVR Adresseringsform Core i7 OMAP4430 ATmega168 Immediate Direct Register Register indirect Indexed Based-indexed

Opsummering ISA design er et spørgsmål om kompromiser og historie Hvad skal maskinen kunne? Hvor meget må den koste? Er hastighed den vigtigste parameter, eller hvad med kompakthed? Hvilke valg er der truffet i fortiden? Hvordan undgår vi at vanskeliggøre fremtidige valg?