# Kódování instrukcí

- instrukce musí obsahovat
	- typ operace
	- adresu operandů
	- typ operandů
	- modifikátory adresy
	- modifikátory operace
- jednotlivé typy operandů vyžadují různou délku pole pro jejich uložení v instrukci
- podle způsobu kódování se dělí na dva typy

**Instrukce s pevnou délkou**
- všechny instrukce jsou stejně dlouhé (např. 32 bitů)
- časté u procesorů RISC
- **výhoda**: snadné a rychlé člení a dekódování dat
- **nevýhoda**: nízká efektivita kódování
- příklad: **MIPS**
	- procesor RIST s registrovou ISA (32 registrů)
	- všechny instrukce mají délku 32 bitů
	- adresování paměti možné jen **bázovou adresou** nebo **nepřímou adresou**
	- 3 základní formáty instrukcí
		- formát I (**Immediate**)
			- obsahuje operand o délce 16 bitů
		- formát J (**Jump**)
			- pro skokové instrukce
			- obsahuje 26bitový offset pro cílovou adresu
		- formát R (**Register**)
			- obsahuje pole pro určení 3 registrů (source, target, destination), pole pro délku posuvu a rozšířený operační kód

**Instrukce s proměnnou délkou**
- jednotlivé instrukce jsou zakódované do různého počtu bytů v závislosti na počtu operandů, délce adresy nebo přímého operandu atd.
- časté u procesorů CISC
- **výhoda**: efektivnější kódování složitých instrukcí
- **nevýhoda**: obtížné čtení a dekódování
- příklad: IA-32
	- aritmetické a logické operace
		- operandy mohou být v registrech nebo v paměti
		- dvouadresové instrukce
	- adresování paměti
		- adresa může být např.:
			- `MOV EAX,EBX+[ECX*4]+0x0100`

**Kódování nstrukcí procesoru H8S**
- délka instrukcí je 2, 4, 6 nebo 8 bytů
- při adresování instrukcí (skoky atd.) je délka adresy 8 nebo 24 bitů
- při adresování dat je délka adresy 8, 16 nebo 32 bitů

## Logický a fyzický adresní prostor

**Logický adresní prostor**
- je určen rozsahem adres, které může procesor zpracovat v instrukcích
	- délka adres v instrukci + u některých procesorů modifikace adres segmentováním

**Fyzický adresní prostor**
- je určen velikostí fyzické paměti, se kterou může procesor pracovat
	- počet adresních vodičů

**Mapovací mechanismus**
- u jednoduchých procesorů není (logický a.p. = fyzický a.p.)
- u výkonných procesorů je MMU (Memory Management Unit) pro segmentování a stránkování

### Adresní prostory H8S

- logické adresní prostory
	- kódový adresní prostor (16 MB)
	- datový adresní prostor (4 GB)
- fyzický adresní prostor

**Formát adresy dat procesoru H8S**
- logické adresování dat používá 32bitovou adresu
- v instrukci lze použít 8, 16 nebo 32bitovou adresu
	- vyšší bity adresy doplní procesor

**Formát adresy instrukcí procesoru H8S**
- logické adresování instrukcí používá 24bitovou adresu
- v instrukci lze použít 8 nebo 24bitovou adresu
	- vyšší bity adresy doplní procesor

**Převod logické adresy na fyzickou**
- logická adresa je 32bitová (data) nebo 24bitová (instrukce)
- fyzická adresa je 24bitová
- 8 nejvyšších bitů adresy dat se ignoruje