Přidání poznámek z POT o kódování instrukcí
This commit is contained in:
parent
3e85e05216
commit
51fb1f144a
82
KIV POT/03. Kódování instrukcí.md
Normal file
82
KIV POT/03. Kódování instrukcí.md
Normal file
|
@ -0,0 +1,82 @@
|
|||
# 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
|
Loading…
Reference in a new issue