Hlavní navigace

Od digitálních signálových procesorů C5000 k čipům OMAP

Pavel Tišnovský

DSP s architekturou VLIW byly navrženy s ohledem na vysoký výpočetní výkon. Na opačné straně výkonnostního spektra nalezneme DSP řady C5000, které byly použity v čipech OMAP v kombinaci s procesory ARM.

Obsah

1. Od digitálních signálových procesorů C5000 k čipům OMAP

2. C5000 versus C6000

3. Čipy patřící do řady C5000

4. Čipy patřící do řady C6000

5. Digitální signálové procesory TMS320C54×

6. Interní struktura čipu

7. Aritmeticko-logická jednotka

8. Násobička a sčítačka

9. Barrel shifter

10. Kombinace DSP TMS320C54× s jádry ARM

11. Digitální signálové procesory TMS320C55×

12. Nejdůležitější vylepšení oproti řadě TMS320C54×

13. Série OMAP

14. Odkazy na Internetu

1. Od digitálních signálových procesorů C5000 k čipům OMAP

V předchozích třech částech [1] [2] [3] seriálu o architekturách počítačů jsme se zaměřili na popis digitálních signálových procesorů založených na architektuře VLIW (Very Long Instruction Word). Připomeňme si, že se jedná o DSP rozdělené zhruba do dvou skupin. V první skupině nalezneme čipy orientované na zpracování celočíselných hodnot popř. numerických hodnot s pevnou řádovou čárkou (fixed point). Ve skupině druhé pak nalezneme čipy, které dokážou zpracovat hodnoty s plovoucí řádovou čárkou (floating point). Díky použité architektuře VLIW a taktéž díky tomu, že mnoho výkonných jednotek je v čipu vytvořeno ve větším množství kopií (několik sčítaček, minimálně dvě násobičky atd.) je výpočetní výkon těchto DSP působivý (řádově GFLOPS) a umožňuje jejich nasazení i v náročných aplikacích.

Vysoký výpočetní výkon ale i samotná architektura VLIW má však negativní dopad jak na komplexnost čipů (a tím pádem i na jejich cenu či možnosti integrace), tak i na jejich spotřebu, což je parametr, který je v mnoha oblastech klíčový. I z tohoto důvodu společnost Texas Instruments navrhla a stále nabízí digitální signálové procesory se sice nižším výpočetním výkonem, ovšem taktéž s mnohem menšími energetickými nároky, menší plochou čipu a nižší cenou (u některých čipů začíná na dvou dolarech). Tyto typy DSP, které dnes tvoří řadu C5000, jsou buď dodávány samostatně, nebo jsou na jediném čipu kromě samotného DSP umístěny i další obvody. Velmi úspěšná byla kombinace DSP řady C5000 s procesorovým jádrem ARM, která později vedla ke vzniku technologie OMAP, s níž se mnozí čtenáři pravděpodobně setkali, protože čipy OMAP byly použity v mnoha mobilních telefonech (později TI tento segment trhu pravděpodobně ne příliš dobrovolně opustila, k čemuž se ještě dostaneme).

2. C5000 versus C6000

V předchozím textu byla zmíněna „řada C5000“, ovšem nebylo vysvětleno, co toto označení znamená. Všechny až doposud popisované digitální signálové procesory jsou odvozeny od základního čipu TMS32010. Z tohoto DSP nejdříve vznikl odvozený čip TMS320C10 optimalizovaný pro celočíselné operace, dále pak čip TMS320C30 pro FP operace (o tomto čipu jsme se dozvěděli základní informace v předchozím článku), čipy TMS320C6… s architekturou VLIW a taktéž čipy TMS320C54× a TMS320C55× patřící do kategorie obvodů s relativně malým výpočetním výkonem, ovšem současně s nízkou spotřebou. A právě z toho důvodu, že označení všech těchto DSP vždy začíná písmeny TMS320 a konkrétní rozlišení je uvedeno až za znakem „C“, začalo se toto označení zkracovat do takové míry, že všechny čipy TMS320C6… jsou pojmenovány „řada C6000“ a čipy TMS320C54× a TMS320C55× jsou pojmenovány „řada C5000“.

3. Čipy patřící do řady C5000

Řada C5000 se skládá z čipů:

Označení Fixed point Floating point Poznámka
TMS320C54× × částečně superskalární čip s šestiřezovou pipeline
TMS320C55× × více paralelně běžících jednotek (další ALU+násobička+sčítačka)
OMAP1 × kombinace TMS320C55× a jádra ARM9
OMAP2420 × kombinace TMS320C55× a jádra ARM11

První čipy TMS320C54× byly velmi často používány ve druhé generaci mobilních telefonů (G2) s GSM; nalezneme je například v mobilech společností Nokia či Ericsson (pamatujete ještě doby, kdy čtyři textové řádky na displeji byly považovány za luxus? :-). Později, společně se zlepšováním uživatelského rozhraní mobilních telefonů, docházelo ke kombinaci těchto DSP a některých procesorů z rodiny ARM. Právě zde se začala rodit platforma OMAP. Čipy TMS320C55× jsou již výkonnější, protože při stejné hodinové frekvenci teoreticky dosáhnou dvojnásobného výpočetního výkonu díky tomu, že základní jednotky (ALU, násobička, …) jsou zdvojeny. Tyto čipy se vyrábí dodnes, ať již samostatně, či v kombinaci s ARMovským jádrem (spíše je to z pohledu programátorů naopak: jde o ARMovské jádro podpořené v případě potřeby výkonným DSP).

4. Čipy patřící do řady C6000

Řada C6000 se skládá z těchto čipů (následující tabulku již důvěrně známe z předchozích částí tohoto seriálu):

Označení Fixed point Floating point Poznámka
TMS320C62× × základní model digitálního signálového procesoru s VLIW
TMS320C67× × na úrovni zdrojového kódu kompatibilní s prvním čipem
TMS320C64× × na úrovni zdrojového kódu kompatibilní s prvním čipem
TMS320C67×+ × vylepšení čipu TMS320C67×
TMS320C64×+ × vylepšení čipu TMS320C64×
TMS320C674× vznikl sloučením vlastností TMS320C64×+ a TMS320C67×+
TMS320C66× nová řada založená na TMS320C674×

Kromě toho do řady C6000 řadíme i kombinace DSP a procesorů (či spíše jen procesorových jader) ARM:

Označení DSP Jádro ARM
DaVinci TMS320C64×+ či TMS320C674× ARM9
OMAP-L13× TMS320C674× ARM9
OMAP243× TMS320C64× ARM11
OMAP3 TMS320C64×+ Cortex-A8
OMAP4 TMS320C64×+ Cortex-A9 popř. ARMv7

Poznámka: v řade C6000 je sice mnohem větší množství různých typů DSP, ve skutečnosti je však C5000, minimálně co do počtu prodaných kusů, velmi úspěšná série.

5. Digitální signálové procesory TMS320C54×

Dostáváme se k prvním čipům patřícím do řady C5000. Jedná se o čipy TMS320C54× (za „x“ se doplňuje konkrétní varianta čipu). U TMS320C54× můžeme vidět (na rozdíl od poměrně odlišné řady C6000) velkou inspiraci v původním digitálním signálovém procesoru TMS32010, ovšem interní struktura byla samozřejmě modifikována a v některých ohledech rozšířena, což se týká jak bitové šířky zpracovávaných operandů u aritmeticko-logické jednotky i násobičky, tak i například počtu registrů používaných pro adresování operandů (auxiliary registers), protože se původní dva adresní registry rozšířily na osm registrů. Navíc se o adresování operandů stará dvojice adresovacích jednotek (ARAU0 a ARAU1), protože tyto DSP jsou do jisté míry superskalární a dovolují tak načítat dva operandy současně. I možnosti ALU se rozšířily, protože ji lze nakonfigurovat takovým způsobem, že jedna 40bitová ALU může pracovat v režimu, kdy se chová jako dvě 16bitové aritmeticko-logické jednotky, což má samozřejmě velký vliv na výpočetní výkon (a zpracování 16bitových signálů je stále velmi časté).

Obrázek 1: Pro porovnání interní struktura nejdůležitější části DSP TMS32010 (prvního DSP od TI), v níž se provádí všechny výpočty.

6. Interní struktura čipu

Interní struktura čipů TMS320C54× je relativně složitá, zejména v porovnání s původním digitálním signálovým procesorem TMS32010. Řada C5000 je založena na Harvardské architektuře, která je ovšem modifikována. Zatímco v klasické Harvardské architektuře mají čipy dvě samostatné sběrnice, jednu pro data a druhou pro instrukce, je u TMS320C54× sběrnic mnohem více: tři sběrnice pro data (CB, DB, EB) a jedna sběrnice pro instrukce. Díky tomu, že existují tři samostatně pracující datové sběrnice, bylo možné dosáhnout poměrně vysokého stupně instrukčního paralelismu, protože v jednom cyklu je možné provést až tři čtení či zápisy (musíme si uvědomit, že DSP, na rozdíl od procesorů RISC, většinou minimálně jeden operand načítají z datové paměti a výsledek opět ukládají do datové paměti). Pro výběr zdrojových dat slouží obvody označené Sign Ctr, které můžeme vidět i na schématu (kromě multiplexingu dat tyto obvody mohou provádět i znaménkové rozšíření):

Obrázek 1: Zjednodušené schéma interní struktury čipu TMS320C54×. V horní části se nachází systém interních datových a adresových sběrnic, který byl pro zjednodušení vynechán; zobrazeny jsou jen výkonné jednotky a způsob jejich propojení.
Zdroj: TMS320C54×, TMS320LC54×, TMS320VC54× FIXED-POINT DIGITAL SIGNAL PROCESSORS, Texas Instrumens.

7. Aritmeticko-logická jednotka

Aritmeticko-logická jednotka dokáže zpracovávat zdrojové operandy o šířce až čtyřiceti bitů, výsledkem je v takovém případě opět 40bitové slovo. ALU je přes přepínače Sign Ctr propojena s dvojicí akumulátorů nazvaných A a B, s registrem T využívaným především násobičkou, s datovými sběrnicemi a taktéž s barrel shifterem. Povšimněte si, že druhý vstupní operand vstupuje do ALU vždy buď přes barrel shifter nebo přímo z paměti. Výsledek ALU operace je ukládán do vybraného akumulátoru A nebo B (výběr provádí multiplexor, který na schématu nalezneme pod těmito akumulátory). Jak jsme si již naznačili výše, dokáže ALU pracovat v režimu, kdy je její funkce rozdělena na dvě paralelně pracující šestnáctibitové ALU; v tomto případě jsou vstupní operandy i výstup rozděleny na osm horních bitů (guard bits) a dvojici 16bitových hodnot. Tím, že je šířka ALU i akumulátorů zvětšena o osm bitů, je zaručeno, že u operací typu MAC apod. nedojde k předčasnému přetečení výsledků.

Obrázek 2: Červeně je zvýrazněna aritmeticko-logická jednotka, modře dvojice akumulátorů A a B.

8. Násobička a sčítačka

Dalšími dvěma důležitými moduly jsou násobička a sčítačka určené pro operace typu MAC (Multiply Accumulate). Násobička, která pracuje nezávisle (tudíž paralelně) s ALU, dokáže v jednom cyklu vynásobit dva 17bitové operandy a poslat výsledek násobení do sčítačky (je to skutečně pouze sčítačka, nikoli plnohodnotná ALU). Jeden ze vstupních operandů násobičky bývá umístěn v registru T, s nímž jsme se již setkali u původního čipu TMS32010, lze ovšem použít i konstantu načtenou z paměti. Kromě registru T může být vstupní operand načten z vybraného akumulátoru. Do sčítačky vstupuje vypočtený součin a jeden z akumulátorů či nula (tím se vlastně sčítačka přeskočí). Výsledek vypočtený sčítačkou může být zaokrouhlen (spodní bity), lze aplikovat logiku pro saturaci výsledku (namísto pouhého přetečení) a blok ZERO testuje, zda není výsledek operace MAC nulový. Posléze je vypočtený výsledek uložen zpět do vybraného akumulátoru.

Obrázek 3: Červeně je zvýrazněna násobička, modře sčítačka a zeleně registr T umístěný na jeden ze vstupů násobičky.

9. Barrel shifter

Důležitou součástí digitálního signálového procesoru s celočíselnou ALU a násobičkou je barrel shifter, protože ten mj. umožňuje, aby se s využitím celočíselných instrukcí mohly provádět operace s numerickými hodnotami uloženými ve formátu s pevnou řádovou čárkou (FX). Ze schématu zapojení je patrné, že jeden z operandů vstupujících do aritmeticko-logické jednotky je zpracován v barrel shifteru. Mezi podporované operace patří především bitový posun doleva o 0 až 31 bitů a bitový posun doprava o 0 až šestnáct bitů. Počet posunovaných bitů je buď přímo součástí instrukce, nebo lze použít registr T popř. stavový registr ST1.

Obrázek 4: Červeně je zvýrazněn barrel shifter pracující samostatně, tj. nezávisle na ostatních jednotkách.

10. Kombinace DSP TMS320C54× s jádry ARM

Digitální signálové procesory TMS320C54× byly s úspěchem používány v mnoha mobilních telefonech druhé generace (G2). V roce 1997 došlo k velmi důležité události, která pravděpodobně změnila celý další vývoj mobilních telefonů. Firma Texas Instruments si totiž zakoupila licenci na použití jader ARMovských procesorů ARM7 (konkrétně velmi populárních ARM7TDMI s instrukční sadou Thumb a rychlou násobičkou) a použila kombinaci DSP+tohoto jádra pro čip použitý v mobilním telefonu Nokia 6110. Právě tehdy se začala psát úspěšná historie použití ARMovských procesorů v mobilních telefonech a později také na tabletech (mezitím však společnost TI tento trh opustila, což nijak negativně neovlivnilo další firmy s licencí na jádra ARM). Současně se zrodila kombinace ARM+DSP, která se později představila pod samostatným názvem OMAP (Open Multimedia Applications Platform).

11. Digitální signálové procesory TMS320C55×

Po dnes již přece jen poněkud zastaralých procesorech TMS320C54× firma Texas Instruments navrhla digitální signálový procesor TMS320C55× (za „x“ se opět doplňuje číslo konkrétního modelu), který se v několika modifikacích vyrábí dodnes. Opět se jedná o DSP určený do těch aplikací, v nichž se požadují nízké energetické nároky a přitom relativně dobrý výpočetní výkon. Podle použité technologie a konkrétního modulu dosahuje spotřeba od 0,15 mW/MHz do 0,54 mW/MHz, v pohotovostním režimu režimu pak cca 0,15 mW. Jádra TMS320C55× se prodávají buď v samostatném čipu, nebo mohou být součástí tandemu ARM+DSP popř. nějaké jiné vhodné kombinace (včetně celých SoC). Zajímavé je, že mnohé DSP z této řady jsou vybaveny koprocesorem pro výpočet FFT, což lze využít v mnoha oblastech, pro nichž jsou tyto čipy určeny (SDR, zpracování audia, rozpoznávání řeči, rozpoznávání otisků prstů, řídicí aplikace…).

12. Nejdůležitější vylepšení oproti řadě TMS320C54×

Digitální signálové procesory TMS320C55× mají mnoho vlastností společných s původní řadou TMS320C54×, ovšem samozřejmě došlo k několika úpravám, aby se zvýšila rychlost provádění DSP operací. Pravděpodobně nejviditelnější změnou je zdvojnásobení počtu aritmeticko-logických jednotek (jedna ALU je stále 40bitová, druhá však jen šestnáctibitová) a zdvojnásobení počtu násobiček, přičemž obě násobičky provádí násobení 17×17 bitových operandů a jsou napojeny na sčítačku (každá násobička má sčítačku svoji). Vylepšení se dotkla i sběrnic, protože u TMS320C55× lze v jednom taktu přečíst tři šestnáctibitové hodnoty z paměti a zapsat dvě (taktéž šestnáctibitové hodnoty) zpět do paměti, pokaždé s využitím jiné sběrnice:

Modul C54× C55×
ALU
Násobička
Sběrnice 3×Read+Write 3×Read, 2×Write (16bit)

13. Série OMAP

Digitální signálové procesory řady TMS320C55× se staly prvními DSP použitými v sérii OMAP neboli Open Multimedia Applications Platform. V rámci této série jsou vyráběny čipy určené především pro mobilní aplikace: od sluchátek s Bluetooth přes Google Glass k tabletům. Většina čipů OMAP obsahuje kombinaci digitálního signálového procesoru s jádrem ARM, ovšem od OMAP 3 jsou k této dvojici modulů přidány i GPU (buď jeden či více). Nejvýkonnější jsou čipy ze série OMAP 5 představené v roce 2013, které kromě výkonného DSP TMS320C64×+ (Tesla) obsahují i dvoujádrový Cortex-A15, další ARM jádro Cortex-M, grafický akcelerátor a navíc ještě další specializovaný modul určený pro operace typu BitBlt:

Série OMAP Označení DSP Jádro ARM
OMAP 1 OMAP171× TMS320C55× ARM926EJ-S
OMAP 1 OMAP162× TMS320C55× ARM926EJ-S
OMAP 1 OMAP5912 TMS320C55× ARM926EJ-S
OMAP 1 OMAP161× TMS320C55× ARM926EJ-S
OMAP 1 OMAP1510 TMS320C55× ARM925T
OMAP 1 OMAP5910 TMS320C55× ARM925T
       
OMAP 2 OMAP2431 TMS320C64× ARM1136
OMAP 2 OMAP2430 TMS320C64× ARM1136
OMAP 2 OMAP2420 TMS320C55× ARM1136
       
OMAP 3 OMAP3430 TMS320C64×+ Cortex-A8 + GPU
OMAP 3 OMAP3530 TMS320C64×+ Cortex-A8 + GPU
OMAP 3 OMAP3611 TMS320C64×+ Cortex-A8 + GPU
OMAP 3 OMAP3621 TMS320C64×+ Cortex-A8 + GPU
OMAP 3 OMAP3622 TMS320C64×+ Cortex-A8 + GPU
       
OMAP 4 OMAP4430 TMS320C64×+ (Tesla) Cortex-A9 popř. ARMv7 + GPU
OMAP 4 OMAP4460 TMS320C64×+ (Tesla) Cortex-A9 popř. ARMv7 + GPU
OMAP 4 OMAP4470 TMS320C64×+ (Tesla) Cortex-A9 popř. ARMv7 + GPU
       
OMAP 5 OMAP5430 TMS320C64×+ (Tesla) Cortex-A15 (dual core) + Cortex-M4 + GPU
OMAP 5 OMAP5432 TMS320C64×+ (Tesla) Cortex-A15 (dual core) + Cortex-M4 + GPU
       
OMAP L-1× OMAP-L137 TMS320C674× ARM926EJ-S
OMAP L-1× OMAP-L138 TMS320C674× ARM926EJ-S

K některým významným čipům OMAP se ještě v tomto seriálu vrátíme.

14. Odkazy na Internetu

  1. Texas Instruments DaVinci
    https://en.wikipedia.org/wi­ki/Texas_Instruments_DaVin­ci
  2. Digital Media Video Processors (TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/media_processor­s/davinci/products.page#
  3. TI Wiki
    http://processors.wiki.ti­.com/index.php/Main_Page
  4. C5000 ultra-low-power DSP
    http://www.ti.com/lsds/ti/pro­cessors/dsp/c5000_dsp/over­view.page
  5. OMAP (Wikipedia)
    https://en.wikipedia.org/wiki/OMAP
  6. OMAP – TI Wiki
    http://processors.wiki.ti­.com/index.php/OMAP
  7. Why OMAP can't compete in smartphones
    http://www.eetimes.com/au­thor.asp?section_id=40&doc_id=1286602
  8. Applications Processors – The Heart of the Smartphone
    http://www.engineering.com/E­lectronicsDesign/Electronic­sDesignArticles/ArticleID/5791/Ap­plications-Processors-The-Heart-of-the-Smartphone.aspx
  9. TI cuts 1,700 jobs in OMAP shift
    http://www.eetimes.com/do­cument.asp?doc_id=1262782
  10. VLIW: Very Long Instruction Word: Texas Instruments TMS320C6×
    http://www.ecs.umass.edu/e­ce/koren/architecture/VLIW/2/ti1­.html
  11. An Introduction To Very-Long Instruction Word (VLIW) Computer Architecture
    Philips Semiconductors
  12. VLIW Architectures for DSP: A Two-Part Lecture (PDF, slajdy)
    http://www.bdti.com/MyBDTI/pub­s/vliw_icspat99.pdf
  13. Very long instruction word (Wikipedia)
    https://en.wikipedia.org/wi­ki/Very_long_instruction_word
  14. A VLIW Approach to Architecture, Compilers and Tools
    http://www.vliw.org/book/
  15. VEX Toolchain (VEX = VLIW Example)
    http://www.hpl.hp.com/downloads/vex/
  16. Elbrus (computer)
    https://en.wikipedia.org/wi­ki/Elbrus_%28computer%29
  17. Super Harvard Architecture Single-Chip Computer
    https://en.wikipedia.org/wi­ki/Super_Harvard_Architec­ture_Single-Chip_Computer
  18. Digital Signal Processors (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/overview.page
  19. C674× Low Power DSP (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/c6000_dsp/c674×/o­verview.page
  20. TMS320C30 (stránky TI)
    http://www.ti.com/product/tms320c30
  21. TMS320C6722B
    http://www.ti.com/product/tms320c6722b/des­cription
  22. Introduction to DSP
    http://www.ti.com/lit/wp/spry281/spry­281.pdf
  23. The Evolution of TMS (Family of DSPs)
    http://www.slideshare.net/mo­to_modx/theevo1
  24. Datasheet k TMS32010
    http://www.datasheetarchi­ve.com/dlmain/49326c32a52050140ab­ffe6f0ac4894aa09889/M/TMS32010
  25. 1979: Single Chip Digital Signal Processor Introduced
    http://www.computerhistory­.org/siliconengine/single-chip-digital-signal-processor-introduced/
  26. The TMS32010. The DSP chip that changed the destiny of a semiconductor giant
    http://www.tihaa.org/histo­rian/TMS32010–12.pdf
  27. Texas Instruments TMS320 (Wikipedia)
    https://en.wikipedia.org/wi­ki/Texas_Instruments_TMS320
  28. Great Microprocessors of the Past and Present: Part IX: Signetics 8×300, Early cambrian DSP ancestor (1978):
    http://www.cpushack.com/CPU/cpu2­.html#Sec2Part9
  29. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko.sasktelwebsi­te.net/cpu.html
  30. Introduction to DSP – DSP processors:
    http://www.bores.com/courses/in­tro/chips/index.htm
  31. The Scientist and Engineer's Guide to Digital Signal Processing:
    http://www.dspguide.com/
  32. Digital signal processor (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/Digital_signal_processor
  33. Digitální signálový procesor (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Digitální_signálový_pro­cesor
  34. Digital Signal Processing FAQs
    http://dspguru.com/dsp/faqs
  35. Reprezentace numerických hodnot ve formátech FX a FP
    http://www.root.cz/clanky/fixed-point-arithmetic/
  36. IEEE 754 a její příbuzenstvo: FP formáty
    http://www.root.cz/clanky/norma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/
  37. Čtyři základní způsoby uložení čísel pomocí FX formátů
    http://www.root.cz/clanky/binarni-reprezentace-numerickych-hodnot-v-fx-formatu/
  38. Základní aritmetické operace prováděné v FX formátu
    http://www.root.cz/clanky/zakladni-aritmeticke-operace-provadene-ve-formatu-fx/
  39. Aritmetické operace s hodnotami uloženými ve formátu FP
    http://www.root.cz/clanky/aritmeticke-operace-s-hodnotami-ve-formatu-plovouci-radove-carky/
  40. FIR Filter FAQ
    http://dspguru.com/dsp/faqs/fir
  41. Finite impulse response (Wikipedia)
    http://en.wikipedia.org/wi­ki/Finite_impulse_response
  42. DSPRelated
    http://www.dsprelated.com/
  43. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  44. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  45. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  46. TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
    https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423
  47. COSC2425: PC Architecture and Machine Language, PC Assembly Language
    http://www.austincc.edu/rblac­k/courses/COSC2425/index.html
Našli jste v článku chybu?