Procesory RISC v pracovních stanicích a serverech - architektura SPARC (2)

Pavel Tišnovský 14. 6. 2011

V dnešní části seriálu o architekturách počítačů budeme pokračovat v popisu mikroprocesorů založených na architektuře SPARC v7. Zaměříme se především na instrukční soubor těchto procesorů, způsob využití jejich sady pracovních registrů i na některé zvláštnosti v samotné konstrukci těchto čipů.

Obsah

1. Krátké zopakování z minula – formát instrukcí procesorů s architekturou­ SPARC

2. Typy instrukcí procesorů s architekturou SPARC v7

3. Aritmetické instrukce procesorů SPARC v7

4. Nenápadný vliv LISPu a Smalltalku na instrukční sadu procesorů SPARC

5. Logické a bitové operace

6. Příznakové bity a podmíněné skoky

7. Využití pracovních registrů překladači

8. Globální pracovní registry a registrová okna

9. Odkazy na Internetu

1. Krátké zopakování z minula – formát instrukcí procesorů s architekturou­ SPARC

V předchozí části tohoto seriálu jsme se stručně seznámili s historií vývoje mikroprocesorů s architekturou SPARC verze 7. Jedná se o architekturu navrženou inženýry ze společnosti Sun Microsystems, ovšem díky poměrně širokým možnostem licencování byly mikroprocesory s touto architekturou vyráběny i mnoha dalšími firmami a dnes již je dokonce návrh interní struktury těchto procesorů dostupný ve formě otevřeného standardu. Dnes se zaměříme na popis instrukční sady SPARC v7, ovšem ještě než si vysvětlíme funkci jednotlivých instrukcí, zopakujeme si, jaké formáty instrukcí mikroprocesory s touto architekturou používají. Jak je již u klasické architektury RISC zvykem, mají všechny instrukce – včetně instrukcí obsahujících konstantu – jednotnou délku, v tomto případě 32 bitů. Prvním formátem je instrukce pro volání subrutiny (CALL, minule nesprávně označená jako instrukce skoku), v níž se používá 30bitová adresa, jež se po bitovém posuvu o dva bity stává vstupní adresou subrutiny:

+--------------------------------------------------------------+
| 01 | 30 bit constant (adresa skoku posunutá doprava o 2 bity)|
+--------------------------------------------------------------+

Obrázek 1: Mikroprocesor s architekturou MicroSPARC vyráběný firmou Weitek.

Další formát je použit u podmíněných skoků. V tomto formátu je použit kód podmínky i 22 bitová konstanta, která se v případě, že je podmínka skoku splněna, vynásobí čtyřmi a následně se použije jako relativní adresa cíle skoku. Vzhledem k tomu, že se jedná o relativní adresu, je konstanta chápána jako celé číslo se znaménkem, což je nutná podmínka k tomu, aby bylo možné skok provést jak v dopředném směru (typicky při implementaci podmínky if-then-else), tak i dozadu (implementace programové smyčky):

+--------------------------------------------------------------+
| 00 |a(1)| cond(4) | op2(3)| 22 bit constant                  |
+--------------------------------------------------------------+

Obrázek 2: Mikroprocesor s architekturou MicroSPARC vyráběný firmou Fujitsu pro Sun Microsystems.

Třetí typ instrukcí je určen pro načtení horních 22 bitů do libovolného pracovního registru (kromě registru %g0, zápis do něj je sice možný, ale nemá žádný výsledek) pomocí instrukce SETHI. Existence této instrukce byla podmíněna tím, že jiným způsobem nelze do pracovních registrů načíst celou 32bitovou konstantu, což je logické, protože 32bitové instrukční slovo obsahuje kromě konstanty i instrukční kód:

+--------------------------------------------------------------+
| 00 |rd (5)  |100|           22 bit constant                  |
+--------------------------------------------------------------+

Zbývající dva formáty instrukcí jsou použity u většiny aritmetických a logických operací. Obsahují specifikaci dvou vstupních operandů a jednoho operandu výstupního. Prvním operandem je vždy některý z pracovních registrů, druhým operandem je buď pracovní registr nebo třináctibitová konstanta:

+--------------------------------------------------------------+
| 10 | rd (5) |  op3 (6) | rs1 (5) |0|   unused (8) | rs2 (5)  |
+--------------------------------------------------------------+
+--------------------------------------------------------------+
| 11 | rd (5) | op3 (6) | rs1 (5)  |1|   signed 13 bit const   |
+--------------------------------------------------------------+

Obrázek 3: Mikroprocesor s architekturou MicroSPARC II vyráběný firmou Fujitsu pro Sun Microsystems.

2. Typy instrukcí procesorů s architekturou SPARC v7

Strojové instrukce se nemusí dělit pouze podle formátu svého instrukčního slova, ale taktéž na základě účelu, k jakému instrukce slouží. V následující tabulce jsou vypsány všechny skupiny instrukcí podporovaných mikroprocesory s architekturou SPARC v7. Ve sloupci icc je řečeno, které skupiny instrukcí mohou modifikovat příznakové bity (kterým je věnována samostatná kapitola). Důležité je taktéž to, že u instrukcí, u nichž se příznakové bity mohou měnit, lze tuto funkci zakázat, což může být v některých případech důležité, protože například logickou instrukci OR nebo aritmetickou instrukci ADD je možné využít pro naplnění spodních 13 bitů vybraného pracovního registru, aniž by výsledek této aritmetické nebo logické operace ovlivnil stav příznakových bitů (což by mohlo být nežádoucí).

Obrázek 4: Mikroprocesor SPARC ve variantě určené pro použití v družicích. Jedná se o verzi se zvýšenou odolností proti záření.

Na tomto místě je vhodné upozornit na fakt, že kromě příznakových bitů nastavovaných CPU (resp. ALU pro celočíselné operace) se používaly příznakové bity nastavované FPU a dokonce i příznakové bity nastavované koprocesorem:

# Skupina instrukcí icc Popis
1 aritmetické ano součet a rozdíl (bez přenosu nebo s přenosem), provedení jednoho kroku násobení
2 logické ano šestice logických instrukcí AND, AND NOT, OR, OR NOT, XOR, XOR NOT
3 posuny ne logické posuny + aritmetický posun doprava (tyto instrukce skutečně neovlivňují příznakové bity)
4 načítání (LOAD) ne načtení jednoho bajtu, polovičního slova, celého 32 bitového slova, dvojslova s konverzí signed-unsigned
5 ukládání (STORE) ne uložení jednoho bajtu, polovičního slova, celého slova či dvojslova, instrukce swap, atomická instrukce pro načtení a uložení bajtu
6 podmíněné skoky ne s využitím registru příznaků CPU, registru příznaků FPU a registru příznaků koprocesoru
7 trap s podmínkou ne volání handleru s využitím registru příznaků (příznakových bitů)
8 skoky do subrutin ne včetně instrukcí pro posun registrového okna
9 instrukce FPU ne separátní množina instrukcí
10 instrukce koprocesoru ne separátní množina instrukcí

Obrázek 5: Mikroprocesory UltraSPARC jsou pokračovateli původního 32bitového mikroprocesoru SPAR­C.

3. Aritmetické instrukce procesorů SPARC v7

V této kapitole si vysvětlíme princip funkce některých aritmetických instrukcí, které lze najít v instrukční sadě procesorů s architekturou SPARC v7. Začněme instrukcemi pro součet a rozdíl, protože ty se svojí funkcí příliš neliší od obdobných instrukcí známých z jiných typů procesorů (až na tu maličkost, že se v případě architektury SPARC v7 jedná vždy o tříadresový kód). V této skupině instrukcí můžeme najít instrukci součtu ADD nepoužívající přenos, instrukci součtu s nastavením příznakových bitů nazvanou ADDcc, dále pak instrukci součtu s přenosem označovanou ADDX a samozřejmě i instrukci součtu s přenosem, která současně nastavuje příznakové bity ADDXcc. Podobně existuje i čtveřice instrukcí určených pro výpočet rozdílu dvou operandů: SUB, SUBcc, SUBX a SUBXcc. U všech těchto instrukcí může být druhým operandem buď libovolný pracovní registr nebo třináctibitová konstanta uložená přímo v instrukčním kódu.

Obrázek 6: Ultra SPARC II – další v minulosti velmi často používaný mikroprocesor s architekturou RISC
Zdroj: Wikipedia.

Mikroprocesory s architekturou SPARC v7 taktéž obsahovaly aritmetickou instrukci nazvanou MULScc, což je zkratka plného názvu Multiply Step and modify icc. Název této instrukce skutečně napovídá, jakou funkci tato instrukce vykonává. Nejedná se o skutečné plnohodnotné násobení (to nelze v jednou průchodu instrukční pipelinou provést), ale o jeden krok, který se při násobení dvou celých čísel provádí. Funkce vykonává čtyři činnosti:

  1. posun prvního operandu (částečný výsledek součinu) doprava o jeden bit s rozšířením znaménka (nejvyššího bitu) na základě znaménka předchozího mezivýsledku
  2. přičtení obsahu druhého operandu (násobenec) k operandu prvnímu (částečný výsledek součinu) za předpokladu, že nejnižší bit v pomocném registru Y (násobitel) je roven jedné
  3. posun obsahu pomocného registru Y doprava o jeden bit s nasunutím nejvyššího bitu získaného z mezivýsledku
  4. úprava příznakových bitů na základě operace provedené v kroku číslo 2

Podle požadavků řešené úlohy bylo možné s využitím instrukce MULScc vynásobit dvojici 32bitových čísel se 64bitovým výsledkem (horních 32 bitů bylo uloženo v pomocném registru Y), což ovšem znamenalo provést tuto instrukci až 32×. Ve skutečnosti se však v mnoha úlohách používaly menší hodnoty, což znamenalo, že se mohla násobit například jen dvě 20bitová čísla – vše záleželo na zadání úlohy, schopnostech programátora a možnostech překladače.

Obrázek 7: Interní struktura mikroprocesoru UltraSparc T1.

4. Nenápadný vliv LISPu a Smalltalku na instrukční sadu procesorů SPARC

Kromě osmice základních i odvozených aritmetických instrukcí se navíc v instrukční sadě procesorů SPARC v7 nachází i na první pohled poněkud zvláštní aritmetické instrukce nazvané TADDcc (Tagged Add) a TADDccTV (Tagged Add and Trap on Overflow). Tyto instrukce pracují podobně jako běžný součet, ovšem příznakový bit overflow je nastaven na logickou jedničku i v případě, že je alespoň jeden z bitů s indexem 0 či 1 libovolného operandu nenulový, druhá z těchto instrukcí navíc v tomto případě vyvolá přerušení (podobně existují i instrukce TSUBcc a TSUBccTV). Jaký je však skutečný význam těchto instrukcí?

Obrázek 8: Další varianta čipu MicroSPARC II.

V některých dialektech programovacího jazyka LISP a Smalltalk se do 32bitových slov ukládaly data i s informacemi o typu dat. Pokud byly spodní dva bity nastaveny na nulu, bylo v horních 30 bitech uloženo celé číslo (small integer), další bitové kombinace mohly znamenat ukazatel na reálné číslo či ukazatel na „velké“ celé číslo (bignum) reprezentované delší sekvencí slov. A právě u instrukcí součtu a rozdílu bylo zapotřebí jednoduše zaručit, že se součet bude provádět pouze na primitivním datovém typu small integer (z tohoto důvodu měly spodní dva bity nulovou hodnotu, aby operaci součtu/rozdílu nijak nenarušily). Tato koncepce „tagovaných dat“ v procesorech SPARC byla inspirována projektem Berkeley SOAR (Smalltalk on a RISC).

Obrázek 9: Mikroprocesor SuperSPARC.

5. Logické a bitové operace

Velmi jednoduché jsou instrukce provádějící bitové posuny. Na architektuře SPARC v7 je k dispozici instrukce určená pro posun obsahu pracovního registru doleva o zadaný počet bitů, která je nazvaná SLL (shift left logical). Obdobná instrukce pro posun obsahu pracovního registru doprava se nazývá SRL (shift right logical) a navíc je k dispozici i instrukce pro aritmetický posun doprava SAR (shift arithmetic right). Tato instrukce zachovává znaménko, tj. bit s nejvyšší váhou zůstává po posunu stále na svém místě, pouze je zkopírován do bitu nižšího. Všechny posuny jsou zadány buď pětibitovou konstantou, popř. pěti bity vybraného pracovního registru. Zajímavé je, že na rozdíl od mnoha dalších typů mikroprocesorů se v případě architektury SPARC v7 při provádění bitových a aritmetických posuvů nemění hodnota žádného příznakového bitu.

Obrázek 10: Dnes již poněkud pozapomenutý síťový počítač JavaStation vybavený mikroprocesorem MicroSPARC.

Zbývá nám popis logických instrukcí, tj. instrukcí aplikovaných na dvojici operandů bit po bitu. Jedná se o základní instrukce AND, OR a XOR, které jsou doplněny o instrukce ANDN (AND not, což znamená, že druhý operand je negován), ORN (OR not, opět je druhý operand negován) a XNOR (dtto pro základní operaci XOR). V předchozích kapitolách jsme si řekli, že u aritmetických instrukcí součtu a rozdílu (ADD a SUB) je možné zvolit, zda se mají nastavit příznakové bity. To stejné platí i pro logické instrukce, proto lze použít i „alternativní“ šestici instrukcí ANDcc, ANDNcc, ORcc, ORNcc, XORcc a XORNcc.

Obrázek 11: Další pohled na síťový počítač JavaStation.

6. Příznakové bity a podmíněné skoky

V předchozích kapitolách jsme se již několikrát zmínili o příznakových bitech. Připomeňme si, že tyto bity jsou nastavovány pouze těmito instrukcemi: ADDcc, ADDXcc, TADDcc, TADDccTV, SUBcc, SUBXcc, ANDcc, ANDNcc, ORcc, ORNcc, XORcc a XORNcc. Význam všech příznakových bitů, které jsou pojmenovány stejně, jako je tomu na mnoha dalších platformách, je vypsán v následující tabulce:

Bit Význam Popis
c carry příznak přenosu z nejvyššího bitu slova
n negative příznak záporného výsledku aritmetické operace (nejvyšší bit výsledku)
v overflow příznak přetečení do znaménkového (nejvyššího) bitu výsledku
z zero příznak nulového výsledku aritmetické nebo logické (bitové) operace

Obrázek 12: Struktura specializovaného počítače JavaEngine s mikroprocesorem MicroSPARC.

Tyto příznakové bity jsou využity v instrukcích podmíněných skoků a taktéž v podmíněném vyvolání instrukce trap (což je technologie, kterou se budeme zabývat příště). Všechny typy podmíněných skoků jsou vypsány v tabulce pod tímto odstavcem. Pokud je podmínka splněna, je cíl skoku vypočten na základě aktuální hodnoty čítače instrukcí a 22bitové konstanty uložené v instrukčním slovu. Povšimněte si toho, že v šestnácti typech skoků se nachází i instrukce BN (v podstatě odpovídá NOP) a BA (skok za každé podmínky), což je vlastnost, s níž jsme se už setkali i u některých mikroprocesorů firmy Motorola:

Instrukce Kód v instrukci Operace Provedený test
BN 0000 Branch Never žádný test
BE 0001 Branch on Equal z
BLE 0010 Branch on Less or Equal z OR (n XOR v)
BL 0011 Branch on Less n XOR v
BLEU 0100 Branch on Less or Equal, Unsigned c OR z
BCS 0101 Branch on Carry Set c
BNEG 0110 Branch on Negative n
BVS 0111 Branch on oVerflow Set v
BA 1000 Branch Always žádný test
BNE 1001 Branch on Not Equal not z
BG 1010 Branch on Greater not(z OR (n XOR v))
BGE 1011 Branch on Greater or Equal not(n XOR v)
BGU 1100 Branch on Greater, Unsigned not(c OR z)
BCC 1101 Branch on Carry Clear not c
BPOS 1110 Branch on Positive not n
BVC 1111 Branch on oVerflow Clear not v

Obrázek 13: Pohled na otevřený case specializovaného (řídicího) počítače JavaEngine s mikroprocesorem MicroSPARC. Tento počítač vznikl na základě snahy firmy Sun Microsystems o rozšíření platformy Java i do oblasti řízení.

7. Využití pracovních registrů překladači

S následující tabulkou jsme se již (i když v poněkud rozšířenější podobě) jednou setkali při porovnávání vlastností mikroprocesorů s architekturou MIPS a SPARC. V tabulce jsou vypsána čísla i aliasy (přezdívky) všech pracovních registrů, které jsou v každý okamžik viditelné a využitelné běžícím procesem. Vzhledem k tomu, že se u mikroprocesorů s architekturou SPARC využívají registrová okna, je pouze osm prvních registrů dostupných ze všech částí kódu, ostatní registry se mohou měnit v rámci posouvání registrových oken při volání subrutin a samozřejmě i při návratu ze subrutin (viz instrukce SAVE a RESTORE). Vazba mezi volanou subrutinou a volajícím programem je většinou zajištěna přes registr r[15] (%o7), volání subrutiny lze provést instrukcí CALL (s přímou adresou zadanou 30bitovou konstantou) nebo JMPL (jump and link), v níž je možné zvolit jak registr, do kterého se uloží původní hodnota čítače instrukcí, tak i cíl skoku na základě součtu obsahu dvou pracovních registrů, popř. registru a 13bitové konstanty:

Název registru Alias jména Typická funkce registru
r[0] %g0 konstanta 0
r[1] %g1 globální hodnota číslo 1
r[2] %g2 globální hodnota číslo 2
r[3] %g3 globální hodnota číslo 3
r[4] %g4 globální hodnota číslo 4
r[5] %g5 globální hodnota číslo 5
r[6] %g6 globální hodnota číslo 6
r[7] %g7 globální hodnota číslo 7
r[8] %o0 návratová hodnota číslo 0
r[9] %o1 návratová hodnota číslo 1
r[10] %o2 návratová hodnota číslo 2
r[11] %o3 návratová hodnota číslo 3
r[12] %o4 návratová hodnota číslo 4
r[13] %o5 návratová hodnota číslo 5
r[14] %sp ukazatel na vrchol zásobníku
r[15] %o7 návratová adresa ze subrutiny
r[16] %l0 lokální data, ALU operace #0
r[17] %l1 lokální data, ALU operace #1
r[18] %l2 lokální data, ALU operace #2
r[19] %l3 lokální data, ALU operace #3
r[20] %l4 lokální data, ALU operace #4
r[21] %l5 lokální data, ALU operace #5
r[22] %l6 lokální data, ALU operace #6
r[23] %l7 lokální data, ALU operace #7
r[24] %i0 první argument funkce
r[25] %i1 druhý argument funkce
r[26] %i2 třetí argument funkce
r[27] %i3 čtvrtý argument funkce
r[28] %i4 pátý argument funkce
r[29] %i5 šestý argument funkce
r[30] %fp ukazatel na začátek rámce
r[31] %i7 sedmý argument nebo adresa adresa

Obrázek 14: Rozmístění jednotlivých modulů, z nichž je složen mikroprocesor UltraSPARC.

8. Globální pracovní registry a registrová okna

Rozdělení pracovních registrů v subrutině (v libovolné úrovni zanoření) je následující. Prvních osm registrů je globálních, přičemž mezi tyto registry (logicky) patří i registr obsahující nulovou konstantu:

widgety

+-----------------+
| %g7             |
+-----------------+
| %g6             |
+-----------------+
| %g5             |
+-----------------+
| %g4             |
+-----------------+
| %g3             |
+-----------------+
| %g2             |
+-----------------+
| %g1             |
+-----------------+
| %g0 (konstanta) |
+-----------------+

Zbývajících 24 pracovních registrů je rozděleno na tři části: na registry, které bývají naplněné při volání subrutiny, na registry používané pro lokální data a konečně na registry plněné při volání jiné subrutiny. Programátor má sice možnost si zvolit odlišný způsob použití registrů, nicméně překladače při volání externích funkcí následující formát většinou dodržují:

+-----------------+  ..............
| %i7 (ret.addr.) |  :            :
+-----------------+  :            :
| %f0 (frame ptr) |  :            :
+=================+  :  registry  :
| %i5 (arg.)      |  :  naplněné  :
+-----------------+  :     při    :
| %i4 (arg.)      |  :  zavolání  :
+-----------------+  :  subrutiny :
| %i3 (arg.)      |  :            :
+-----------------+  :            :
| %i2 (arg.)      |  :            :
+-----------------+  :            :
| %i1 (arg.)      |  :            :
+-----------------+  :            :
| %i0 (arg.)      |  :            :
+=================+  :.............
| %l7 (local)     |  :            :
+-----------------+  :            :
| %l6 (local)     |  :            :
+-----------------+  :            :
| %l5 (local)     |  :  lokální   :
+-----------------+  :   data     :
| %l4 (local)     |  :            :
+-----------------+  :            :
| %l3 (local)     |  :            :
+-----------------+  :            :
| %l2 (local)     |  :            :
+-----------------+  :            :
| %l1 (local)     |  :            :
+-----------------+  :            :
| %l0 (local)     |  :            :
+=================+  :.............
| %o7 (ra)        |  :            :
+-----------------+  :            :
| %sp (stack ptr.)|  :            :
+-----------------+  :  registry  :
| %o5             |  :   plněné   :
+-----------------+  :    při     :
| %o4             |  :   volání   :
+-----------------+  :    jiné    :
| %o3             |  :  subrutiny :
+-----------------+  :            :
| %o2             |  :            :
+-----------------+  :            :
| %o1             |  :            :
+-----------------+  :            :
| %o0             |  :            :
+-----------------+  :............:

Obrázek 15: Obarvené moduly mikroprocesoru UltraSPARC T3 (srovnejte s předchozím obrázkem, který se odlišuje jen v malých detailech).

9. Odkazy na Internetu

  1. SPARC Pipelining
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/pipelining.html
  2. SPARC Instruction
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/inst_set.html
  3. OpenSPARC
    http://www.open­sparc.net/
  4. History of SPARC systems 1987 to 2010
    http://www.spar­cproductdirec­tory.com/histo­ry.html
  5. Sun-1 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun-1
  6. Sun-2 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun-2
  7. Sun-3 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun-3
  8. Sun386i (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun386i
  9. Sun 386i/250
    http://sites.in­ka.de/pcde/si­te/sun386i.html
  10. SPARC Instruction Set
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/inst_set.html
  11. MIPS Architecture Overview
    http://tams-www.informatik.uni-hamburg.de/ap­plets/hades/web­demos/mips.html
  12. MIPS Technologies R3000
    http://www.cpu-world.com/CPUs/R3­000/
  13. CPU-collection: IDT R3010 FPU
    http://www.cpu-collection.de/?tn=0&l0­=co&l1=IDT&l2=R3010+F­PU
  14. The MIPS R2000 Instruction Set
    http://suraj.lum­s.edu.pk/~cs423a0­5/Reference/MIP­SCodeTable.pdf
  15. Maska mikroprocesoru RISC 1
    http://www.cs­.berkeley.edu/~pat­trsn/Arch/RIS­C1.jpg
  16. Maska mikroprocesoru RISC 2
    http://www.cs­.berkeley.edu/~pat­trsn/Arch/RIS­C2.jpg
  17. The MIPS Register Usage Conventions
    http://pages.cs­.wisc.edu/~cs354–2/beyond354/con­ventions.html
  18. C.E. Sequin and D.A.Patterson: Design and Implementation of RISC I
    http://www.eec­s.berkeley.edu/Pub­s/TechRpts/1982/CSD-82–106.pdf
  19. Berkeley RISC
    http://en.wiki­pedia.org/wiki/Ber­keley_RISC
  20. Great moments in microprocessor history
    http://www.ib­m.com/developer­works/library/pa-microhist.html
  21. Microprogram-Based Processors
    http://resear­ch.microsoft.com/en-us/um/people/gbe­ll/Computer_Struc­tures_Principles_an­d_Examples/csp0167­.htm
  22. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  23. A Brief History of Microprogramming
    http://www.cs­.clemson.edu/~mar­k/uprog.html
  24. Architecture of the WISC CPU/16
    http://www.ece­.cmu.edu/~koop­man/stack_com­puters/sec4_2­.html
  25. Zásobníkový procesor WISC CPU/16 (Root.CZ)
    http://www.ro­ot.cz/clanky/pro­gramovaci-jazyk-forth-a-zasobnikove-procesory-16/#k03
  26. Writable instruction set, stack oriented computers: The WISC Concept
    http://www.ece­.cmu.edu/~koop­man/forth/roches­ter87.pdf
  27. The Great CPU List: Part X: Hitachi 6301 – Small and microcoded (1983)
    http://jbayko­.sasktelwebsi­te.net/cpu2.html#Sec2Par­t10
  28. What is RISC?
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/whatis/
  29. RISC vs. CISC
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/risccisc/
  30. RISC and CISC definitions:
    http://www.cpushac­k.com/CPU/cpu­AppendA.html
  31. The Evolution of RISC
    http://www.ib­m.com/developer­works/library/pa-microhist.html#si­debar1
  32. SPARC Processor Family Photo
    http://thenet­workisthecompu­ter.com/site/?p=243
  33. SPARC: Decades of Continuous Technical Innovation
    http://blogs.o­racle.com/onthe­record/entry/spar­c_decades_of_con­tinuous_techni­cal
  34. The SPARC processors
    http://www.top500­.org/2007_over­view_recent_su­percomputers/spar­c_processors
  35. Maurice V. Wilkes Home Page
    http://www.cl­.cam.ac.uk/ar­chive/mvw1/
  36. Papers by M. V. Wilkes (důležitá je především jeho práce číslo 35)
    http://www.cl­.cam.ac.uk/ar­chive/mvw1/list-of-papers.txt
  37. Microprogram Memory
    http://free-books-online.org/com­puters/advanced-computer-architecture/mi­croprogram-memory/
  38. First Draft of a report on the EDVAC
    http://qss.stan­ford.edu/~god­frey/vonNeuman­n/vnedvac.pdf
  39. Introduction to Microcontrollers
    http://www.pic24mi­cro.com/cisc_vs_ris­c.html
  40. Reduced instruction set computing (Wikipedia)
    http://en.wiki­pedia.org/wiki/Re­duced_instruc­tion_set_compu­ter
  41. MIPS architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIP­S_architecture
  42. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  43. Classic RISC pipeline (Wikipedia)
    http://en.wiki­pedia.org/wiki/Clas­sic_RISC_pipe­line
  44. R2000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R2000_(mi­croprocessor)
  45. R3000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R3000
  46. R4400 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R4400
  47. R8000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R8000
  48. R10000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R10000
  49. SPARC (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sparc
  50. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  51. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  52. Microcode (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crocode
  53. Microsequencer (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crosequencer
  54. Maurice Wilkes (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mau­rice_Wilkes
  55. Micro-operation (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­cro-operation
  56. SPARC Tagged Data – otázka
    http://compiler­s.iecc.com/com­parch/article/91–04–079
  57. SPARC Tagged Data – odpověď #1
    http://compiler­s.iecc.com/com­parch/article/91–04–082
  58. SPARC Tagged Data – odpověď #2
    http://compiler­s.iecc.com/com­parch/article/91–04–088
Našli jste v článku chybu?
Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Vitalia.cz: 5 důvodů, proč jet na výlov rybníka

5 důvodů, proč jet na výlov rybníka

DigiZone.cz: Test LG 55UH750V aneb Cena/výkon

Test LG 55UH750V aneb Cena/výkon

Vitalia.cz: 5 pravidel proti infekci močových cest

5 pravidel proti infekci močových cest

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

Podnikatel.cz: Takhle se prodávají mražené potraviny

Takhle se prodávají mražené potraviny

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: Jaký je rozdíl mezi brambůrky a chipsy?

Jaký je rozdíl mezi brambůrky a chipsy?

DigiZone.cz: Numan Two: rozhlasový přijímač s CD

Numan Two: rozhlasový přijímač s CD

Vitalia.cz: Když všichni seli řepku, on vsadil na dýně

Když všichni seli řepku, on vsadil na dýně

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

DigiZone.cz: Ginx TV: pořad o počítačových hráčích

Ginx TV: pořad o počítačových hráčích

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

DigiZone.cz: Mordparta: trochu podchlazený 87. revír

Mordparta: trochu podchlazený 87. revír