Šestnáctibitové mikrořadiče TI řady MSP430

1. 11. 2016
Doba čtení: 17 minut

Sdílet

Po popisu mikrořadičů z rodiny H8 přichází na řadu další oblíbené a často používané mikrořadiče, které se v některých ohledech rodině H8 podobají. Jedná se o 16bitové mikrořadiče MSP430 společnosti Texas Instruments.

Obsah

1. Šestnáctibitové mikrořadiče TI řady MSP430

2. Režimy činnosti MSP430

3. Organizace operační paměti

4. Pracovní registry mikroprocesoru

5. Struktura stavového registru

6. Instrukční sada čipů MSP430

7. Adresovací režimy

8. Adresování s registrem R0 (PC)

9. Speciální adresovací režimy při použití registrů R2 a R3 – generátory konstant

10. Adresování bajtů či slov

11. Formát instrukčních slov

12. Instrukce skoku (kód I)

13. Instrukce s dvojicí operandů

14. Instrukce s jedním operandem

15. Odkazy na Internetu

1. Šestnáctibitové mikrořadiče TI řady MSP430

Při popisu mikrořadičů nesmíme zapomenout na oblíbenou a poměrně často používanou řadu šestnáctibitových čipů založených na jádru MSP430. Tyto čipy vyrábí společnost Texas Instruments, do jejíhož portfolia náleží i další (architektonicky zcela odlišné) čipy – digitální signálové procesory (TMS320Cxx a další) i MSP432 (i přes podobné jméno jsou tyto čipy založeny na ARMovském jádru Cortex-M4F). Popis mikroprocesorových a mikrořadičových jader MSP430 jsem schválně zařadil ihned za popis jader H8, protože tyto architektury mají mnoho vlastností společných.

U jader řady MSP430 můžeme vidět inspiraci jak v RISCových procesorech, tak i v oblíbených čipech s architekturou CISC, mezi něž v tomto případě počítám především Motorolu 68000 či osmibitový procesor Motorola 6809. Mezi „RISCové“ vlastnosti patří především minimalisticky pojatá instrukční sada s pouhými 27 instrukcemi a poměrně rozsáhlá množina pracovních registrů se šestnácti 16bitovými registry (ovšem pouze dvanáct těchto registrů je skutečně obecně použitelných, protože první čtyři registry mají odlišné funkce).

Naopak mezi „CISCové“ vlastnosti můžeme zařadit ortogonalitu instrukční sady, protože prakticky každá instrukce může využít libovolný dostupný adresovací režim. Z toho mj. vyplývá i další typicky CISCová vlastnost – existence instrukcí, které dokážou pracovat s operandy uloženými v operační paměti, aniž by bylo nutné jeden či oba operandy nejprve přenést do nějakého pracovního registru (v tomto případě ovšem instrukce pochopitelně trvají delší dobu; základní doba trvání je totiž pouhý jeden takt). V tomto ohledu jsou čipy MSP430 pro programátory mnohem příjemnější, než například řada 8086, kde je patrné, že vznikla vývojem z osmibitových mikroprocesorů s akumulátorem.

2. Režimy činnosti MSP430

Šestnáctibitové mikrořadiče jsou v praxi používány mj. i z toho důvodu, že jsou (alespoň většinou) navrženy pro použití v režimech nízké spotřeby, což je důležité například u aplikací napájených z monočlánků, solárních článků či z akumulátorů s malou kapacitou (klasickým příkladem jsou termostaty či různá další „inteligentní“čidla). U mikrořadičů MSP430 má programátor k dispozici hned několik režimů činnosti, mezi kterými se může explicitně (programově) či automaticky (na základě externí události či při „probuzení“ watchdogu) přepínat. V páté kapitole si popíšeme strukturu stavového registru, v němž se mj. nachází i čtyři bity s označením CPUOFF, OSCOFF, SCG0 a SCG1, jejichž modifikací lze zajistit přepnutí mezi takzvaným aktivním režimem a jedním z pěti režimů s nízkou spotřebou (v originální dokumentaci se poněkud nadneseně nazývají ultralow-power).

Proč jsou vlastně tyto bity součástí stavového registru? Je to poměrně elegantní řešení mnoha problémů, protože při příchodu přerušení, které mnohdy vede k nutnosti přepnutí režimu mikrořadiče, je celý obsah stavového registru uložen na zásobník a na konci přerušovací rutiny je tento registr automaticky obnoven, čímž se celý čip vrátí do původního programátorem zvoleného módu.

3. Organizace operační paměti

Původní čipy MSP430 (bez X na konci) dokážou adresovat 64 kB paměti. Tento rozsah je rozdělen do několika oblastí, které jsou naznačeny na následujícím obrázku:

       +------------------------------+
0xffff |                              |
       | Tabulka pro vektory přerušení|
       |                              |
0xffe0 +------------------------------+
0xffdf |                              |
       |           Flash/ROM          |
       |                              |
0x???? +------------------------------+
       |                              |
       |             RAM              |
       |                              |
0x0200 +------------------------------+
0x01ff |                              |
       |  Oblast, do které se mapují  |
       |  buffery atd. HW modulů      | adresováno po slovech
       |                              |
0x0100 +------------------------------+
0x00ff |                              |
       |  Oblast, do které se mapují  |
       |  buffery atd. HW modulů      | adresováno po bajtech
       |                              |
0x0010 +------------------------------+
0x000f |                              |
       | SFR - oblast řídicích a      |
       |       stavových registrů HW  | adresováno po bajtech
       |                              |
0x0000 +------------------------------+

Poznámka: u některých čipů nalezneme taktéž oblast ROM o kapacitě jednoho kilobajtu. Tato ROM obsahuje bootloader (pro přenos OS přes sériovou linku) a je mapována na adresy 0×0c00 až 0×0fff.

4. Pracovní registry mikroprocesoru

Vzhledem k tomu, že procesory a mikrořadiče řady MSP430 zdědily některé své vlastnosti z RISCových procesorů, asi nás příliš nepřekvapí, že počet pracovních registrů je poměrně vysoký. Programátoři mají k dispozici celkem šestnáct pracovních registrů, přičemž každý registr má šířku šestnácti bitů. Ve skutečnosti je však pouze dvanáct těchto registrů skutečně univerzálně použitelných, neboť další čtyři registry mají či mohou mít speciální význam. Konkrétní vlastnosti jednotlivých pracovních registrů nám ukáže následující tabulka:

Označení registru Jméno Stručný popis
R0, PC Program Counter programový čítač
R1, SP Stack Pointer ukazatel na vrchol zásobníku
R2, SR, CG1 Status Register stavový registr + generátor konstant
R3, ZR, CG2 Zero Register nulový registr + generátor konstant
R4 General Purpose běžný pracovní registr
R5 General Purpose běžný pracovní registr
R6 General Purpose běžný pracovní registr
R7 General Purpose běžný pracovní registr
R8 General Purpose běžný pracovní registr
R9 General Purpose běžný pracovní registr
R10 General Purpose běžný pracovní registr
R11 General Purpose běžný pracovní registr
R12 General Purpose běžný pracovní registr
R13 General Purpose běžný pracovní registr
R14 General Purpose běžný pracovní registr
R15 General Purpose běžný pracovní registr

Poznámka: mnoho instrukcí dokáže pracovat s osmibitovými či šestnáctibitovými operandy. Při použití osmibitových operandů je použita jen polovina pracovního registru.

Poznámka 2: zápis do registru R3 nemění jeho hodnotu, stále zde bude uložena nula. Toho bylo možné využít při snížení počtu instrukcí procesoru.

5. Struktura stavového registru

Registr R2 obsahuje čtyři stavové bity (příznaky) obsahující informace o právě dokončené aritmetické operaci (overflow, negative, carry a zero), čtyři řídicí bity určené pro volbu režimu činnosti procesoru a další řídicí bit, kterým se povolují či naopak zakazují všechna maskovatelná přerušení. Zbývajících sedm bitů stavového registru R2 je rezervováno pro pozdější využití. Podívejme se nyní na přesnou strukturu stavového registru:

Bit Označení Význam zkratky Stručný popis
15 × × rezervováno
14 × × rezervováno
13 × × rezervováno
12 × × rezervováno
11 × × rezervováno
10 × × rezervováno
9 × × rezervováno
8 V overflow přetečení při práci s čísly se znaménkem
7 SCG1 System Clock Generator povolení či zákaz SMCLK (Sub-system Master Clock)
6 SCG0 System Clock Generator povolení či zákaz DCO (Digitally Controlled Oscillator)
5 OSCOFF OSCillator OFF povolení či zákaz oscilátoru LFXT1 (podrobnější vysvětlení příště)
4 CPUOFF CPU OFF vypnutí CPU (čip bude čekat na přerušení, watchdog atd.)
3 GIE General Interrupt Enable povolení či zákaz všech maskovatelných přerušení
2 N negative příznak záporného výsledku předchozí operace
1 Z zero příznak nulového výsledku předchozí operace
0 C carry příznak přenosu při práci s čísly bez znaménka

Poznámka: všechny čtyři stavové bity (příznaky) overflow, negative, carry a zero jsou nastaveny korektně bez ohledu na to, zda byla ALU operace provedena s bajty či se šestnáctibitovými slovy.

6. Instrukční sada čipů MSP430

Instrukční sada čipů MSP430 je z pohledu programátora velmi snadno pochopitelná, protože obsahuje pouze 27 různých instrukcí. Význam některých instrukcí se však může změnit (resp. přesněji řečeno rozšířit) při použití určitého adresovacího režimu, protože nesmíme zapomenout na to, že v sadě pracovních registrů se nachází i programový čítač PC, ukazatel na vrchol zásobníku SP a registry R2 a R3, které se používají jako takzvané generátory konstant. V určitém ohledu můžeme MSP430 považovat za RISCové procesory, ovšem oproti klasickým RISCovým architekturám se v případě MSP430 setkáme s některými odlišnostmi – komplikovanějšími adresovacími režimy, použitím instrukcí s proměnnou délkou, možností používat jako zdrojový či cílový operand buňku v operační paměti atd.

Poznámka: assemblery pro procesory MSP430 akceptují použití aliasů některých instrukcí (CLR atd.) i použití zápisu typu mov #1234, R4, což sice striktně řečeno není validní instrukce, ale lze ji snadno nahradit již plně validní instrukcí mov @R0+, R4, za níž následuje šestnáctibitová konstanta 1234 (pro více informací viz navazující kapitoly).

7. Adresovací režimy

Většina instrukcí pracuje s dvojicí zdrojových operandů a jedním operandem cílovým. Ovšem vzhledem k tomu, že instrukční slova mají šířku pouze šestnáct bitů, není možné použít takzvaný tříadresový kód, který známe z některých 32bitových RISCových architektur (příkladem může být architektura MIPS, u níž se ale při použití instrukčních slov o šířce třiceti dvou bitů mnohdy zbytečně plýtvá pamětí). Z tohoto důvodu je vždy jeden ze zdrojových operandů současně i operandem cílovým. Navíc se ještě počet adresovacích režimů (alespoň zdánlivě) snížil, zejména při porovnání s konkurenčními procesory H8, jejichž osmibitové varianty nabízí jedenáct adresovacích režimů. Čipy MSP430 sice nabízí programátorům pouze čtyři základní adresovací režimy, ovšem tento na první pohled malý počet je ve skutečnosti vyvážen tím, že mezi pracovními registry je i PC (Program Counter) a SP (Stack Pointer), což vede k některým zajímavým důsledkům, o nichž se zmíníme v navazující kapitole. Adresovací režimy se odlišují podle toho, zda jsou použity pro zdrojový či pro cílový operand.

Podívejme se nyní na následující dvojici tabulek, které jednotlivé režimy popisují (povšimněte si, jak se zápis v assembleru podobá zápisu používaném u čipů H8):

Adresovací režimy pro zdrojový operand

Bity v instrukci Zápis v assembleru Název režimu Stručný popis
00 Rn Register direct registr Rn obsahuje zdrojový operand
01 offset(Rn) Register indexed zdrojový operand je uložen na adrese Rn+offset
10 @Rn Register indirect registr Rn je použit ve funkci ukazatele
11 @Rn+ Register indirect with post-increment stejné jako předchozí režim, ovšem registr je po provedení operace zvýšen o 1 či 2 podle typu operandů (bajt či slovo)

V případě, že je použit režim offset(Rn), je ihned za instrukčním slovem uložen šestnáctibitový offset. Instrukce tedy mohou mít proměnnou délku.

Adresovací režimy pro cílový operand

Bity v instrukci Zápis v assembleru Název režimu Stručný popis
0 Rn Register direct do registru Rn je zapsán výsledek operace
1 offset(Rn) Register indexed výsledek operace bude uložen na adresu Rn+offset

Opět platí, že pokud je použit režim offset(Rn), je ihned za instrukčním slovem uložen šestnáctibitový offset. Tato vlastnost je zachována i při použití různých offsetů pro zdrojový a cílový operand, například:

mov 2(R5), 1234(R6)

V tomto případě má celá instrukce délku šesti bajtů (tří slov) a její význam je zhruba následující (ve skutečnosti se jednotlivé kroky mohou částečně překrývat):

  1. Vypočti ADDR1=R5+2
  2. Vypočti ADDR2=R6+1234
  3. Přečti slovo z adresy ADDR1
  4. Ulož toto slovo na adresu ADDR2
  5. Zvyš PC/R0 o hodnotu 6 (krok na další instrukci)

8. Adresování s registrem R0 (PC)

Zápis offset(PC) může ve skutečnosti označovat jakoukoli přesně definovanou adresu v operační paměti, protože assembler již při překladu programu ví, jaká je při spuštění této instrukce hodnota registru PC (programy obecně nejsou realokovatelné). To například znamená, že při programování v assembleru můžeme použít i následující zápis popisující instrukci pro přenos slova mezi dvěma absolutními adresami označenými návěštími (labels) FOO a BAR:

mov FOO, BAR

Assembler z tohoto zápisu automaticky vygeneruje instrukci:

mov x(PC), y(PC)

Neboli

mov x(R0), y(R0)

Kde x a y jsou assemblerem vypočteny takovým způsobem, aby platilo x=FOO-PC a y=BAR-PC.

Zápis @R0 označuje další slovo uložené za instrukcí, které je možné použít ve funkci vstupního operandu. Ovšem kdyby se například jednalo o instrukci pro součet, znamenalo by to, že po provedení součtu by se mikrořadič pokusil přečíst další slovo (obsahující konstantu pro součet) a interpretovat ho jako instrukci, takže se pravděpodobně se zápisem @R0 příliš často nesetkáme.

Ovšem mnohem zajímavější je zápis @R0+, který lze použít pro zdrojový operand ve významu: „přečti šestnáctibitové slovo následující za instrukcí, použij ho jako zdrojový operand a poté posuň PC/R0 až za toto slovo“. Tímto jednoduchým trikem vlastně dokážeme jako zdrojový operand použít šestnáctibitovou konstantu, která je uložena přesně tam, kde ji potřebujeme mít – v paměti ROM/EPROM, a to ihned u instrukce. Dále se ušetří nutnost použití konstanty vyjadřující adresu zdrojového operandy (ušetří se dva bajty). Podle mého názoru se jedná o velmi elegantní způsob, který například zabraňuje problémům, s nimiž se setkávají programátoři používající procesory ARM, u nichž se musí obecné konstanty (které nelze snadno vypočítat v instrukcích MOV a MVN) přidávat až za vlastní subrutiny.

Poznámka: assemblery procesorů MSP430 obvykle rozeznávají zápis konstanty ve tvaru #1234, který je převeden na výše uvedené adresování registrem PC/R0. Tento režim se v manuálech nazývá immediate mode.

9. Speciální adresovací režimy při použití registrů R2 a R3 – generátory konstant

Registry R2 a R3 mohou mít ve chvíli, kdy jsou použity jako zdrojové operandy, význam takzvaných generátorů konstant, Připomeňme si, že registr R2 je aliasem pro stavový registr a R3 pro registr obsahující konstantní nulu. To ovšem platí jen ve chvíli, kdy jsou tyto registry použity v adresovacím režimu Register Mode, tj. když se přímo čte jejich obsah. Pokud je použit odlišný adresovací režim, je chování registrů R2 a R3 odlišné, neboť mohou generovat pět různých konstant (šestou konstantou je nula při použití R3 jako přímého zdrojového operandu. Podívejme se tedy na vliv jednotlivých adresovacích režimů při použití registrů R2 a R3:

Bity v instrukci Zdrojový registr Konstanta Stručný popis
00 R2 × běžný přístup k obsahu registru R2 (Register mode)
01 R2 (0) absolutní adresování, 16bitová adresa je uložena ihned za instrukčním slovem
10 R2 #4
11 R2 #8
       
00 R3 #0
01 R3 #1
10 R3 #2
11 R3 #-1 (0×ffff)

Poznámka: povšimněte si, že vlastně žádnou funkcionalitu neztrácíme, protože ani R2 ani R3 nemají v režimech @Rn atd. žádný praktický význam.

Díky existenci těchto adresovacích režimů je možné v programech používat šestici výše zmíněných konstant, které nevyžadují, aby se za instrukčním slovem nacházela skutečná konstanta (to zajistí assembler automaticky). Program je tak kratší a je prováděn rychleji. Navíc díky tomu, že registry R2 a R3 generují „vhodné“ konstanty, dokáže assembler nahradit zápis INC dest za ADD 0(R3), dest (konstanta #1 v předchozí tabulce), CLR dest je možné nahradit za MOV R3, dest (konstanta #0 v předchozí tabulce) atd.

Ve výsledku obsahuje instrukční soubor jen 27 instrukcí, ovšem dalších 24 instrukcí je emulováno právě použitím registrů R2 a R3 a jejich speciálního významu při použití ve funkci zdrojového operandu.

10. Adresování bajtů či slov

V assembleru je možné u některých instrukcí zvolit, zda se mají operace provádět s hodnotami typu bajt či šestnáctibitové slovo. Odlišení se provádí systémem, který jsme již viděli u procesorů H8 – připojením postfixu „.b“ či „.w“ k mnemotechnickému kódu instrukce. Přitom platí, že výchozím režimem je práce se šestnáctibitovými slovy, takže se vlastně „.w“ nemusí uvádět a v praxi se ani neuvádí (uvidíme ho pouze při debugování či disassemblingu).

11. Formát instrukčních slov

Instrukce procesorů a mikrořadičů MSP430 můžeme podle formátu instrukčních slov rozdělit do pouhých tří skupin, což opět připomíná dělení instrukcí v čistě RISCových procesorech MIPS. Jednotlivé skupiny instrukcí budou podrobněji popsány v navazující trojici kapitol.

Všechny instrukce mají shodnou šířku šestnácti bitů, ovšem v některých režimech adresace se za instrukčním slovem může objevit jedna či dokonce dvě šestnáctibitové konstanty. Instrukční slova jsou rozdělena do několika bitových polí (samozřejmě ne všechna pole jsou vždy přítomna):

  • Operační kód instrukce (použit vždy)
  • Kód podmínky skoku (podmíněné a nepodmíněné skoky)
  • Offset vůči registru PC (použit u skoků)
  • Index registru pro zdrojový operand (4 bity)
  • Index registru pro cílový operand (4 bity)
  • Adresovací režim pro zdrojový operand (2 bity)
  • Adresovací režim pro cílový operand (1 bit)
  • Režim výpočtu nad bajty či slovy (1 bit)

12. Instrukce skoku (kód I)

Začneme instrukcemi skoku, které obsahují jak kód podmínky (sedm podmínek + jeden nepodmíněný skok), tak i desetibitový offset vůči registru PC, offset je před použitím vynásoben dvěma, protože instrukce mohou začínat vždy pouze na sudé adrese. Rozsah offsetu je tedy PC-1022 až PC+1024:

 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| op.kód |podmínka|   offset vůči registru PC   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Povšimněte si, že operační kód instrukce má pouze tři bity, zatímco u dále popsaných formátů jsou to čtyři bity resp. dokonce devět bitů. U skoků to však nijak nevadí, protože všech osm instrukcí skoku používá naprosto stejný operační kód.

Tři bity podmínky dovolují specifikovat již zmíněných sedm skutečných podmínek a jeden nepodmíněný skok:

# Instrukce Alias Význam
000 JEQ JZ skok při podmínce zero_flag==1
001 JNE JNZ skok při podmínce zero_flag==0
010 JC × skok při podmínce carry_flag==1
011 JNC × skok při podmínce carry_flag==0
100 JN × skok při podmínce negative_flag==1 (obrácená podmínka neexistuje)
101 JGE × skok při podmínce negative_flag ⊕ overflow_flag==0
110 JL × skok při podmínce negative_flag ⊕ overflow_flag==1
111 JMP × nepodmíněný skok

Poznámka: pokud je zapotřebí provést nepodmíněný skok na jakoukoli adresu, lze samozřejmě použít instrukci mov #konstanta, PC.

13. Instrukce s dvojicí operandů

Většina aritmetických a logických instrukcí obsahuje v instrukčním slovu specifikaci zdrojového operandu i operandu cílového. Zdrojový operand je specifikován adresovacím režimem (2 bity) a indexem registru, protože všechny čtyři dostupné adresovací režimy pracují s libovolným zdrojovým registrem. Cílový operand je taktéž specifikován adresovacím režimem (pouze jeden bit) a opět indexem pracovního registru. Kromě toho je nutné jedním bitem zvolit, zda se mají operace provádět s bajty nebo se šestnáctibitovými slovy:

 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  op.kód   |zdr.registr|AD|BW| AS  |cíl.registr|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Význam jednotlivých bitových polí:

  • Operační kód instrukce
  • Index registru pro první zdrojový operand (4 bity)
  • AD: adresovací režim pro zdrojový operand (2 bity)
  • BW: režim výpočtu nad bajty či slovy (1 bit)
  • AS: adresovací režim pro cílový operand (1 bit)
  • Index registru pro druhý zdrojový a současně i cílový operand (4 bity)

Poznámka: cílový registr (a adresovací režim) samozřejmě platí i pro druhý operand – není zde použit tříadresový kód.

14. Instrukce s jedním operandem

Sedm instrukcí využívá pouze jediný zdrojový a/nebo cílový operand, takže v tomto případě mohlo dojít k dosti podstatnému zjednodušení instrukčního slova, jehož formát vypadá následovně:

ict ve školství 24

 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  operační kód instrukce  |BW| AD  |  registr  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Význam jednotlivých bitových polí:

  • Operační kód instrukce
  • BW: režim výpočtu nad bajty či slovy (1 bit)
  • AD: adresovací režim pro zdrojový i cílový operand (2 bity)
  • Index registru pro zdrojový a současně i cílový operand (4 bity)

Poznámka: podrobnější popis jednotlivých instrukcí a současně i popis standardních modulů (časovače, A/D, D/A atd.) bude uveden v pokračování tohoto článku.

15. Odkazy na Internetu

  1. MSP430 Development Hardware
    http://www.argenox.com/li­brary/msp430/msp430-development-hardware-chapter-1/
  2. MSP430™ ultra-low-power Microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/msp/overview.page?HQS=msp430
  3. An introduction to the TI MSP430 low-power microcontrollers
    http://mspgcc.sourceforge­.net/manual/c68.html
  4. MSP430 LaunchPad Tutorials
    http://processors.wiki.ti­.com/index.php/MSP430_Lau­nchPad_Tutorials
  5. LaunchPad MSP430 Assembly Language Tutorial
    http://robotics.hobbizine­.com/asmlau.html
  6. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  7. TI MSP430 (Wikipedia)
    https://en.wikipedia.org/wi­ki/TI_MSP430
  8. Introduction to Getting Started with MSP430
    http://www.argenox.com/li­brary/msp430/msp430-preface-intro/
  9. H8/300H Series Software Manual
    https://www.renesas.com/en-us/doc/products/mpumcu/001/rej09b0213_h8300h­.pdf
  10. Renesas H8/300H Series Manuals
    https://www.manualslib.com/pro­ducts/Renesas-H8–300h-Series-2312446.html
  11. H8 Family
    https://en.wikipedia.org/wi­ki/H8_Family
  12. H8/300 and H8/300L
    http://nah6.com/~itsme/dow­nload/ibutton/h8_8bit.pdf
  13. H8 Family
    https://www.renesas.com/en-us/products/microcontrollers-microprocessors/h8.html
  14. (GCC) Status of Supported Architectures from Maintainers' Point of View
    https://gcc.gnu.org/backends.html
  15. (GCC) H8/300 Options
    https://gcc.gnu.org/online­docs/gcc/H8_002f300-Options.html#H8_002f300-Options
  16. GCC for SuperH,H8/300,AVR
    http://mes.osdn.jp/h8/gcc.html
  17. H8/3802, 38002S, 38004, 38104 (manuály k čipům)
    https://www.renesas.com/en-us/document/hw-manual?hwLayerShowFlg=tru­e&prdLayerId=184&layerName=H8%252F3802%252C%2B38­002S%252C%2B38004%252C%2B38104&co­ronrService=document-prd-search&hwDocUrl=%2Fen-us%2Fdoc%2Fproducts%2Fmpum­cu%2F001%2Frej09b0024_h83802­.pdf&hashKey=c5e1fa0a18c01e6c789bc7­b5c0184ed9
  18. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  19. Renesas SH Instruction Set Summary
    http://shared-ptr.com/sh_insns.html
  20. SH-4 RISC Processor by HITACHI
    http://www.cs.umd.edu/~me­esh/cmsc411/website/projec­ts/risc/risc.htm
  21. SH-4 RISC Processor
    http://www.cs.umd.edu/~me­esh/cmsc411/website/projec­ts/risc/sh-4.htm
  22. SuperH RISC engine Family Features
    https://www.renesas.com/en-us/products/microcontrollers-microprocessors/superh/superh-features.html
  23. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  24. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  25. 6800 Instruction Set
    http://www.electronics.dit­.ie/staff/tscarff/6800/In­structions/instructions.htm
  26. Assembly language today
    http://beust.com/weblog/2004/06/23/as­sembly-language-today/
  27. Calling subroutines
    http://infocenter.arm.com/hel­p/index.jsp?topic=/com.ar­m.doc.kui0100a/armasm_cih­cfigg.htm
  28. Art of Assembly – Arithmetic Instructions
    http://oopweb.com/Assembly/Do­cuments/ArtOfAssembly/Volu­me/Chapter6/CH06–2.html
  29. X86 Assembly/Arithmetic
    https://en.wikibooks.org/wi­ki/X86_Assembly/Arithmetic
  30. ARM subroutines & program stack
    http://www.toves.org/books/armsub/
  31. Programming from the Ground Up Book – Summary
    http://savannah.nongnu.or­g/projects/pgubook/
  32. The 6502 overflow flag explained mathematically
    http://www.righto.com/2012/12/the-6502-overflow-flag-explained.html

Autor článku

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