Instrukční soubory, registrové struktury, způsoby adresace INP 2008 FIT VUT v Brně
Základní registry počítače + datová cesta M
IR
DR
PC
MAR
Příznaky CC
ALU
Operand
• 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.
Výsledek
2
Základní registry počítače + datová cesta • M
• IR
Příznaky CC
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
• • •
200
SP
300 110 86 22 189 21
Výhody: jednoduchá architektura Nevýhody: zásobník je úzké místo (lze pracovat jen s jeho vrcholem) Př. HP 3000 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
M
DR PC
R S
MAR T A B
ALU
9
Registrové počítače Univerzální registry FX 32 bitů
Univerzální registry FP 64 bitů
R0 R1
F0 ... ...
...
F3
R15
Desítková ALU
Dvojková ALU
MAR
IR
FPU
PC
DR
PSW 64b
• 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 Vnitřní sběrnice operace s řetězci znaků. 1B/2B/4B
• dvě sady nezávisle adresovatelných registrů – 16 FX registrů – 4 FP registry
M
• Př. IBM 360/370
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ý (R-M)
Registrový (L-S)
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 (AxB) - (CxD) - (ExF) 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
Jednoduché kódování IS, pevná délka instrukce, jednoduché generování kódu, počet cyklů na provedení instrukce je konstantní.
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é.
R–M 1, 2
Přímý přístup k datům bez meziukládání. Instrukce se dobře kódují a dávají dobrou hustotu.
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 slovo W dvojslovoDW čtyřslovo QW
(Halfword) (Word) (Doubleword) (Quadword)
2B 4B 8B 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ěť
Registry
Adresa 7 0
0
a
1
b
2
c
3
d
4
63
0
LD1 [1]=>
0 0 0 0 0 0 0 b
LD2 [2]=>
0 0 0 0 0 0 d c
e
LD4 [4]=>
0 0 0 0 h g f
5
f
LD8 [0]=>
h g f
6
g
7
h
e
d c
e
b a
17
Př. IA-64 Instrukce Load Big-endiens Paměť
Registry
Adresa 7 0
0
a
1
b
2
c
3
d
4
63
0
LD1 [1]=>
0 0 0 0 0 0 0 b
LD2 [2]=>
0 0 0 0 0 0 c
e
LD4 [4]=>
0 0 0 0 e
f g h
5
f
LD8 [0]=>
a
f g h
6
g
7
h
b c
d e
d
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
Zarovnaný při bytové adrese
Nezarovnaný při bytové adrese
byte
0, 1, 2, 3, 4, 5, 6, 7
nikdy
půlslovo
0, 2, 4, 6
1, 3, 5, 7
slovo
0, 4
1, 2, 3, 5, 6, 7
dvojslovo
0
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 v procesoru Slovo zapisované zpět do paměti
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
Registr
Add R4,R3
Význam
Kdy se použije
R4:=R4 + R3
Když je hodnota v registru.
Bezprostřední, Add R4,#3 literál
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) bezprostřední (immediate) nepřímý přes registr nepřímý přes pamět indexovaný s měřítkem
32 až 55% 17 až 43% 3 až 24% 1 až 6% 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 D/I
např. LDA b)
15 14 D/I
0 Adresa M adresa ve stránce;
10 9
číslo stránky
stránka má 1024 míst 0
adresa ve stránce
26
Segmentování – př. I 8086 0
15
Registr HL
I 8080 M = 64 K
Segmentový registr CS, DS, SS nebo ES
0
15 I 8086
Registr adresy segmentu 0
15 IP 19
0 MA M = 1M
• 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 20bitová 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 ...
...
Prostor IO
...
Prostor M
FF00h FEFFh
...
0000h
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
AH
AL
Base BX
BH
BL
Counter CX
CH
CL
Data DX
DH
DL
Source Index SI Destination Index DI
Index zdroje Index cíle
Base Pointer BP
Ukazatel báze
Stack Pointer SP
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ů 31
15
0
EAX
AX
EBX
BX
ECX
CX
EDX
DX
ESI
SI
EDI
DI
EBP
BP
ESP
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
RAX RBX RCX RDX RBP RSI RDI RSP R8 R9 R10 R11 R12 R13 R14 R15 63
0
64-b mediální a FP registry
128-bitové mediální registry
IA-64 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 XMM9 XMM10 XMM11 XMM12 XMM13 XMM14 XMM15
MMX0/FPR0 MMX1/FPR1 MMX2/FPR2 MMX3/FPR3 MMX4/FPR4 MMX5/FPR5 MMX6/FPR6 MMX7/FPR7 Registr flagů EFLAGS
RFLAGS
Ukazatel instrukcí
EIP 63
64-bitový režim Povinné registry x86
RIP 0
127
0
IA-64
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 nejčastější – 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
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
2B
3B
OZ r1
OZ
OZ
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
BYTE
ADRL
Např. zápis 3E BYTE znamená instrukci MVI, tedy přesun bezprostředně následujícího operandu BYTE do registru A
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 216= 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
1
2
3
4
5
6
RR
OZ
R1 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
R1:= R1 op R2
B2
D2
M[B1 + D1]:= M[B1 + D1] op M[B2 + D2] Pozn.: RR: Registr - Registr RX: Registr - Indexovaná adresa RS: Registr - Paměť (Storage) SI: Paměť - Bezprostřední (Immediate) operand SS: Paměť - Paměť 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