Hlavní navigace

Mikroprocesory ARM a instrukční sada Thumb - dokončení

3. 4. 2012
Doba čtení: 18 minut

Sdílet

Dnes dokončíme popis instrukční sady Thumb, která může být použita u novějších mikroprocesorů s architekturou ARM. Minule jsme si popsali formát aritmetických a logických instrukcí i instrukcí skoku, dnes se zaměříme na instrukce typu Load & Store, tj. na instrukce pro přenos dat mezi registry a pamětí.

Obsah

1. Načtení či uložení 32bitových slov s využitím adresy ve tvaru báze:offset

2. Současné načtení či uložení většího množství pracovních registrů

3. Práce s jednotlivými bajty + konverze

4. Načtení či uložení bajtu se znaménkovým rozšířením na 32bitové slovo

5. Práce se 16bitovými slovy

6. Relativní adresování využívající PC (Program Counter)

7. Relativní adresování využívající SP (Stack Pointer)

8. Instrukční sada Thumb: shrnutí

9. Odkazy na Internetu

1. Načtení či uložení 32bitových slov s využitím adresy ve tvaru báze:offset

V předchozí části seriálu o architekturách počítačů jsme si popsali velké množství instrukcí patřících do instrukční sady Thumb. Připomeňme si, že se jedná o alternativní instrukční sadu mikroprocesorů ARM, která byla navržena s ohledem na dosažení co největší hustoty kódu a tím pádem i s ohledem na lepší využití vyrovnávacích pamětí (cache). Tato sada navíc vznikla na základě analýzy strojových kódů generovaných překladači, takže v ní můžeme najít množství instrukcí zvolených čistě pragmaticky (tím se instrukční sada Thumb odlišuje od původní RISCové sady ARM).

Mezi základní instrukce typu Load & Store patří na RISCových mikroprocesorech s architekturou ARM instrukce určené pro přenos 32bitových slov mezi vybraným pracovním registrem a operační pamětí. Vzhledem k tomu, že v 16bitových instrukčních slovech instrukční sady Thumb je prakticky nemožné vyhradit dostatečný počet bitů pro uložení adresy nebo její významné části, využili autoři instrukční sady Thumb pro adresování obsah některého z pracovních registrů. Při studiu reálných programů (či přesněji řečeno jejich strojového kódu) si navíc tvůrci ISA povšimli, že se v kódech velmi často vyskytují operace pracující s prvky pole a/nebo datovými položkami sdruženými do záznamů (struct, record). V těchto případech je vhodné, aby se adresa místa v paměti skládala ze dvou částí: báze a offsetu. V případě polí je jako báze zvolena adresa prvního prvku v poli, v případě datových struktur/záznamů se taktéž jedná o adresu první položky. Offset potom může odpovídat například indexu prvku v poli (po bitovém posunu). Pro adresování ve tvaru báze:offset se používá následující formát instrukčního slova:

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | L | 0 | 0 |    Ro     |    Rb     |    Rd     |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Z výše uvedeného formátu instrukčního slova je patrné, že instrukce Load & Store používají tři pracovní registry, přesněji řečeno registry z „dolní“ skupiny R0R7. Význam všech tří registrů je popsán v tabulce:

Registr Význam
Rb registr obsahující 32bitovou bázovou adresu
Ro registr obsahující 32bitový offset
Rd registr, který se má uložit či načíst z/do paměti

Při podrobnějším pohledu na formát instrukčního slova objevíme kromě konstantních bitů a bitů rezervovaných pro uložení indexů použitých registrů ještě bit s indexem 11 (L), pomocí něhož je určeno, zda se má obsah pracovního registru Rd načíst (Load) z operační paměti, konkrétně z adresy báze+offset, či zda se naopak jeho obsah má uložit (Store) do operační paměti:

Bit 11 (L) Význam
0 Store – uložení registru do operační paměti
1 Load – načtení registru z paměti RAM či ROM

2. Současné načtení či uložení většího množství pracovních registrů

Instrukční sada Thumb obsahuje i instrukce, pomocí nichž je možné uložit či naopak načíst celou řadu vybraných pracovních registrů, nikoli pouze registr jediný. Zatímco u 32bitové instrukční sady ARM byly pro tento účel vyhrazeny instrukce LDM a STM, které pracovaly se všemi šestnácti pracovními registry, je u instrukční sady Thumb ze zřejmých důvodů použito pouze prvních osm registrů (důvodem je to, že v 16bitovém instrukčním slovu prostě není místo na uložení 16bitového pole obsahujícího seznam registrů, s nimiž se má pracovat). Vraťme se však k instrukční sadě Thumb, v níž najdeme instrukce LDMIA a STMIA. Tyto instrukce obsahují ve svém instrukčním slovu index registru, v němž je uložena bázová adresa a taktéž je zde umístěno osmibitové pole obsahující jedničku u těch registrů, které se skutečně mají uložit do paměti či se naopak mají z paměti načíst. Formát instrukčního slova instrukcí LDMIA a STMIA vypadá následovně:

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 1 | 0 | 0 | L |    Rd     |        seznam registrů        |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Do spodních osmi bitů instrukčního slova se ukládají příznaky odpovídající pracovním registrům R0R7. Pokud je bit s indexem n nastaven na jedničku, je instrukce Load/Store provedena i s registrem Rn. Pořadí registrů však není možné měnit, lze pouze určit, které registry se budou operace účastnit.

Podobně jako u instrukcí popsaných v předchozí kapitole, i zde je pomocí bitu 11 (L) určeno, zda se jedná o instrukci typu Load či naopak o instrukci typu Store:

Bit 11 (L) Význam
0 Store – uložení registrů (určených bitovým polem) do paměti
1 Load – načtení registrů (určených bitovým polem) z paměti

Připomeňme si, že podobný formát instrukčního slova můžeme najít i u instrukcí typu push a pop, které jsme si již popsali v osmé kapitole předchozí části tohoto seriálu. Jednalo se o následující formát:

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 0 | 1 | 1 | L | 1 | 0 | R |        seznam registrů        |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

L: 0 - push
   1 - pop

3. Práce s jednotlivými bajty + konverze

Jak jsme si již řekli v úvodní kapitole, byla instrukční sada Thumb navržena dosti pragmaticky s ohledem na co nejlepší uplatnění v praxi. Proto možná není divu, že v ní najdeme i instrukce typu Load & Store, které je možné použít pro manipulaci s jednotlivými bajty. Puristé by sice možná prohlásili, že tyto instrukce k procesorům s architekturou RISC nepatří (a měli by částečně pravdu!), při tvorbě aplikací se však ukazuje, že mnoho dat je a bude stále organizováno po bajtech – jedná se například o ASCII řetězce, řetězce kódované v UTF-8, hodnoty pixelů (barvové složky Red/Green/Blue a průhlednost Alpha) atd. Aritmetické a logické instrukce sice stále zpracovávají pouze 32bitové operandy, ovšem data načítaná z operační paměti mohou mít jiný formát. Nejjednoduššími instrukcemi typu Load & Store, které dokážou pracovat s jednotlivými bajty, jsou instrukce LDRB (Load Byte) a STRB (Store Byte), v nichž se neprovádí znaménkové rozšíření hodnoty bajtu na celé 32bitové číslo. Tyto instrukce mají následující formát, který se vlastně prakticky vůbec neliší od formátu instrukcí uvedeného v předchozí kapitole (změnil se jen obsah jediného bitu, konkrétně bitu číslo 10):

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | L | 1 | 0 |    Ro     |    Rb     |    Rd     |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Význam všech bitových polí instrukčního slova zůstává zachován, tj.:

Registr Význam
Rb registr obsahující 32bitovou bázovou adresu bajtu
Ro registr obsahující 32bitový offset bajtu
Rd registr, jehož spodních osm bitů se má uložit či načíst z/do paměti
Bit 11 (L) Význam
0 Store – uložení spodních osmi bitů registru Rd do paměti
1 Load – načtení bajtu z paměti a uložení do spodních osmi bitů registru Rd

4. Načtení či uložení bajtu se znaménkovým rozšířením na 32bitové slovo

Již v předchozí kapitole jsme se zmínili o tom, že aritmeticko-logická jednotka mikroprocesorů ARM dokáže pracovat pouze s 32bitovými operandy. Vzhledem k tomu, že s využitím instrukcí LDRB a STRB lze z každého 32bitového registru získat pouze jeho spodních osm bitů, mohlo by se zdát, že nám toto omezení v praxi nebude nijak vadit. To je sice, pravda, ale pouze v případě, že se pracuje s bajty obsahujícími celá čísla bez znaménka (0..255), ASCII kódy znaků atd. Problémy by ovšem mohly nastat například tehdy, pokud by bylo nutné pracovat s bajty, v nichž je uložena celočíselná hodnota se znaménkem (-128..127). V tomto případě je totiž nutné, aby se při načtení bajtu provedlo takzvané znaménkové rozšíření na šířku 32 bitů. Znaménkové rozšíření se provádí následovně: v načítaném bajtu je znaménko uloženo v nejvyšším bitu, tj. bitu s indexem 7. Hodnota tohoto bitu je následně zkopírována do bitů 8 až 31. To znamená, že pokud je načtena hodnota 0..127, jsou bity 8 až 31 nulové (a bit 7 samozřejmě taky), v opačném případě je bit 7 nastavený na jedničku, která je zkopírována i do bitů 8 až 31.

Příslušná instrukce, která provede načtení bajtu z operační paměti společně se znaménkovým rozšířením, má název LDSB (Load Sign-extended Byte), a formát jejího instrukčního slova vypadá následovně:

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | 0 | 1 | 1 |    Ro     |    Rb     |    Rd     |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Význam registrů Ro, Rb a Rd zůstává zachován:

Registr Význam
Rb registr obsahující 32bitovou bázovou adresu
Ro registr obsahující 32bitový offset
Rd registr, do něhož se uloží bajt přečtený z operační paměti, který je znaménkově rozšířen

Poznámka: povšimněte si, že k instrukci LDSB neexistuje ekvivalentní instrukce STSB. To ve skutečnosti ani není nutné, protože pro uložení bajtu obsahujícího hodnotu se znaménkem lze využít instrukci STRB popsanou v předchozí kapitole (při ukládání totiž není nutné provádět žádné konverze, tj. ani manipulaci s ukládanými bi­ty).

5. Práce se 16bitovými slovy

Vzhledem k tomu, že jsme si již popsali instrukce pro načtení či uložení 32bitových slov i instrukce pro načtení či uložení jednotlivých bajtů, asi každého čtenáře napadne, jak je tomu s 16bitovými daty. I tato data se v praxi velmi často používají (nasamplované zvuky, znaky v kódování USC-2 či UTF-16, číselné hodnoty typu short int atd. atd.), proto asi není žádným překvapením, že se v instrukční sadě Thumb setkáme i s instrukcemi, které umožňují pracovat se slovy majícími šířku šestnáct bitů. Jedná se o trojici instrukcí LDRH (Load Halfword), STRH (Store Halfword) a LDSH (Load Sign-extended Halfword). Instrukční slovo pro všechny tři instrukce má stejný tvar:

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | H | S | 1 |    Ro     |    Rb     |    Rd     |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Význam registrů Ro, Rb a Rd se nemění, proto si ho zde již nebudeme uvádět.

Pomocí bitů 10 (S) a 11 (H) je určeno, o kterou instrukci se má jednat:

Bit H Bit S Instrukce Význam
0 0 STRH Store Halfword
0 1 LDRH Load Halfword
1 1 LDSH Load Sign-extended Halfword

Poslední kombinace bitů H a S, kterou jsme si v předchozí tabulce neuvedli, je ve skutečnosti využita pro instrukci LDSB, jež byla popsána v předchozí kapitole.

Poznámka: opět platí, že po načtení 16bitového slova do pracovního registru jsou již všechny aritmetické i logické operace prováděny s plnou šířkou 32 bitů, podobně jako tomu bylo u původně osmibitových hodnot.

6. Relativní adresování využívající PC (Program Counter)

Již v předchozích částech tohoto seriálu jsme se zmínili o určitém problému, který nastane v tom případě, kdy se má do nějakého pracovního registru uložit nová 32bitová konstanta. Tento problém spočívá v tom, že – na rozdíl od mnoha procesorů s architekturou typu CISC – není možné mít ihned za instrukcí (instrukčním slovem) uloženou příslušnou 32bitovou konstantu, která by se do zvoleného pracovního registru mohla načíst. V mnoha případech lze sice využít načtení krátké konstanty umístěné přímo v instrukčním slovu (viz též minule popsané tříbitové a osmibitové konstanty používané v některých ALU instrukcích), ovšem někdy to není možné, protože je nutné pracovat s větší konstantou. Zde programátorům a překladačům přichází na pomoc instrukce LDR Rd, [PC+#offset], která pro adresování druhého operandu (konstanty v paměti) využívá obsah registru PC/R15 a offset. Konstanta totiž může být uložena společně s programovým kódem, ale nikoli přímo za instrukčním slovem, ale například až ZA koncem subrutiny či v některých případech ihned za instrukcemi skoku. Instrukce LDR Rd, [PC+#offset] má následující formát:

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 0 | 1 |    Rd     |             offset            |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

V bitech 8 až 10 je uložen index pracovního registru, do něhož se má konstanta načíst. Zajímavější je obsah bitů 0 až 7. Zde je uložena osmibitová konstanta, která je nejprve posunuta o dva bity doleva (tj. provede se vynásobení čtyřmi) a následně je výsledek sečten s obsahem registru PC, který se však mezitím stihl zvýšit o hodnotu 4 (vliv instrukční pipeline). Na rozdíl od instrukcí skoku je však offset vždy chápán jako celé kladné číslo (unsigned), což znamená, že se vždy načítá konstanta umístěná někde ZA pozicí instrukce, konkrétně na adresách vzdálených 0 až 1020 bajtů od aktuální adresy, na níž ukazuje registru PC.

Za zmínku možná stojí fakt, že konstantu lze z oblasti, v níž se nachází strojový kód programu, pouze načíst a nikoli uložit (pro uložení by bylo nutné použít jiné instrukce). To v naprosté většině případů nevadí, navíc je mnoho procesorů ARM využíváno ve funkci mikrořadiče, kde je program uložen v paměti typu (E)ROM (dnes typu FLASH).

7. Relativní adresování využívající SP (Stack Pointer)

V předchozí kapitole jsme si popsali instrukci typu LDR Rd, [PC+#offset], tj. instrukci, pomocí níž je možné načíst konstantu umístěnou v oblasti, kde se nachází i strojový kód programu. Jedná se vlastně o speciální adresovací režim, který byl do instrukční sady Thumb přidán z toho důvodu, aby se dosáhlo co nejvyšší možné hustoty kódu. V této kapitole se taktéž budeme zabývat instrukcemi používajícími speciální adresovací režim. Jedná se o režim používaný při přístupu k prvkům ukládaným na zásobník. Připomeňme si, že v instrukční sadě Thumb je jako ukazatel na vrchol zásobníku rezervován registr R13. V manuálech i assembleru se sice pro tento registru používá i alternativní označení SP (Stack Pointer), ve skutečnosti se však spíše jedná o bázový registr ukazující v dané proceduře/subrutině na začátek zásobníkového rámce (stack frame). V praxi se totiž většinou mění obsah registru R13/SP právě při vstupu do subrutiny, popř. při návratu ze subrutiny.

Aby bylo možné velmi efektivně přistupovat k parametrům předávaným přes zásobník (a taktéž k lokálním proměnným!), je nutné umět adresovat položky na zásobníku relativně k R13/SP. Právě k tomu slouží instrukce s následujícím formátem:

root_podpora

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | L |    Rd     |             offset            |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Jak je z formátu instrukčního slova patrné, jedná se o formát velmi podobný slovu popsanému v předchozí kapitole. I zde totiž můžeme najít index jednoho pracovního registru Rd a osmibitový offset. Ten je ještě před přičtením k registru R13/PC posunut o dva bity doleva. Určitě stojí za zmínku fakt, že se opět jedná o offset chápaný jako celé číslo bez znaménka, tj. s využitím těchto instrukcí není možné měnit obsah zásobníkových rámců vytvořených pro nadřazené subrutiny (to částečně přispívá k větší bezpečnosti). V praxi je tak možné, aby daná subrutina využívala až 256 32bitových parametrů a lokálních proměnných. Obsah parametrů a lokálních proměnných je samozřejmě nutné taktéž měnit; z tohoto důvodu je v bitu 11 (L) určeno, zda se jedná o instrukci typu Load či Store:

Bit 11 (L) Význam
0 Store – uložení registru do paměti (na zásobník)
1 Load – načtení registru z paměti (ze zásobníku)

8. Instrukční sada Thumb: shrnutí

Popis instrukční sady Thumb se blíží k závěru. Nepopsali jsme si sice zcela všechny instrukce, které lze v této instrukční sadě nalézt, ale přibližně 90% instrukcí ano. Pro přehlednost jsou v následující tabulce vypsány až doposud zmíněné formáty instrukčních slov. Z tabulky je patrné, že tvůrci instrukční sady Thumb skutečně dokázali využít prakticky každý bit instrukce:

 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 |operace|      offset       |    Rs     |    Rd     | bitový posun či rotace
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 | 1 | 0 | op|    Rn     |    Rs     |    Rd     | ALU operace Rd := Rs +- Rn
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 | 1 | 1 | op|  const.   |    Rs     |    Rd     | ALU operace Rd := Rs +- const (3bity)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 | 1 |operace|    Rd     |      osmibitová konstanta     | ALU operace s osmibitovou konstantou
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 0 | 0 | 0 |    operace    |    Rs     |    Rd     | ALU operace Rd := Rd op Rs (16 operací)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | L | 0 | 0 |    Ro     |    Rb     |    Rd     | LDR, STR Rd, [Rb+Rd] (32 bit)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | L | 1 | 0 |    Ro     |    Rb     |    Rd     | LDRB, STRB Rd, [Rb+Rd] (bajt)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | 0 | 1 | 1 |    Ro     |    Rb     |    Rd     | LDSB (bajt, rozšíření znaménka)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 1 | H | S | 1 |    Ro     |    Rb     |    Rd     | LDRH, STRH, LDSH (16bit slovo, rozšíření znaménka)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 | 0 | 1 |    Rd     |             offset            | LDR Rd, [PC+#offset]
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | L |    Rd     |             offset            | LRD/STR Rd, [SP+#offset]
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | S |         konstanta         | změna hodnoty SP
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 0 | 1 | 1 | L | 1 | 0 | R |        seznam registrů        | operace PUSH a POP
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 1 | 0 | 0 | L |    Rd     |        seznam registrů        | LDMIA, STMIA (načtení/uložení více registrů)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 1 | 0 | 1 |   podmínka    |      osmibitová konstanta     | podmíněný skok
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 1 | 1 | 0 | 0 |         jedenáctibitová konstanta         | nepodmíněný skok (branch)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 1 | 1 | 1 | H |         jedenáctibitová konstanta         | skok + link (branch and link)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

9. Odkazy na Internetu

  1. Introduction to ARM thumb
    http://www.ee­times.com/dis­cussion/other/4024632/­Introduction-to-ARM-thumb
  2. ARM, Thumb, and ThumbEE instruction sets
    http://www.ke­il.com/suppor­t/man/docs/ar­masm/armasm_CEG­BEIJB.htm
  3. An Introduction to ARM Assembly Language
    http://dev.em­celettronica.com/in­troduction-to-arm-assembly-language
  4. Processors – ARM
    http://www.ar­m.com/products/pro­cessors/index­.php
  5. The ARM Instruction Set
    http://simple­machines.it/doc/ar­m_inst.pdf
  6. ARM Architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/AR­M_architecture
  7. BBC BASIC
    http://www.bbcba­sic.co.uk/bbcba­sic.html
  8. BBC BASIC
    http://mdfs.net/Sof­tware/BBCBasic/
  9. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Sof­tware/BBCBasic/Spec­trum/
  10. BBC BASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/BBC_BA­SIC
  11. MIPS-3D® ASE
    http://www.mip­s.com/products/ar­chitectures/mips-3d-ase/
  12. An introduction to SPARC's SIMD offerings
    http://mikebu­rrell.wordpres­s.com/2007/12­/14/an-introduction-to-sparcs-simd-offerings/
  13. MIPS64TM Architecture for Programmers Volume IV-c: The MIPS-3DTM Application-Specific Extension to the MIPS64TM
    http://www.we­blearn.hs-bremen.de/ris­se/RST/docs/MIP­S/MD00099–2B-MIPS3D64-AFP-01.11.pdf
  14. Visual Instruction Set
    http://www.eno­tes.com/topic/Vi­sual_Instructi­on_Set
  15. NEON
    http://www.ar­m.com/products/pro­cessors/techno­logies/neon.php
  16. Architecture and Implementation of the ARM Cortex-A8 Microprocessor
    http://www.design-reuse.com/arti­cles/11580/ar­chitecture-and-implementation-of-the-arm-cortex-a8-microprocessor­.html
  17. Multimedia Acceleration eXtensions (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mul­timedia_Accele­ration_eXtensi­ons
  18. AltiVec (Wikipedia)
    http://en.wiki­pedia.org/wiki/Al­tiVec
  19. Visual Instruction Set (Wikipedia)
    http://en.wiki­pedia.org/wiki/Vi­sual_Instructi­on_Set
  20. MAJC (Wikipedia)
    http://en.wiki­pedia.org/wiki/MAJC
  21. MDMX (Wikipedia)
    http://en.wiki­pedia.org/wiki/MDMX
  22. MIPS Multiply Unit
    http://program­medlessons.or­g/AssemblyTuto­rial/Chapter-14/ass14_3.html
  23. Silicon Graphics Introduces Enhanced MIPS Architecture
    http://bwrc.e­ecs.berkeley.e­du/CIC/otherpr/en­hanced_mips.html
  24. MIPS-3D (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIPS-3D
  25. MIPS Technologies, Inc. announces new MIPS-3D technology to provide silicon-efficient 3D graphics acceleration
    http://www.design-reuse.com/new­s/2057/mips-mips-3d-technology-silicon-efficient-3d-graphics-acceleration.html
  26. MIPS-3D Built-in Function (gcc.gnu.org)
    http://gcc.gnu­.org/onlinedoc­s/gcc/MIPS_002d3D-Built_002din-Functions.html
  27. Baha Guclu Dundar:
    Intel MMX, SSE, SSE2, SSE3/SSSE3/SSE4 Architectures
  28. SSE (Streaming SIMD Extentions)
    http://www.son­gho.ca/misc/sse/sse­.html
  29. Timothy A. Chagnon: SSE and SSE2
    http://www.cs­.drexel.edu/~tc365/mpi-wht/sse.pdf
  30. Intel corporation: Extending the Worldr's Most Popular Processor Architecture
    http://downlo­ad.intel.com/techno­logy/architec­ture/new-instructions-paper.pdf
  31. SIMD architectures:
    http://arstechni­ca.com/old/con­tent/2000/03/sim­d.ars/
  32. Intel MMXTM Technology Overview
    Intel corporation, 1996
  33. MultiMedia eXtensions
    http://softpi­xel.com/~cwrig­ht/programmin­g/simd/mmx.phpi
  34. AMD K5 („K5“ / „5k86“)
    http://www.pcgu­ide.com/ref/cpu­/fam/g5K5-c.html
  35. Sixth Generation Processors
    http://www.pcgu­ide.com/ref/cpu­/fam/g6.htm
  36. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  37. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  38. Tour of the Black Holes of Computing!: Floating Point
    http://www.cs­.hmc.edu/~geof­f/classes/hmc­.cs105…/slides/clas­s02_floats.ppt
  39. 3Dnow! Technology Manual
    AMD Inc., 2000
  40. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  41. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  42. Cray History
    http://www.cra­y.com/About/His­tory.aspx?404;http:­//www.cray.com:80/a­bout_cray/his­tory.html
  43. Cray Historical Timeline
    http://www.cra­y.com/Assets/PDF/a­bout/CrayTime­line.pdf
  44. Computer Speed Claims 1980 to 1996
    http://homepa­ge.virgin.net/ro­y.longbottom/mip­s.htm
  45. Superpočítače Cray
    http://www.ro­ot.cz/clanky/su­perpocitace-cray/
  46. Superpočítače Cray (druhá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-druha-cast/
  47. Superpočítače Cray (třetí část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-treti-cast/
  48. Superpočítače Cray (čtvrtá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-ctvrta-cast/
  49. Superpočítače Cray (pátá část): architektura Cray X-MP
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-pata-cast-architektura-pocitace-cray-x-mp-a-jeho-pouziti-ve-filmovem-prumyslu/

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.