FAV-ZCU/KIV POT/01. Registry.md

111 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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