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

Další informace Naplnění registru konstantou ...

Instrukce slouží k naplnění registru konstantou. Délka instrukce je dva byty, druhý byte obsahuje hodnotu konstanty.

Další informace Kód instrukce ...

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

Další informace 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.

Další informace Kód instrukce ...

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
Další informace Speciální registry ...

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.

Další informace Kód instrukce ...

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

Další informace 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.

Další informace Kód instrukce ...

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
Další informace 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.

Další informace Kód instrukce ...

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
Další informace Přesun hodnoty mezi registrem a paměťovým místem určeným hodnotou dvojice registrů ...

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.

Další informace Kód instrukcepro přesun z registru do paměti při adresování registrem HL, Kód instrukcepro přesun z paměti do registru při adresování registrem HL ...

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
Další informace Přesun hodnoty mezi registrem a paměťovým místem určeným konstantou ...

Instrukce slouží k přesunu hodnoty mezi registrem A a paměťovým místem určeným konstantou.

Další informace Kód instrukce ...

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
Další informace Přesun hodnoty mezi registrem a paměťovým místem určeným 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.

Další informace Kód instrukce pro přesun z registru do paměti, Kód instrukce pro přesun z paměti do registru ...

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]

Další informace Přesun hodnoty mezi registrem a polovinou indexového registru ...
Další informace Naplnění poloviny indexového registru konstantou ...

Operace s šestnáctibitovými operandy

Naplnění dvojice registrů konstantou

Další informace Naplnění dvojice registrů konstantou, Nastavení ukazatele zásobníku ...

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.

Další informace Kód instrukce ...

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
Další informace 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.

Další informace Kód instrukce ...

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

Další informace Přesun hodnoty mezi dvojicí registrů a paměťovým místem určeným konstantou, Přesun hodnoty mezi ukazatelem zásobníku a paměťovým místem určeným konstantou ...

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]

Další informace Kód instrukce ...
Další informace Kód duplicitní instrukce (pouze pro dvojici registrů HL) ...

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
Další informace Přesun hodnoty mezi indexovým registrem a paměťovým místem určeným konstantou ...

Instrukce slouží k přesunu hodnoty mezi indexovým registrem a paměťovým místem určeným konstantou.

Další informace Kód instrukce ...

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

Další informace 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.

Další informace Kód instrukce ...

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
Další informace 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.

Další informace Kód instrukce ...

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í

Další informace Rozmístění instrukcí v instrukčním souboru procesoru Z80, ## ...
Remove ads

Reference

Literatura

Související články

Externí odkazy

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads