POT
Adresní mody procesoru
Adresní mody procesoru
1
K.D. - přednášky POT
POT
Adresní mody procesoru
Obecně o adresování • 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í programu, podprogramy), adresování jednoduchých proměnných různé délky a typu, práci s indexovanými proměnnými, práci se strukturami.
• Lze řešit s různým podílem HW ↔ SW. • „Pokročilé“ požadavky: – segmentování programu, – stránkování, – ... .
K.D. - přednášky POT
2
POT
Adresní mody procesoru
Základní typy adres v instrukci 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Implicitní operand Registrový operand Přímý operand Přímá adresa Nepřímá adresa Nepřímá adresa v registru Indexová adresa Bázová adresa Složená (segmentová) adresa Relativní adresa
3
K.D. - přednášky POT
POT
Adresní mody procesoru
Implicitní operand Operand je určen přímo typem instrukce.
Př.:
RTS
Naplní PC obsahem adresy určené SP. PC ani SP není v instrukci explicitně uveden.
K.D. - přednášky POT
4
POT
Adresní mody procesoru
Registrový operand Operand je v registru (registrech), které jsou v instrukci explicitně uvedeny. Př.:
ADD.B
R0H,R0L
Sečte obsah R0L a R0H, výsledek je v R0L. 3E
25
R0 R1
5
K.D. - přednášky POT
POT
Adresní mody procesoru
Přímý operand Operand je přímo uveden v instrukci. Znak # označuje přímý operand. Jeho hodnota je uložena v instrukci.
Př.:
MOV.B
#25,R0L
Uloží do R0L hodnotu 25 . MOV.B # 25 ,R0L R0L
25
K.D. - přednášky POT
R0 R1
6
POT
Adresní mody procesoru
Přímá adresa Operand je uložen v paměti. Jeho adresa je uvedena v instrukci Znak @ znamená, že se jedná o adresu operandu.
Př.:
MOV.B
@043A,R0L
...
Uloží do R0L obsah adresy 043A.
R0L
25
25
...
00043A
R0H
Paměť
7
K.D. - přednášky POT
POT
Adresní mody procesoru
Nepřímá adresa V instrukci je uvedena adresa paměti, kde je uložena adresa operandu. Znaky @@ znamenají, že se jedná o adresu adresy operandu.
Př.:
MOV.B
@@0500,R0L
...
Uloží do R0L obsah adresy 043A. (H8S umí pracovat s tímto typem adres jen omezeně).
25
R0L
25
...
00043A
R0H
...
000500 000501
K.D. - přednášky POT
04 3A
Paměť 8
POT
Adresní mody procesoru
Nepřímá adresa v registru V instrukci je uvedena adresa registru, kde je uložena adresa operandu. Př.:
MOV.B
@R1,R0L
...
Uloží do R0L obsah adresy 043A.
00043A
R0L
04
25 3A
R0 R1
...
25
R0H
Paměť
9
K.D. - přednášky POT
POT
Adresní mody procesoru
Indexová adresa Poloha operandu v paměti je určena součtem adresy uvedené v instrukci a obsahem indexového registru. Př.:
MOV.B
@(043A+ER1),R0L
...
Uloží do R0L obsah adresy 043A + 4. R0H
00043A
00
25 K.D. - přednášky POT
R0L
25 04
ER1
+1 +2 +3 +4 10
POT
Adresní mody procesoru
Bázová adresa Poloha operandu v paměti je určena součtem obsahu registru a offsetu uvedeného v instrukci. Př.:
MOV.B
@(4+ER1),R0L
...
Uloží do R0L obsah adresy 043A + 4. Implementace bázové a indexové adresy může ale nemusí být stejná. R0H
R0L
04
3A
25
00043A
25
ER1
+1 +2 +3 +4 11
K.D. - přednášky POT
POT
Adresní mody procesoru
Indexová a bázová adresa
Index = registr
Adresované položky
Indexová adresa K.D. - přednášky POT
Báze = registr
Index = konstanta
Adresované položky
Rozsah adresování indexem
Báze = konstanta
Rozsah adresování bází
@(043A+ER1),R0L
Rozsah adresování indexem
Rozsah adresování bází
MOV.B
Bázová adresa 12
POT
Adresní mody procesoru
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. Př.:
MOV.B
@(S1:043A),R0L
Uloží do R0L obsah adresy určené složením registru S1 a hodnoty 043A z operandového pole instrukce. Tento typ instrukce (ani registr S1) není v instrukčním souboru procesoru H8S.
...
S1 27
25
R0H
R0L
25
...
27043A
043A
13
K.D. - přednášky POT
POT
Adresní mody procesoru
Relativní adresa Adresa operandu v paměti se určí jako součet obsahu PC a offsetu, uloženého v operandovém poli instrukce nebo v některém registru. Př.:
BCS
0005
Provede se skok na adresu PC + 5 ( je-li splněna podmínka C = 1). Před zvětšením o 5 ukazuje PC na adresu za instrukcí BCS. PC +1 +2 +3 +4 +5 K.D. - přednášky POT
14
POT
Adresní mody procesoru
Little a Big Endian 000000 ...
1A2B3C4D
Data delší než 1 byte mohou být do paměti ukládána v pořadí • LSB ... MSB (= Little Endian), • MSB ... LSB (= Big Endian).
002000 002001 002002 002003
Intel IA-32 je Little Endian. H8S je Big Endian.
000000
MSB 4D 3C 2B 1A
+0 +1 +2 +3
LSB
1A 3
2B 2
3C 1
4D 0
...
1A2B3C4D MSB
002000 002001 002002 002003
1A 2B 3C 4D
+0 +1 +2 +3
LSB
1A 0
2B 1
3C 2
4D 3
15
K.D. - přednášky POT
POT
Adresní mody procesoru
Zarovnání dat (Alignment) (1)
...
WORD
x x a a x x x x
... x0 ... x1 ... a0 ... a1 ... x0 ... x1 ... x0 ... x1
Zarovnané uložení (word alignment)
Nezarovnané uložení
Tato část adresy je pro všechny byty jednoho slova stejná.
x a a a a x x x x x x x
...
0 ... 000
0 ... 00
... x11 ... a00 ... a01 ... a10 ... a11 ... x00 ... x01 ... x10 ... x11 ... x00 ... x01 ... x10
Double Word (DWORD)
Zarovnané uložení (dword alignment)
Nezarovnané uložení
Tato část adresy je pro všechny byty jednoho “double word” stejná.
K.D. - přednášky POT
16
POT
Adresní mody procesoru
Zarovnání dat (Alignment) (2) • Zarovnané a nezarovnané uložení Word: 0100 0010 1111 1010 1111 0110 (42FAF6) 0100 0010 1111 1010 1111 0111 (42FAF7)
Byte 0 Byte 1
Zarovnané uložení
0100 0010 1111 1010 1111 0101 (42FAF5) 0100 0010 1111 1010 1111 0110 (42FAF6)
Byte 0 Byte 1
Nezarovnané uložení
• Zarovnané a nezarovnané uložení Double Word: 0100 0100 0100 0100
0010 0010 0010 0010
1111 1111 1111 1111
1010 1010 1010 1010
1111 1111 1111 1111
0100 0101 0110 0111
(42FAF4) (42FAF5) (42FAF6) (42FAF7)
Byte 0 Byte 1 Byte 2 Byte 3
Zarovnané uložení
0100 0100 0100 0100
0010 0010 0010 0010
1111 1111 1111 1111
1010 1010 1010 1010
1111 1111 1111 1111
0011 0100 0101 0110
(42FAF3) (42FAF4) (42FAF5) (42FAF6)
Byte 0 Byte 1 Byte 2 Byte 3
Nezarovnané uložení
K.D. - přednášky POT
17