Instrukční soubory, registrové struktury, způsoby adresace INP 2008 FIT VUT v Brně
Základní registry počítače + datová cesta IR Příznaky CC M DR PC MAR ALU Operand Výsledek DR - datový registr; přes který přecházejí instrukce a data čtená, nebo zapisovaná do paměti. Je-li právě přečtený obsah DR instrukce, která se má provádět, přesune se do instrukčního registru IR. Je-li v DR operand, který se má zúčastnit příští operace, pak jeho další cesta záleží na zvolené koncepci procesoru a způsobu provedení konkrétní instrukce. 2
Základní registry počítače + datová cesta IR Příznaky CC M DR PC MAR ALU Operand Výsledek Registr PC - programový čítač udržuje adresu instrukce, která se má provést jako příští. Registr MAR - registr adresy paměti ukazuje na adresu, ze které se čte instrukce, nebo operand, nebo na kterou se zapisuje výsledek operace. Je zřejmé, že obsah registru MAR se mění ve srovnání s obsahem PC mnohem častěji. Obsah registru PC většinou inkrementuje (+1, +4, ) nebo se při instrukci skoku změní na cílovou adresu, MAR kromě těchto obsahů nabývá hodnot adres všech operandů a výsledků. CC - Condition Code, neboli registr příznaků (flags), který obsahuje jednobitové příznaky výsledků operací, jako je např. V - přeplnění (overflow), C - přenos (carry), N - výsledek je záporný (negative), Z - výsledek je nula (zero), a indikace dalších stavů, jako přerušení I (interrupt) a pod. 3
Viditelnost a neviditelnost registru Registr je pro uživatele viditelný, může-li s jeho obsahem explicitně pracovat. Pokud se obsah registru během provádění programu mění tak, že programátor o tom vůbec neví a ani to nepotřebuje vědět, jde o registr uživateli neviditelný. Typický viditelný registr je CC, neviditelné registry jsou např. DR, IR. U registrů PC a MAR to nemůžeme říci jednoznačně, protože záleží na funkcích, které konkrétní instrukční soubor poskytuje. 4
Programátorský model procesoru Programátorský model ukazuje registry, s jejichž obsahy může programátor pracovat, nebo jejich obsah přímo, nebo nepřímo ovlivňovat. Pro názornost se v programátorském modelu uvádějí i další části procesoru, jako řadič, paměť, vstupy a výstupy, případně další okolí procesoru, které přísně vzato do programátorského modelu nepatří. Programátorský model je základní model, popisující architekturu procesoru. Liší se ovšem zásadně od modelu návrháře procesoru. 5
Klasifikace architektur instrukčního souboru (AIS) podle: Uložení operandů v CPU Kde je možno je uložit, kromě toho, že je možné si je přečíst z paměti? Registry, registrová sada, zásobník? Počet explicitních a implicitních operandů v instrukci Instrukce se skládá z operačního znaku (kódu operace) a specifikace umístění několika operandů. Přístup k operandům Je stanoven explicitně, nebo implicitně, tedy již kódem operace? Operace Kolik jich je a o jaké operace konkrétně jde. Typy a velikosti operandů FX, FP, vektor, matice, 6
Ad 1) Typy architektur instrukčních souborů (resp. procesorů) Zásobníková (stack) Střadačová (accumulator) Registrová (GPR General Purpose Register) Smíšená kombinace předchozích dlouhodobě nejosvědčenější koncepce Např. I 8086 7
Zásobníkové počítače Programátor nemá k dispozici střadač ani registry veškeré operace se provádějí se zásobníkem. Zásobník je implementován buď v paměti nebo pomocí registrů nebo kombinací registrů a paměti. Program a data mají v paměti oddělené segmenty, jejichž meze určují specializované registry. Stack pointer (SP) ukazatel na vrchol zásobníku (nejdůležitější registr) Typické instrukce PUSH m_a: přečti slovo z paměti s adresou m_a a ulož ho na vrchol zásobníku POP m_a: vyber slovo z vrcholu zásobníku a ulož ho do paměti na adresu m_a Aritmetické instrukce (ADD, MUL apod.) nemají operandy. ADD: vybere z vrcholu zásobníku dvě slova, sečte je a výsledek uloží na vrchol zásobníku Výhody: jednoduchá architektura Nevýhody: zásobník je úzké místo (lze pracovat jen s jeho vrcholem) Př. HP 3000 200 300 110 86 22 189 21 SP 8
Střádačové počítače Existuje jeden, popř. dva, významné registry střádače které využívají prakticky všechny instrukce. Typická aritmetická instrukce má jeden operand implicitní (střádač) a výsledek je uložen opět do střádače. Př. ADA a_m: k obsahu střádače A je přičten obsah paměťové buňky na adrese a_m, výsledek je uložen do střádače Data čtená z, popř. zapisovaná do, paměti směřují vždy do/z střádače. Př. LDB a_m: Do střádače B je vložen obsah paměťové buňky na adrese a_m Nevýhody: střádač je úzké místo, často se komunikuje s pamětí Př. HP 2116 T M DR PC MAR A B ALU R S 9
R0 R1 R15 Univerzální registry FX 32 bitů... Dvojková ALU Desítková ALU MAR IR PC Př. IBM 360/370 Registrové počítače PSW 64b F0... F3 Univerzální registry FP 64 bitů DR M... FPU Vnitřní sběrnice 1B/2B/4B Programátor má k dispozici sadu registrů. Př. IBM 360/370 3 speciální ALU FX FP Operace s proměnnou délkou, zahrnující desítkovou aritmetiku a operace s řetězci znaků. dvě sady nezávisle adresovatelných registrů 16 FX registrů 4 FP registry 64b registr pro Program Status Word (PSW) popisuje stav procesoru (příznaky, PC, maska přerušení ) 10
Srovnání AIS v úloze C = A+B (předpokládáme, že A, B i C jsou v paměti) Zásobníkový stroj Střadačový stroj Registrové stroje: registr paměť (R-M): Memory Reference (v libovolné instrukci) registr registr (Load-Store): přístup k paměti pouze v instrukcích Load a Store memory memory (historie LGP, kalkulačka M3T) Zásobníkový Střadačový Registrový Registrový (L-S) (R-M) Push A Load A Load R1, A Load R1, A Push B Add B Add R1, B Load R2, B Add Store C Store C, R1 Add R3, R1, R2 Pop C Store C, R3 11
Výhody a nevýhody základních architektur Při hodnocení se používá těchto tří kritérií: jak vyhovuje struktura potřebám kompilátoru, jak účinná je struktura z hlediska implementace doba přístupu!, jak dlouhý vyjde program ve srovnání s ostatními koncepcemi. Architektura Výhody Nevýhody Zásobníková Jednoduché vyčíslování výrazů (polská notace), díky krátkým instrukcím je výsledný strojový kód hustý. Přístup k zásobníku není libovolný, proto je obtížné vytvořit efektivní kód. Zásobník je úzké místo architektury. Střadačová Minimalizuje se počet vnitřních stavů počítače, instrukce jsou krátké. Střadač je pouze dočasná paměť, zatížení paměti M je vysoké. Registrová Nejobecnější model pro generování kódu. Všechny operandy musejí být pojmenovány, což vede na dlouhé instrukce. 12
Hodnocení architektur s univerzálními registry Univerzální registry využívá kompilátor s výhodou při vyčíslování hodnot výrazů a pro ukládání hodnot proměnných. Vyčíslování výrazů je pružnější než při použití střadačů nebo zásobníku. Např. vyčíslování výrazu (A xb) - (Cx D) - (Ex F) může proběhnout v libovolném pořadí, kdežto u zásobníkové koncepce musí proběhnout zleva doprava, což nemusí vyhovovat z hlediska uložení operandů v paměti. Ještě důležitější je použití registrů pro ukládání proměnných. Jsou-li proměnné umístěny v registrech, provoz na paměti se sníží, program se provede rychleji (díky vyšší rychlosti registrů) a zlepší se hustota strojového programu (protože registr se adresuje méně bity než celá paměť). Otázkou zůstává, kolik (nespecializovaných) registrů by mělo být. To ovšem záleží na tom, jak jich kompilátor využívá, tedy kolik rezervuje pro vyčíslování výrazů, kolik pro předávání parametrů a kolik zůstává pro ukládání proměnných 13
Výhody a nevýhody registrových architektur Typ A-O Výhody Nevýhody R R 0, 3 R M 1, 2 Jednoduché kódování IS, pevná délka instrukce, jednoduché generování kódu, počet cyklů na provedení instrukce je konstantní. Přímý přístup k datům bez meziukládání. Instrukce se dobře kódují a dávají dobrou hustotu. Vyšší počet instrukcí, než u architektur s adresou paměti v instrukci. Některé instrukce jsou krátké a kódování je neúsporné. Operandy nejsou ekvivalentní, protože zdrojový operand se zničí. Kódování čísel registrů a adresy paměti v instrukci může limitovat počet registrů. Počet cyklů na instrukci se mění s polohou operandu. M M 3, 3 Nejkompaktnější, neplýtvá registry na ukládání dat. Značná proměnlivost délky instrukce, zvláště pro instrukce se třemi operandy. Též objem operací instrukcí je proměnlivý. Paměť M je úzké místo. 14
Adresování paměti jak je adresa interpretována? jak je adresa určena? (tedy vypočtena - mluvíme o adresových módech) Interpretací adresy myslíme definici konkrétních adresovaných bytů v závislosti na hodnotě adresy a délce adresovaného objektu. Podle délky rozlišujeme tyto objekty: byte B půlslovo HW (Halfword) 2B slovo W (Word) 4B dvojslovodw (Doubleword) 8B čtyřslovo QW (Quadword) 16B 15
Uspořádání bytů ve slově Adresa slova Little Endian 0 3 2 1 0 4 7 6 5 4 Adresa slova Big Endian 0 0 1 2 3 4 4 5 6 7 Zleva sestupné číslování bytů ve slově používají procesory DEC PDP/11 - VAX a Intel 80x86, zatímco zleva vzestupnéčíslování používají procesory IBM 360/370 a Motorola 680x0. Obdobně to platí i pro číslování pozic bitů. 16
Př. IA-64 Instrukce Load Little-endiens Paměť Adresa 7 0 0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h LD1 [1]=> LD2 [2]=> LD4 [4]=> LD8 [0]=> Registry 63 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 d c 0 0 0 0 h g f e h g f e d c b a 17
Př. IA-64 Instrukce Load Big-endiens Paměť Adresa 7 0 0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h LD1 [1]=> LD2 [2]=> LD4 [4]=> LD8 [0]=> Registry 63 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 c d 0 0 0 0 e f g h a b c d e f g h 18
Zarovnaný a nezarovnaný přístup k objektu U některých počítačů musí být přístup k objektům větším než jeden byte zarovnán. Přístup k objektu velikosti s bytů s bytovou adresou A je zarovnán, když A mod s = 0. V tab. jsou adresy, při nichž je přístup zarovnán, nebo nezarovnán. Adresovaný objekt byte půlslovo slovo dvojslovo Zarovnaný při bytové adrese 0, 1, 2, 3, 4, 5, 6, 7 0, 2, 4, 6 0, 4 0 Nezarovnaný při bytové adrese nikdy 1, 3, 5, 7 1, 2, 3, 5, 6, 7 1, 2, 3, 4, 5, 6, 7 Pozn.: Bytovou adresou (byte offset) rozumíme nejnižší tři bity adresy. Některé počítače, např. založené na procesorech řady MC 68 000, umějí pracovat pouze s objekty se zarovnanými adresami. Nezarovnaná adresa znamená obvodové komplikace, protože paměť je typicky srovnaná na hranice slov. Nezarovnaný přístup pak vyžaduje více paměťových cyklů. 19
Nezarovnaný přístup k paměti slovo 1 slovo 2 požadované slovo Je zřejmé, že na získání nezarovnaného slova musí paměť provést dva cykly a z každého slova se bere jen jedna polovina. I když jsou data zarovnaná, podpora bytových a půlslovních přístupů vyžaduje zarovnávací obvod, který požadovaný byte nebo půlslovo zarovnává v registrech. Taková potřeba se objevila u procesorů, které z důvodů kompatibility zachovávají instrukční soubor a jeho operace i u novějších typů s větší šířkou sběrnice, např. u 32-bitového procesoru se zachovávají bytové operace. Při práci s jedním bytem se nesmí ostatní tři byty slova změnit. 20
Zarovnávací obvod Zarovnávací obvod (alignment network) je vložen mezi paměť M a procesor (je to jedna z funkcí jednotky vazby procesoru na sběrnici BIU Bus Interface Unit). Je to v podstatě blok multiplexorů, který systematicky přeskládává (např. podle principu cyklického posuvu) byty ve slově. Na obrázku vpravo jsou možné cesty bytů a půlslov v zarovnávacím obvodu naznačeny čárkovaně. Před zpětným zápisem slova do paměti přeskládá zarovnávací obvod byty ve slově zpět do původních poloh, což vyžaduje další logické obvody. Implementace zarovnávacích obvodů umožňuje kompatibilitu novějších procesorů se staršími (tzv. kompatibilita dolů). V okamžiku, kdy se náklady na kompatibilitu jeví jako neúnosné, přichází výrobce s novou řadou nekompatibilních procesorů. Takové rozhodnutí je však velmi závažné a riskantní. Bytová operace na 32b počítači. Paměť M 0 1 2 3 slovo v paměti Slovo přečtené z paměti zarovnávací obvod X X X V procesoru Slovo zapisované zpět do paměti slovo v procesoru 21
Adresové módy (1) U registrových strojů může adresový mód určovat konstantu, registr, nebo paměťové místo. Používá-li se paměťové místo, nazývá se skutečná adresa paměti specifikovaná adresovým módem efektivní adresa. V tabulce je přehled všech adresových módů, které se vyskytují u hlavních typů počítačů. Adresový mód Příklad instrukce Význam Kdy se použije Registr Add R4,R3 R4:=R4 + R3 Když je hodnota v registru. Bezprostřední, literál Add R4,#3 R4:=R4 + 3 Pro konstanty, u některých procesorů jde o dva různé adresové módy. Bázový, s posunem Add R4,100(R1) R4:=R4+M[100+R1] Adresování lokálních proměnných. Přes registr, nepřímý Add R4,(R1) R4:=R4+M[R1] Přístup s ukazatelem nebo s výpočtem adresy. 22
Adresové módy (2) Indexovaný Add R3,(R1+R2) R3:=R3+M[R1+R2] Při adresování v poli: R1 je báze pole, R2 je index. Přímý, absolutní ADD R1,(1001) R1:=R1+M[1001] Pro přístup k pevně umístěným datům; konstanta může být značně velká. Nepřímý přes paměť Add R1,@(R3) R1:=R1+M[M[R3]] V R3 je adresa ukazatele. Autoinkrement Add R1,(R2)+ R1:=R1+M[R2] R2:=R2 + d Užitečný pro průchod polem v cyklu. R2 ukazuje na začátek pole a při každém použití se zvětšuje o d. Autodekrement Add R1,-(R2) R2:=R2 - d R1:=R1+M[R2] Obdoba autoinkrementu. Indexovaný s měřítkem Add R1,100(R2)[R3] R1:= R1+M[100+R2+R3*d] K indexování pole. Velikost kroku je proměnná. 23
Měření četnosti používání adresových módů Měřeníčetnosti používaných adresových módů dá dobrý obrázek o jejich užitečnosti. Naměřené hodnoty závisejí samozřejmě na konkrétním instrukčním souboru použitého procesoru a použitém programu, nicméně pořadí a relativníčetnosti jednotlivých módů jsou značně stabilní. Toto pořadí je např.: s posunem (displacement) 32 až 55% bezprostřední (immediate) 17 až 43% nepřímý přes registr 3 až 24% nepřímý přes pamět 1 až 6% indexovaný s měřítkem 0 až 16% Obdobné statistiky charakterizují frekvence použití jednotlivých typů instrukcí, typů skoků, typů testovacích instrukcí (srovnávání), počtu bitů posunu (displ.), atd. Těchto statistik se dále využívá při optimalizaci kódování instrukčních souborů, kdy se tyto frekvence respektují. 24
Adresové prostory Velikost adresového prostoru je daná vyhrazeným počtem bitů v adrese. Rozlišujeme Paměťový adresový prostor V/V adresový prostor Další adresový řídicí prostor (přerušovací) pro stavové informace počítače registrový Zásobníkový Z pohledu operačních systémů: Logický adresový prostor (LAP): virtuální adresový prostor, se kterým pracuje procesor při provádění kódu Fyzický adresový prostor (FAP): adresový prostor fyzických adres paměti 25
Stránkování Stránka (malá) část adresového prostoru (několik kb) Příklad (počítač HP 2116): a) V základním typu instrukce je pro adresu M vyhrazeno 10 bitů, což umožňuje přístup ke stránce s velikostí 1K. b) Vzhledem k tomu, že paměťový prostor rozsahu jedné stránky může být nepostačující, je v instrukci bit D/I (Direct/Indirect, tedy přímá nebo nepřímá adresa), který umožňuje adresovat pomocí nepřímé adresy celý paměťový prostor. Nejvyšší bit je opět vyhrazen pro možnost vícestupňové nepřímé adresace, takže zbývajících 15 bitů adresy definuje paměťový adresový prostor 32 K míst (po 16 b). Úsek bitůč. 10 až 14 má význam čísla stránky a udržuje se v příslušných bitech v registru adresy paměti MAR, a je vytvořen mechanizmus pro práci v posledně nastavené stránce, takže v rámci jedné stránky můžeme používat přímé adresace. a) 15 OZ 11 10 9 0 D/I Adresa M např. LDA adresa ve stránce; stránka má 1024 míst b) 15 14 10 9 0 D/I číslo stránky adresa ve stránce 26
Segmentování př. I 8086 15 0 I 8080 Registr HL M = 64 K 15 0 I 8086 Registr adresy segmentu 15 0 IP Segmentový registr CS, DS, SS nebo ES 19 0 MA M = 1 M Segment (větší) část adresového prostoru (MB) Složením čísla segmentu (resp. bázové adresy segmentu) z určeného segmentového registru a obsahu ukazatele instrukcí IP (je to vlastně čítač instrukcí PC) vznikne 20- bitová adresa paměti, která definuje adresový paměťový prostor o velikosti 1 M. 27
Stránkování vs segmentování Rozdíl mezi stránkou a segmentem: stránka je malý úsek paměťového prostoru, segment je značně větší. Dá se říci, že velikost segmentu je srovnatelná s velikostí jednoho modulu programu. Pokud bychom poskytli pro rozsah jednoho segmentu paměť se stránkovaným přístupem, byly by stránky nejspíše náhodně rozptýleny po celé paměti, segment je naopak souvislý. U řady počítačů je adresa segmentová i stránkovaná současně. Tento typ adresace bude podrobně probrán později. 28
V/V adresový prostor určuje možné adresy připojených periferních zařízení je obvykle výrazně menší než paměťový adresový prostor (např. jen 64 adres) instrukce pro práci s periférií (typicky IN, OUT) potom obsahuje: adresu periférie povel periférii popř. data Alternativně mohou být V/V jednotky namapovány do paměťového prostoru Potom se pro práci s V/V zařízeními používají standardní instrukce pro práci s pamětí (MOV, LOAD, STORE atd.) M: FFFFh... FF00h FEFFh... 0000h...... Prostor IO Prostor M Příklad mapování V/V do paměťového prostoru 29
Příklady programátorských modelů: I 8086 16 b: základní registry Accumulator AX Base BX Counter CX Data DX Source Index SI Destination Index DI Base Pointer BP Stack Pointer SP AH AL BH BL CH CL DH DL Index zdroje Index cíle Ukazatel báze Ukazatel zásobníku 30
I 8086 segmentové a řídicí registry Segmentové registry Kódový segment CS Datový segment DS Extra segment ES Zásobníkový seg. SS Source Index SI Ukazatel instrukce IP Flagy F Řídicí registry Index cíle Ukazatel báze Ukazatel zásobníku 31
Komentář k 8086 Registr B se používá pro tvorbu adresy paměti, která se pak přesune do Ukazatele adresy IP. Registry A, C, D jsou univerzální registry, které se v procesorech rodiny x86 používají s různými modifikacemi a rozšiřováním jako univerzální registry operandů. Další skupinu tvoří registry pro čtyři programové segmenty, a řídicí registry IP, a F registr příznaků. 32
I 80 386 32 bitů EAX EBX ECX EDX ESI EDI EBP ESP 31 15 0 AX BX CX DX SI DI BP SP 33
Komentář k I 80 386 I 80 386 je první 32-bitový procesor firmy Intel. Registry procesoru 80 386 jsou rozšířením registrů předcházejících typů. V registrech s počátečním písmenem E extension. najdeme registry předcházejícího typu 8086 (typ 80 286 přeskakujeme). Jsou definovány adresy tří typy logická adresa (virtuální), která je složená z 16-bitového selektoru a 32-bitového offsetu (umožňuje adresovat 64 TB paměti), která se převádí na lineární 32-bitovou adresu. Ta se stránkovací jednotkou převádí na 32-bitovou fyzickou adresu. 34
64-b univerzální registry GPR 64-b mediální a FP registry 128-bitové mediální registry IA-64 63 0 RAX RBX RCX RDX RBP RSI RDI RSP R8 R9 R10 R11 R12 R13 R14 R15 64-bitový režim Povinné registry x86 Registr flagů EFLAGS Ukazatel instrukcí EIP 63 0 MMX0/FPR0 MMX1/FPR1 MMX2/FPR2 MMX3/FPR3 MMX4/FPR4 MMX5/FPR5 MMX6/FPR6 MMX7/FPR7 RFLAGS RIP 127 0 IA-64 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 XMM9 XMM10 XMM11 XMM12 XMM13 XMM14 XMM15 35
Komentář k IS IA-64 64-bitový instrukční soubor definuje stejné základní registrové sady, jako x86, a přidává k tomu několik nových 64-bitových registrů a rozšiřuje 32-bitové registry na 64 bitů. Původní definice stanovovala 128 registrů, což se zatím ukázalo jako nereálné. Ovšem v budoucnosti se tento počet registrů může objevit. Přepínání režimu 32 64 bitů se řídí mode bitem. V obrázku jsou vybarveny registry, které představují rozšíření oproti předchozí registrové struktuře x86 Registry pro programování aplikací rovněž obsahují 128-bitové mediální (myslí se multimediální), řídicí a stavové registry, a x87 registry slova tagů, řídicího slova, a stavového slova. Z hlediska hardweráře je schéma zjednodušené, protože existuje řada dalších registrů, které jsou programátorovi neviditelné, jako predikční registry pro odhadování výsledků skokových instrukcí, čítače cyklů, a další. 36
Kódování instrukcí délka instrukce Proměnná (např. VAX) Operace, počet operandů Adresový mód 1 Pole adresy 1 Adresový mód n Pole adresy n Pevná (např. DLX, PowerPC, ) Operace Pole adresy 1 Pole adresy 2 Pole adresy 3 Hybridní (např. IBM 360/370, Intel 80x86, ) Operace Adresový mód Pole adresy Operace Adresový mód 1 Adresový mód 2 Pole adresy Operace Adresový mód Pole adresy 1 Pole adresy 2 37
Kódování operačních znaků kódy instrukcí Kódování instrukcí řeší: způsob zakódování operačních znaků OZ - opcode, předepisuje velikost jednotlivých polí pro adresy registrů R a pro adresy paměti M Způsob kódování operačních znaků pevná délka operačního znaku proměnná délka operačního znaku rozšiřující se kód (např. HP 1000, PDP 11, VAX 11 a Ix86) Huffmanův kód nejčastější 38
Rozšiřující se kód pro operační znaky instrukcí Př. 39
IS Intel PXA 210/250 Zajímavý instrukční soubor má procesor Intel PXA 210/250. Je to jeden z nejpoužívanějších procesorů pro mobilní telefony. IS Intel PXA 210/250 je vytvořen složením dvou osvědčených instrukčních souborů: 32- bitovými instrukcemi ARM Advanced (dříve Acorn) Risc Machine 16- bitovými instrukcemi THUMB Přepínání stavů ARM state THIMB state Tyto instrukční soubory se staly obchodovatelnými jednotkami, které si počítačové firmy vzájemně prodávají. 40
Požadavky na instrukční soubor 1 - úplnost 2 - výkonnost (účinnost) 3 kompatibilita ad 1 - úplnost resp. univerzálnost instrukčního souboru znamená, že umožňuje vyhodnocení libovolné funkce s rozumným objemem paměti M. Standardní instrukční soubor není definován; de facto standardy jsou IS nejrozšířenějších procesorů INTEL, MOTOROLA a IBM S/360/370/390. Jsou však jakožto firemní definice chráněny zákonem. Objevila se proto snaha akademických pracovišť definovat otevřený instrukční soubor, jako např. u procesoru TRON na univerzitě v Tokiu. ad 2 - výkonnost resp. efektivnost IS se nedá velmi rychle zjistit, je to však zásadní a důležitý parametr. V prvnířadě nás zajímá počet provedených instrukcí a jejich relativní složitost, daná dobou provedení. Výkonnost nás pak zajímá jednak při běhu programu, jednak při kompilaci programu. ad 3 kompatibilita: např. ve vývojovéřadě procesorů x86 IA-64 musí fungovat všechny programy, které běžely na všech starších typech procesorů. Zde je řada skrytých problémů, které začínají u šířky operandů 1B, 2B, šířky adresy, způsobu vytváření adresy, atd. 41
Složitost IS Podle počtu instrukcí v IS dělíme procesory na CISC - Complex Instruction Set Computers, tedy procesory se složitým instrukčním souborem a RISC - Reduced Instruction Set Computers, tedy procesory s jednoduchým instrukčním souborem. Nejstarší procesory měly málo instrukcí, které byly značně jednoduché. Kolem roku 1960 měly procesory kolem 100 typů instrukcí, které se dále modifikovaly použitým adresovým módem a datovým typem operandů. Architektura CISC se vyvíjela postupně, přidáváním dalších a dalších, stále složitějších instrukcí, které podporovaly vyšší programovací jazyky a principiálně vyplňovaly tzv. sémantickou mezeru mezi strojovým kódem počítače a příkazy vyšších programovacích jazyků. Nejúspěšnější procesory pragmaticky kombinují principy RISC i CISC. 42
RISC Reduced Instruction Set Computer IBM 801 (1973) Relativně málo typů instrukcí a adresových módů. Pevné a snadno dekódovatelné formáty instrukcí. CPI = 1 (Cycles per Instruction) Řadič procesoru je kvůli rychlosti obvodový, tedy není mikroprogramový. Přístup k paměti je pouze v jednoduchých instrukcích Load a Store. Pro generování cílového kódu se využívá optimalizujících kompilátorů. Jde tedy o koncepci procesoru R-R, přičemž registrů je vyšší počet (deset a více). Pro jednoduché úlohy, např. v pevnéřádovéčárce FX, poběží program RISC rychleji. Bude-li však vysoké procento operací FP, poběží rychleji program CISC (toto nastává u vědeckotechnických výpočtů). Podrobnější výklad RISC bude v kapitole o řetězeném zpracování. 43
Regularita a ortogonalita Regularita je pravidelnost a uspořádanost IS, což je obecněřečeno přítomnost všech očekávaných operací a adresových módů. Ortogonalitou se myslí nezávislost mezi operačním znakem OZ, adresovým módem m a typem operandu dt. OZ/m/dt U ortogonálního IS tedy můžeme pro jakoukoliv operaci předepsat jakýkoliv adresový mód a jakýkoliv typ operand. Úplně ortogonální IS neexistuje, např. u známých typů procesorů nelze zaměnit v instrukci operand s pevnou řádovou čárkou za operand s pohyblivou řádovou čárkou. Hodnotí se tedy stupeň dosažené ortogonality. 44
Př. Instrukční soubor I 8080 IS 8-bitového mikroprocesoru I 8080. Je definováno asi 70 instrukcí (záleží ovšem na způsobu počítání, tedy které instrukce zařadíme do souboru základních instrukcí). Instrukce se dají rozdělit do základních skupin, které najdeme u většiny ostatních procesorů a to: přesuny (T - transfers) aritmetické (A) logické (L) posuvy a rotace (SR - Shift/Rotate) skoky resp. řídící instrukce (J - Jump, C - Call) zásobníkové (S - Stack) vstup-výstupní (IO - Input/Output) Délka instrukce je 1B, 2B, nebo 3B. Každý cyklus paměti přečte jeden byte instrukce, takže načtení 2-bytové instrukce trvá 2 cykly, načtení tříbytové instrukce trvá 3 cykly paměti M. 45
Formáty instrukcí I 8080 1B OZ r1 r2 r1, r2 jsou tříbitové adresy registru. Např. jednobytová instrukce s hexadecimálním kódem 78 znamená MOV A, B, což je přesun obsahu registru B do A 2B OZ BYTE Např. zápis 3E BYTE znamená instrukci MVI, tedy přesun bezprostředně následujícího operandu BYTE do registru A 3B OZ ADRL ADR Např. zápis C3 ADRL ADR znamená instrukci JMP ADR ADRL, tedy nepodmíněný skok na adresu ADR ADRL Adresa paměti je 16-bitová, což znamená, že velikost adresového paměťového prostoru je 2 16 = 64 K, adresované místo má šířku 1 B. Vstup-výstupní instrukce mají formát 2B, v části BYTE je číslo V/V jednotky, kterých tedy může být 256. Říkáme, že adresový prostor V/V má 256 míst. 46
Př. Formáty instrukcí IBM/360 byty Formát RR 1 2 3 4 5 6 OZ R1 R2 R1:= R1 op R2 RX OZ R1 X2 B2 D2 R1:= R1 op M[X2 + B2 + D2] RS OZ R1 R3 B2 D2 R1:= M[B2 + D2] op R3 SI OZ číslo B1 D1 M[B1 + D1]:= číslo SS OZ OZ délka B1 D1 B2 D2 Pozn.: RR: Registr - Registr RX: Registr - Indexovaná adresa RS: Registr - Paměť (Storage) SI: Paměť - Bezprostřední (Immediate) operand SS: Paměť - Paměť M[B1 + D1]:= M[B1 + D1] op M[B2 + D2] 47
VLIW Very Long Instruction Word moderní architektura procesoru s paralelně pracujícími vícenásobnými jednotkami. v jednom instrukčním slově může být zakódováno několik operací s pevnou řádovou čárkou, s pohyblivou řádovou čárkou i instrukce čtení nebo zápisu do paměti Př. 48