rlc
rlc nebo RLC je instrukce procesorů Intel 8080 a Z80.
Instrukce procesoru Intel 8080
[editovat | editovat zdroj]Instrukce RLC je odpovídající instrukci rlca, resp. instrukci rlc a procesoru Z80.[1]
Instrukce procesoru Z80
[editovat | editovat zdroj]7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
C | ← | ← | ← | ← | ← | ← | ← |
Název instrukce je tvořen prvními písmeny významu instrukce Rotate Left Circular.[2] Instrukce provádí přesun (rotaci) bitů ve směru z méně významné pozice na více významnou pozici.[2][3] Bit z nejvíce významné pozice (7) je přesunut na nejméně významnou pozici (0). Kromě toho je hodnota bitu z nejvíce významné pozice zkopírována i do příznaku přenosu.[2][3] Instrukce může pracovat jak s registrem, tak s místem v paměti. V instrukční sadě procesoru Intel 8080 existuje stejnojmenná instrukce RLC ale ta je pouze omezenou varianou instrukce rlc procesoru Z80, protože pracuje pouze s akumulátorem. Odpovídá tak instrukci rlc a a svým instrukčním kódem odpovídá instrukci rlca procesoru Z80.[1]
Rotace hodnoty v registru
[editovat | editovat zdroj]Rotace hodnoty v registru | ||||||
---|---|---|---|---|---|---|
rlc a | rlc b | rlc c | rlc d | rlc e | rlc h | rlc l |
Instrukce slouží k rotaci hodnoty registru. Délka instrukce je dva byty, první byte je prefix CB.
Kód instrukce | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1. byte | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
2. byte | 0 | 0 | 0 | 0 | 0 | registr |
Obecně je možné tuto instrukci zapsat jako rlc r
, kde r je zástupný symbol pro některý z registrů procesoru A, B, C, D, E, H a L. Instrukce ke svému vykonání potřebuje 2 M-cykly a doba jejího vykonání trvá 8 T-cyklů.[4] Registr, se kterým instrukce pracuje, zakódován v nultém až druhém bitu druhého bajtu operačního kódu instrukce. Tato trojice bitů je jednotlivým registrům přiřazena jako:
111 - registr A , 000 - registr B, 001 - registr C, 010 - registr D, 011 - registr E, 100 - registr H, 101 - registr L.[5]
Kombinace bitů označujících registr může nabývat i hodnoty 110, v tomto případě se jedná o instrukci rlc, která ale místo s registrem pracuje s paměťovým místem na adrese HL (viz níže). V instrukční sadě procesoru se nachází instrukce rlca, která provádí stejnou akci jako instrukce rlc a, ale je vykonána rychleji.[2]
Rotace hodnoty v paměti
[editovat | editovat zdroj]Rotace hodnoty v paměti | ||
---|---|---|
rlc (hl) | rlc (ix±N) | (iy±N) |
Instrukce slouží k rotaci hodnoty v paměťovém místě. Adresa v paměti, jejíž obsah je rotován, může být určena buď hodnotou registru HL nebo hodnotou indexového registru IX nebo registru IY a offsetem.
Kód instrukce při adresování registrem HL | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1. byte | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
2. byte | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
V případě, kdy je k adresaci použit registr HL, je délka instrukce dva byty, první byte je prefix CB. Instrukce ke svému vykonání potřebuje 4 M-cykly a doba jejího vykonání trvá 15 T-cyklů.[4]
Kód instrukce při adresování indexovým registrem | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1. byte | 1 | 1 | X | 1 | 1 | 1 | 0 | 1 |
2. byte | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
3. byte | offset | |||||||
4. byte | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
Pokud je k adresaci použit indexový registr, je délka instrukce čtyři byty, první byte je prefix IX (X = 0) nebo prefix IY (X = 1) následovaný prefixem CB a offsetem. Posledním bytem je vlastní instrukce. Instrukce ke svému vykonání potřebuje 6 M-cyklů a doba jejího vykonání trvá 23 T-cyklů.[4]
Umístění instrukcí rlc v souboru instrukcí
[editovat | editovat zdroj]Rozmístění instrukcí rlc v instrukčním souboru procesoru Z80 Instrukce na šedém podkladu jsou nedokumentované instrukce | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
## | .0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | |
0. | rlca | ||||||||||||||||
Po prefixu CB | |||||||||||||||||
0. | rlc b | rlc c | rlc d | rlc e | rlc h | rlc l | rlc (hl) | rlc a | |||||||||
Po prefixu IX a prefixu CB | |||||||||||||||||
0. | rlc (ix±N),b | rlc (ix±N),c | rlc (ix±N),d | rlc (ix±N),e | rlc (ix±N),h | rlc (ix±N),l | rlc (ix±N) | rlc (ix±N),a |
Reference
[editovat | editovat zdroj]- ↑ a b DURDA, Frank. 8080/Z80 Instruction Set [online]. [cit. 2023-03-30]. Dostupné v archivu pořízeném dne 2016-02-11. ((anglicky))
- ↑ a b c d VILÍM, Tomáš. Assembler a ZX Spectrum, 1. díl. Ústí nad Labem: Proxima - Software, 1992.
- ↑ a b NAYLOR, Jeff; ROGERS, Diane. Inside your Spectrum. London: Sunshine Books, 1984. Dostupné online. ISBN 0-946408-35-1. Kapitola Language for Machines. ((anglicky))
- ↑ a b c ZAKS, Rodnay. Programming the Z80. [s.l.]: Sybex, 1981. 624 s. (Third edition). Dostupné online. ISBN 0-89588-094-6. S. 291–347. ((anglicky)) Poznámka: Odkazovaný soubor má desky z jiného vydání knihy, které navíc vyšlo i pod jiným názvem a s jiným ISBN
- ↑ 8ビット CPU Z80命令セット [online]. Rev. 2019-09-15 [cit. 2023-03-30]. Dostupné v archivu pořízeném dne 2023-05-09. ((japonsky))