# Provádění instrukcí procesorem

**Základní model**
- kód programu a data jsou uložena ve vnější paměti
- procesor musí nejprve přečíst instrukci z paměti
- při provádění instrukce čte nebo zapisuje data do/z paměti

**Fáze instrukčního cyklu**
- instrukční cyklus = doba zpracování jedné instrukce
- 4 základní fáze
	- **fetch** - čtení kódu instrukce z paměti
	- **decode** - dekódování instrukce
	- **execute/memory** - provedení instrukce, čtení nebo zápis z/do paměti
	- **write back** - zpětný zápis výsledku do registrů procesoru
- každou fázi instrukce vykonává jiná část CPU

**Proudové zpracování instrukcí**
- při sekvenčním zpracování je využita vždy jen část CPU
- proudové zpracování umožňuje zpracování více instrukcí v různých fázích
- požadavky
	- stejná délka zakódovaných instrukcí
	- stejná délka jednotlivých fází
	- stejná délka provádění instrukcí

**CISC vs. RISC**
- **CISC**
	- složité instrukce (rozsáhlý instrukční soubor)
	- různá délka instrukcí
	- proměnná délka instrukčního cyklu
	- **výhoda**: účinné instrukce (program obsahuje malé množství instrukcí)
	- **nevýhoda**: obtížné proudové zpracování (instrukce se provádí pomalu)
- **RISC**
	- jednoduché instrukce (omezený instrukční soubor)
	- instrukce jsou stejné délky
	- konstantní délka instrukčního cyklu
	- **nevýhoda**: málo účinné instrukce (program obsahuje velké množství instrukcí)
	- **výhoda**: snadné proudové zpracování (instrukce se provádí rychle)

### Zpracování instrukcí v H8S

- čtení kódu instrukce
	- postupně po 16 bitech (každé čtení = 1 MC, Machine Cycle)
	- doba 1 MC závisí i na šířce datové sběrnice (3 nebo 6 taktů hodin)
- dekódování, provedení a zpětný zápis
	- vyžaduje různý počet (1-19) MC
	- každý MC trvá 1 takt hodin nebo 3/6 taktů při práci s pamětí
	- současně se provádí čtení další instrukce (MC poté trvá více taktů hodin)

**Upravené počítání strojových cyklů**
- upravené počítání (podle Renesas)
- nepočítají se MC provedené současně s předchozí instrukcí

### Závěr

- známe-li binární kód dané instrukce, můžeme určit:
	- počet MC potřebných pro přečtení (fetch) instrukce
	- počet čtení/zápisů do paměti provedených při vykonávání instrukce
- pro určení délky instrukčního cyklu je nutné znát počet MC potřebných k dekódování a provedení instrukce