Ld
instrukce procesoru Z80 From Wikipedia, the free encyclopedia
Remove ads
ld nebo LD je instrukce procesoru Z80. Název instrukce je odvozen od anglického slova load(Wikislovník).[1] Instrukce může naplnit hodnotu registru konstantou, přenášet hodnotu mezi dvěma registry a přenášet hodnotu mezi registrem a místem v paměti, přičemž může pracovat jak se samostatnými registry tak s dvojicemi registrů.
Varianty instrukce
Různé varianty instrukce ld se liší zápisem. Pokud instrukce pracuje s jednobytovým (osmibitovým) operandem, je tento operand označován jedním písmenem, pokud instrukce pracuje s dvojbytovým (šestnáctibitovým) operandem, je tento operand označován dvěma písmeny, pokud instrukce pracuje s paměťovým místem, jsou v zápisu instukce použita dvě písmena v závorkách. U instrukcí ld, které pracující s číselným operandem, je tento operand označován následujícím způsobem:
- N - osmibitový bezznaménkový operand,
- NN - šestnáctibitový bezznaménkový operand,
- ±N - osmibitový znaménkový operand.
První operand instrukce označuje, kam se má hodnota přenést, druhý operand označuje, odkud se má hodnota přenést.
Operace s osmibitovými operandy
Naplnění registru konstantou
Instrukce slouží k naplnění registru konstantou. Délka instrukce je dva byty, druhý byte obsahuje hodnotu konstanty.
Obecně je možné tuto instrukci zapsat jako ld r,N
, 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á 7 T-cyklů.[2] Registr, se kterým instrukce pracuje, zakódován v třetím až pátém bitu 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.[3]
Kombinace bitů označujících registr může nabývat i hodnoty 110, v tomto případě se jedná o instrukci ld, která ale místo s registrem pracuje s paměťovým místem na adrese HL (viz níže), v případě jiných variant instrukce ld pro osmibitové přenosy může kombinace 110 znamenat, že se o instrukci ld nejedná.
Odpovídajícími instrukcemi v instrukční sadě procesoru Intel 8080 jsou instrukce MVI.[4] Instrukce ld a MVI trvají stejný počet T-cyklů.[5]
Přesun hodnoty mezi dvěma registry
Instrukci je možné obecně zapsat jako ld r1,r2
, kde r1 a r2 jsou zástupné symboly pro některý z registrů procesoru A, B, C, D, E, H a L, a slouží k přesunu hodnoty mezi dvěma registry. Délka instrukce je jeden byte.
Instrukce ke svému vykonání potřebuje 1 M-cyklus a doba jejího vykonání trvá 4 T-cykly.[2] Zdrojový i cílový registr jsou v operačním kódu instrukce kódovány stejným způsobem, jak v případě instrukce pro naplnění registru konstantou ld r,N
. Instrukce používající stejný registr jako zdrojový i cílový nedělají žádnou smysluplnou akci, k jejich zařazení do instrukčního souboru vedly hardwarové důvody.[1]
Počítač Sprinter využívá ve svém hardwaru těchto „nic nedělajících“ instrukcí k ovládání hardwarového akcelerátoru.[6]
Odpovídajícími instrukcemi v instrukční sadě procesoru Intel 8080 jsou instrukce MOV.[4] Instrukce ld je o jeden T-cyklus rychlejší, než instrukce MOV.[5]
Přesun hodnoty z/do speciálního registru
Hodnoty z/do registru I a registru R lze předášet pouze do/z registru A. Délka instrukce k přenosu mezi registrem A a speciálním registrem je dva byty, první byte je prefix ED.
Instrukce ke svému vykonání potřebuje 2 M-cykly a doba jejího vykonání trvá 9 T-cyklů.[2] Zdrojový a cílový registr jsou v instrukci kódovány pomocí dvou bitů, kdy bit S určuje směr přenosu (0 - z registru A, 1 - do registru A) a bit R určuje, se kterým registrem bude instrukce pracovat (0 - registr I, 1 - registr R). Instrukce které přenášejí obsah speciálních registrů do registru A navíc jako jediné dvě instrukce ld nastavují příznaky.[1] Po vykonání těchto dvou instrukcí je do příznaku P/V je přenesen stav klopného obvodu IFF, který určuje, zda je povolené či zakázané přerušení.[1]
Zápis konstanty na adresu v paměti
Instrukce slouží k uložení uložení konstanty na určenou adresu v paměti. Adresa, na kterou se konstanta uloží je určena obsahem registru HL.
Instrukce ke svému vykonání potřebuje 3 M-cykly a doba jejího vykonání trvá 10 T-cyklů.[2] To, že hodnota neukládá do registru, ale na adresu v paměti registrem určenou, je naznačeno kulatýmizávorkami.[1]
Odpovídající instrukcí v instrukční sadě procesoru Intel 8080 je instrukce MVI.[4]
Zápis konstanty na adresu v paměti určenou indexovým registrem
Instrukce slouží k uložení uložení konstanty na určenou adresu v paměti. Adresa, na kterou se konstanta uloží je určena obsahem registru IX nebo registru IY a offsetem.
Instrukce ke svému vykonání potřebuje 5 M-cyklů a doba jejího vykonání trvá 19 T-cyklů.[2] Bit X určuje, zda bude instrukce pracovat s registrem IX (X = 0, první byte je pak prefix IX) nebo registrem IY (X = 1, první byte je pak prefix IY).
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 nejsou.[4]
Přesun hodnoty mezi registrem a místem v paměti
Adresa v paměti určená hodnotou registru
Instrukci je možné obecně zapsat jako ld (r1),r2
, resp. ld r2,(r1)
, kde r1 je zástupný symbol pro některou z dvojic registrů procesoru BC, DE a HL a r2 je zástupný symbol pro některý z registrů procesoru A, B, C, D, E, H a L, a slouží k přesunu hodnoty mezi dvěma registry. Délka instrukce je jeden byte.
Není možné přenášet hodnotu mezi libovolným registrem a paměťovým místem pomocí adresovaného pomocí kterékoliv dvojice registrů. Obsah libovolného registru lze přenášet pouze pokud je pro adresi použita dvojice registrů HL, je-li k adresaci použit jiná dvojice registrů, je možné přenášet pouze obsah registru A.[1]
Instrukce používající k adresaci paměti registr HL ke svému vykonání potřebuje 2 M-cykly a doba jejího vykonání trvá 7 T-cyklů.[2] Zdrojový, resp. cílový registr je v operačním kódu instrukce kódován stejným způsobem, jako v případě instrukce pro naplnění registru konstantou ld r,N
.
Instrukce používající k adresaci paměti registr BC nebo DE ke svému vykonání potřebuje také 2 M-cykly a doba jejího vykonání trvá 7 T-cyklů.[2] Zdrojový, resp. cílový registr je v instrukci kódovány pomocí bitu R (0 - registr BC, 1 - registr DE) a bit S určuje směr přenosu (0 - z registru do paměti, 1 - z paměti do registru).
Odpovídající instrukcemi v instrukční sadě procesoru Intel 8080 je instrukce MOV v případě instrukcí využívající k adresování paměti registr HL a instrukce LDAX a STAX v případě instrukcí využívající k adresování paměti registr BC nebo DE.[4]
Adresa v paměti určená konstantou
Instrukce slouží k přesunu hodnoty mezi registrem A a paměťovým místem určeným konstantou.
Instrukce ke svému vykonání potřebuje 4 M-cykly a doba jejího vykonání trvá 13 T-cyklů.[2] Směr přenosu je určen bitem S (0 - z registru do paměti, 1 - z paměti do registru).
Odpovídajícími instrukcemi v instrukční sadě procesoru Intel 8080 jsou instrukce LDA (odpovídá instrukci ld a,(NN)
) a STA (odpovídá instrukci ld (NN),a
).[4]
Adresa v paměti určená hodnotou indexového registru
Instrukce slouží k přesunu hodnoty mezi některým registrem a paměťovým místem určeným hodnotou indexového registru a offsetem.
Instrukce ke svému vykonání potřebuje 5 M-cyklů a doba jejího vykonání trvá 19 T-cyklů.[2] Bit X určuje, zda bude instrukce pracovat s registrem IX (X = 0, první byte je pak prefix IX) nebo registrem IY (X = 1, první byte je pak prefix IY).
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 nejsou.[4]
Operace s polovinami indexových registrů
Instrukce pro přesun hodnoty mezi registrem a polovinou indexového registru nejsou značeny jednotně, překladač assembleru Prometheus označuje poloviny indexových registrů jako hx, lx, hy a ly, překladač assembleru MRS je označuje jako xh, xl, yh a yl, některé překladače assembleru, např. Gens s instrukcemi používající poloviny indexových registrů neumí pracovat vůbec.[1]
Operace s šestnáctibitovými operandy
Naplnění dvojice registrů konstantou
Instrukce slouží k naplnění dvojice registrů nebo ukazatele zásobníku konstantou. Délka instrukce je tři byty, druhý a třetí byte obsahují hodnotu konstanty.
Obecně je možné tuto instrukci zapsat jako ld rr,NN
, kde rr je zástupný symbol pro některou z dvojic registrů procesoru BC, DE, HL, nebo ukazatel zásobníku SP. Instrukce ke svému vykonání potřebuje 3 M-cykly a doba jejího vykonání trvá 10 T-cyklů.[2] Registr, se kterým instrukce pracuje, zakódován ve čtvrtém a pátém bitu operačního kódu instrukce. Tato dvojice bitů je jednotlivým registrům přiřazena jako:
00 - dvojice registrů BC, 01 - dvojice registrů DE, 10 - dvojice registrů HL, 11 - ukazatel na zásobník SP.[3] Odpovídajícími instrukcemi v instrukční sadě procesoru Intel 8080 jsou instrukce LXI.[4]
Naplnění indexového registru konstantou
Instrukce slouží k naplnění indexového registru konstantou. Délka instrukce je čtyři byty, třetí a čtvrtý byte obsahují hodnotu konstanty.
Instrukce ke svému vykonání potřebuje 4 M-cyklů a doba jejího vykonání trvá 14 T-cyklů.[2] Bit X určuje, zda bude instrukce pracovat s registrem IX (X = 0, první byte je pak prefix IX) nebo registrem IY (X = 1, první byte je pak prefix IY).
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 nejsou.[4]
Přesun hodnoty mezi dvojicí registrů a místem v paměti
Instrukce slouží k přesunu hodnoty mezi dvojicí registrů nebo ukazatelem na zásobník a paměťovým místem určeným konstantou. Instrukce ld hl,(NN)
a ld (NN),hl
jsou v instrukčním souboru procesoru z hardwarových důvodů dvakrát.[1]
Instrukce ke svému vykonání potřebuje 6 M-cyklů a doba jejího vykonání trvá 20 T-cyklů.[2] duplicitní instrukce pracující pouze s registrem HL je o něco rychlejší, potřebuje ke svému vykonání pouze 5 M-cyklů a doba jejího vykonání trvá 16 T-cyklů.[2] Směr přenosu je v obou případech určen bitem S (0 - z registru do paměti, 1 - z paměti do registru).
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 existují pouze pro duplicitní instrukce pracující s dvojicí registrů HL a jsou to instrukce LHLD (odpovídá instrukci ld HL,(NN)
) a SHLD (odpovídá instrukci ld (NN),HL
).[4]
Přesun hodnoty mezi indexovým registrem a místem v paměti
Instrukce slouží k přesunu hodnoty mezi indexovým registrem a paměťovým místem určeným konstantou.
Instrukce ke svému vykonání potřebuje 6 M-cyklů a doba jejího vykonání trvá 20 T-cyklů.[2] Směr přenosu je v obou případech určen bitem S (0 - z registru do paměti, 1 - z paměti do registru). Bit X určuje, zda bude instrukce pracovat s registrem IX (X = 0, první byte je pak prefix IX) nebo registrem IY (X = 1, první byte je pak prefix IY).
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 nejsou.[4]
Přesun hodnoty z dvojice registrů do ukazatele zásobníku
Instrukce slouží k přesunu hodnoty z dvojice registrů do ukazatele zásobníku. Délka instrukce je jeden byte.
Instrukce ke svému vykonání potřebuje 1 M-cyklus a doba jejího vykonání trvá 6 T-cyklů.[2]
Odpovídající instrukcí v instrukční sadě procesoru Intel 8080 je instrukce SPHL.[4]
Přesun hodnoty z indexového registru do ukazatele zásobníku
Instrukce slouží k přesunu hodnoty z indexového registru do ukazatele zásobníku. Délka instrukce je dva byty.
Instrukce ke svému vykonání potřebuje 2 M-cykly a doba jejího vykonání trvá 10 T-cyklů.[2] Bit X určuje, zda bude instrukce pracovat s registrem IX (X = 0, první byte je pak prefix IX) nebo registrem IY (X = 1, první byte je pak prefix IY).
Odpovídající instrukce v instrukční sadě procesoru Intel 8080 nejsou.[4]
Remove ads
Umístění instrukcí ld v souboru instrukcí
Remove ads
Reference
Literatura
Související články
Externí odkazy
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads