Ld
ld nebo LD je instrukce procesoru Z80. Název instrukce je odvozen od anglického slova load(Wikislovník). 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ů. 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.
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. Instrukce ld a MVI trvají stejný počet T-cyklů.

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. 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ý 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.

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.

Odpovídajícími instrukcemi v instrukční sadě procesoru Intel 8080 jsou instrukce MOV. Instrukce ld je o jeden T-cyklus rychlejší, než instrukce MOV.

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ů. 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. 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í.

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ů. To, že hodnota neukládá do registru, ale na adresu v paměti registrem určenou, je naznačeno kulatýmizávorkami.

Odpovídající instrukcí v instrukční sadě procesoru Intel 8080 je instrukce MVI.

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ů. 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.

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.

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ů. 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ů. 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.

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ů. 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).

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ů. 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.

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.

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ů. 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. Odpovídajícími instrukcemi v instrukční sadě procesoru Intel 8080 jsou instrukce LXI.

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ů. 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.

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.

Instrukce ke svému vykonání potřebuje 6 M-cyklů a doba jejího vykonání trvá 20 T-cyklů. 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ů. 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).

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ů. 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.

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ů.

Odpovídající instrukcí v instrukční sadě procesoru Intel 8080 je instrukce SPHL.

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ů. 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.

Umístění instrukcí ld v souboru instrukcí

Reference

Literatura

Související články 
 ldi
 ldd
 ldir
 lddr

Externí odkazy 
 Naučte se assembler 8080, Z80, 6502 - učebnice assembleru osmibitových procesorů 8080, Z80 a 6502

Z80