jr
JR nebo jr je instrukce procesorů Z80. Instrukce provádí relativní skok (relative jump) na adresu v rozsahu -126 až +129 bytů od umístění instrukce.[1] Cíl skoku se obvykle uvádí formou návěstí. Instrukce existuje i ve variantách provádějící skok při splnění podmínky na základě stavu registru příznaků. Instrukce je základním prostředkem pro vytváření cyklů (smyček).
Reálně instrukce zadané číslo se znaménkovým bitem přičítá k registru PC, tedy čítači instrukcí. Čítač ukazuje na instrukci následující po dvoubajtové instrukci jr, proto je číselný rozsah -128 až +127 o dva bajty posunutý.
Nepodmíněný skok
[editovat | editovat zdroj]Nepodmíněný skok |
---|
jr N |
Kód instrukce | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1. byte | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
2. byte | konstanta |
Obecně lze instrukci zapsat jako jr N
. Délka instrukce je dva byty, druhý byte obsahuje hodnotu konstanty. Hodnota prvního bytu je 24 desítkově a 18 šestnáctkově. Vykonání instrukce vyžaduje tři M-cykly a trvá dvanáct T-cyklů.[2][3]
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 není.[4]
Podmíněný skok
[editovat | editovat zdroj]Podmíněný skok | |||
---|---|---|---|
jr NZ,N | jr Z,N | jr NC,N | jr C,N |
Instrukce provádí skok pouze v případě splnění podmínky. Obecně lze instrukci zapsat jako jr p, N
, kde p je zástupný symbol pro testovaný příznak. Na rozdíl od instrukcí jp, kde jako podmínku lze použít všechny čtyři příznaky, u instrukcí jr lze testovat pouze příznaky příznak přenosu C a příznak nuly Z.[1]
Kód instrukce | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1. byte | 0 | 0 | 1 | příznak | 0 | 0 | 0 | |
2. byte | konstanta |
Délka instrukce je dva byty. V prvním bytu je zákodována podmínka, při jejíž splnění se skok provede, druhý byte obsahuje hodnotu konstanty. Vykonání instrukce vyžaduje tři M-cykly a trvá dvanáct T-cyklů v případě splnění podmínky a provedení skoku a dva M-cykly a trvá sedm T-cyklů v případě nesplnění podmínky a neprovedení skoku.[2][3]
Příznak, který je před případným provedením skoku testován, je zakódován ve třetím a čtvrtém bitu operačního kódu instrukce. Tato dvojice je jednotlivým podmínkám přiřazena jako 00 - NZ, 01 - Z, 10 - NC, 11 - C.[2]
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 není.[4]
Umístění instrukcí jr v souboru instrukcí
[editovat | editovat zdroj]Rozmístění instrukcí jr v instrukčním souboru procesoru Z80 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
## | .0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | |
1. | jr N | ||||||||||||||||
2. | jr NZ,N | jr Z,N | |||||||||||||||
3. | jr NC,N | jr C,N |
djnz
[editovat | editovat zdroj]Instrukce djnz N (decrement jump non zero, „sniž, skok pokud není nula“) provádí stejnou činnost jako posloupnost instrukcí dec b
a jr nz, N
, tedy sníží o jednu hodnotu registru b a opakuje skok, dokud není b rovno nule. Používá se pro smyčky s počtem opakování určeným registrem b (max. 256), jeho výhodou je, že je kratší a rychlejší (úspora 1 byte a 3 T-cykly).
Reference
[editovat | editovat zdroj]- ↑ a b VILÍM, Tomáš. Assembler a ZX Spectrum, 1. díl. Ústí nad Labem: Proxima - Software, 1992. Dostupné online. S. 29–30.
- ↑ a b c ZAKS, Rodnay. Programming the Z80. [s.l.]: Sybex, 1981. 624 s. (Third edition). Dostupné online. ISBN 0-89588-094-6. S. 424. ((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
- ↑ a b Rev. 2019-09-15 [cit. 2023-04-06]. Dostupné v archivu pořízeném dne 2023-05-09. ((japonsky))
- ↑ a b DURDA, Frank. 8080/Z80 Instruction Set [online]. [cit. 2023-04-06]. Kapitola Special Accumulator and Flag Instructions. Dostupné v archivu pořízeném dne 2016-02-11. ((anglicky))
Literatura
[editovat | editovat zdroj]- Príručka strojového kódu pre ZX Spectrum. [s.l.]: Ultrasoft, 1993.