2.9 KiB
2.9 KiB
Adresní módy
- různé typy procesorů mohou mít v instrukci 1, 2 nebo více adres
- operandy mohou ležet v registrech nebo v paměti
- adresní mechanismus procesoru musí umožnit
- adresování instrukcí (skoky, větvení, podprogramy)
- adresování jednoduchých promenných různé délky a typu
- práci s indexovanými promennými
- práci se strukturami
- lze řesit s různým podílem HW a SW
- pokročilé požadavky
- segmentování programu
- stránkování
- ...
Základní typy operandů
- podle typu procesoru lze v instrukcích používat různé typy operandů
- implicitní operand
- operand je určen přímo typem instrukce
- např.
RTS
- naplní
PC
obsahem adresy určenéSP
(registry nejsou v instrukci uvedeny)
- naplní
- registrový operand
- operand je v registru (registrech), které jsou v instrukci explicitně uvedeny
- např.
ADD.B R0H, R0L
- sečte obsah v registrech, výsledek uloží do
R0L
- sečte obsah v registrech, výsledek uloží do
- přímý operand
- operand je uveden přímo v instrukci
- např.
MOV.B #25, R0L
- uloží hodnotu 25 do
R0L
- uloží hodnotu 25 do
- přímá adresa
- operand je uložen v paměti, jeho adresa je uvedena v instrukci
- např.
MOV.B @043A, R0L
- uloží do
R0L
obsah adresy043A
- uloží do
- nepřímá adresa
- v instrukci uvedena adresa paměti, kde je uložena adresa operandu
- např.
MOV.B @@0500, R0L
- uloží do
R0L
obsah adresy na adrese0500
- uloží do
- nepřímá adresa v registru
- v instrukci uvedena adresa registru, kde je uložena adresa operandu
- např.
MOV.B @R1, R0L
- uloží do
R0L
obsah adresy na adrese v registruR1
- uloží do
- indexová adresa
- poloha operandu v paměti určena součtem adresy uvedené v instrukci a obsahem indexového registru
- počáteční adresa je v instrukci
- např.
MOV.B @(043A+ER1), R0L
- uloží do
R0L
obsah adresy ze součtu043A
+ obsah registruER1
- uloží do
- bázová adresa
- poloha operandu v paměti je určena součtem obsahu registru a offsetu uvedeného v instrukci
- počáteční adresa je v registru
- např.
MOV.B @(4+ER1), R0L
- uloží do
R0L
obsah adresy ze součtu obsahu registruER1
+4
- uloží do
- složená (segmentová) adresa
- adresa operandu v paměti se vypočítá složením z několika částí, uložených v registrech nebo v operandovém poli instrukce
- např.
MOV.B @(S1:043A), R0L
- uloží do
R0L
obsah adresy určené složením registruS1
a hodnoty043A
z operandového pole instrukce (H8S nepodporuje)
- uloží do
- relativní adresa
- adresa operandu v paměti určena součtem obsahu PC a offsetu, uloženém v operandovém poli instrukce nebo v některém registru
- např.
BCS 0005
- provede skok na adresu
PC
+5
(je-li splněna podmínka C = 1)
- provede skok na adresu
Little a Big Endian
- data delší než 1 byte mohou být do paměti ukádána v pořadí
- LSB ... MSB (= Little Endian)
- MSB ... LSB (= Big Endian)
- Intel IA-32 je LE
- H8S je BE