112 lines
4.2 KiB
Markdown
112 lines
4.2 KiB
Markdown
|
# Registry
|
|||
|
|
|||
|
**Terminologie**
|
|||
|
- **procesor** (CPU) = řadič + ALU
|
|||
|
- **mikroprocesor** = procesor vyrobený monolitickou technologií na 1 čipu
|
|||
|
- mikroprocesor není schopen samostatně fungovat – k činnosti potřebuje paměť, periferní obvody, ...
|
|||
|
- **mikrokontrolér** = mikropočítač s pamětí a se speciálními periferiemi a dalšími obvody vyrobený na 1 čipu
|
|||
|
|
|||
|
**Registr**
|
|||
|
- slouží v počítači jako dočasná paměť pro uložení určité hodnoty
|
|||
|
- sestaven z klopných obvodů (v každém obvodu 1 bit)
|
|||
|
|
|||
|
### Architektura počítače
|
|||
|
|
|||
|
- dvě základní koncepce:
|
|||
|
|
|||
|
**Von Neumannova** (Princetonská) **architektura**
|
|||
|
- společný adresní prostor (paměť) pro data i kód programu
|
|||
|
- výhody
|
|||
|
- poměr velikostí kód/data lze měnit podle okamžité potřeby
|
|||
|
- procesor má přístup do kódové paměti i pro zápis
|
|||
|
- nevýhody
|
|||
|
- procesor nemůže současně číst kód i data (omezení rychlosti)
|
|||
|
|
|||
|
**Hardwardská architektura**
|
|||
|
- data a kód programu jsou v oddělených adresních prostorech
|
|||
|
- výhody
|
|||
|
- možnost číst současně data i kód programu (vyšší rychlost)
|
|||
|
- šířka slova kódové paměti může být optimalizovaná
|
|||
|
- nevýhody
|
|||
|
- poměr velikostí datové a kódové paměti je pro daný případ pevný
|
|||
|
- někdy komplikovanější zavádění a ladění programu
|
|||
|
|
|||
|
**Kombinace obou architektur**
|
|||
|
- často se používá Von Neumannova architektura se samostatnou datovou a kódovou cache
|
|||
|
|
|||
|
### Programátorsky zajímavé vlastnosti procesoru
|
|||
|
|
|||
|
- základní uspořádání (architekturu) procesoru popisuje tzv. ISA (Instruction Set Architecture)
|
|||
|
- registrová sada procesoru
|
|||
|
- instrukční soubor
|
|||
|
- adresní prostory (paměti a IO)
|
|||
|
- rozlišují se 2 základní typy
|
|||
|
|
|||
|
**Akumulátorově orientovaná ISA**
|
|||
|
- instrukční soubor orientován na použití akumulátoru
|
|||
|
- akumulátor (ACC) - speciální registr pro uložení operandů
|
|||
|
- typická operace:
|
|||
|
- $\text{ACC} \leftarrow \text{ACC} \times \text{operand}$
|
|||
|
- `operand` může být v univerzálních registrech nebo v paměti
|
|||
|
- obvykle malý počet univerzálních registrů
|
|||
|
+ registrová sada procesoru (Intel IA-32)
|
|||
|
- 4 ks. univerzálních registrů 32 bitů (EAX = akumulátor)
|
|||
|
- 4 ks. bázových a indexových registrů
|
|||
|
- 6 ks. segmentových registrů
|
|||
|
- IP (PC) a příznakový registr
|
|||
|
- 8 ks. FP registrů 80 bitů
|
|||
|
- 8 ks. SIMD registrů 128 bitů
|
|||
|
- 8 ks. MMX registrů 64 bitů
|
|||
|
|
|||
|
**Registrově orientovaná ISA**
|
|||
|
- instrukční soubor orientován na použití registrů
|
|||
|
- typická operace:
|
|||
|
- $\text{Registr3} \leftarrow \text{Registr1} \times \text{Registr2}$
|
|||
|
- nelze přímo použít operandy v paměti
|
|||
|
- je nutno je prvně uložit do registrů
|
|||
|
- obvykle velký počet registrů (typicky 16 - 32)
|
|||
|
+ registrová sada procesoru (V850)
|
|||
|
- 32 ks. 32bitových registrů pro operandy interger (r0 ... r31)
|
|||
|
- všechny operace jsou typu $\text{registr} \leftrightarrow \text{registr}$
|
|||
|
- s pamětí pracují pouze instrukce Load a Store
|
|||
|
|
|||
|
- registrová sada procesoru (MSP430)
|
|||
|
- 16 ks. 16/20bitových registrů pro operandy interger (R0 ... R15)
|
|||
|
- některé registry mají funkci
|
|||
|
- PC (Program Counter), SP (Stack Pointer), SR (Status Register)
|
|||
|
+ registrová sada procesoru H8S
|
|||
|
+ **RxL**, **RxH** - 8bitové registry
|
|||
|
- **Rx**, **Ex** - 16bitové registry
|
|||
|
- **ERx** - 32bitové registry
|
|||
|
- **EXR** - řídicí registr
|
|||
|
- **CCR** - příznakový registr
|
|||
|
- **PC** - programový čítač (24 bitů)
|
|||
|
- **MAC** - Multiply Accumulate
|
|||
|
- **ER7** slouží implicitně jako **SP**
|
|||
|
|
|||
|
### Použití registrů
|
|||
|
|
|||
|
**Registr PC**
|
|||
|
- Program Counter
|
|||
|
- při provádění určité instrukce obsahuje adresu následující instrukce
|
|||
|
- mění se při čtení instrukcí z paměti nebo při provedením skoku
|
|||
|
|
|||
|
**Registr CCR**
|
|||
|
- Condition Code Register
|
|||
|
- obsahuje soubor příznaků pro větvení programu
|
|||
|
- nastavuje se automaticky podle výsledku operace
|
|||
|
- používá se k větvení programu
|
|||
|
|
|||
|
**Registr SP**
|
|||
|
- Stack Pointer
|
|||
|
- ukazatel na vrchol zásobníku
|
|||
|
|
|||
|
**Registr EXR**
|
|||
|
- Extended Control Register
|
|||
|
- pro řízení přerušení a trasování
|
|||
|
|
|||
|
**Jednoduchý program**
|
|||
|
- sečtení dvou čísel v paměti, uložení výsledku do paměti
|
|||
|
- H8S neumí pracovat s operandy v paměti, operandy se musí uložit do registrů
|
|||
|
- výsledek operace sčítání je v registru, musí se uložit do paměti
|