Ld

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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. +more 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

Naplnění registru konstantou
ld a,Nld b,Nld c,Nld d,Nld e,Nld h,Nld l,N

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

Kód instrukce
76543210
1. byte00cílový registrcílový registrcílový registr110
2. bytekonstantakonstantakonstantakonstantakonstantakonstantakonstantakonstanta
.

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

Přesun hodnoty mezi dvěma registry
ld a,ald b,ald c,ald d,ald e,ald h,ald l,a
ld a,bld b,bld c,bld d,bld e,bld h,bld l,b
ld a,cld b,cld c,cld d,cld e,cld h,cld l,c
ld a,dld b,dld c,dld d,dld e,dld h,dld l,d
ld a,eld b,eld c,eld d,eld e,eld h,eld l,e
ld a,hld b,hld c,hld d,hld e,hld h,hld l,h
ld a,lld b,lld c,lld d,lld e,lld h,lld l,l

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.

Kód instrukce
76543210
1. byte01cílový registrcílový registrcílový registrzdrojový registrzdrojový registrzdrojový registr
Instrukce ke svému vykonání potřebuje 1 M-cyklus a doba jejího vykonání trvá 4 T-cykly. +more 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.

Zápis konstanty na adresu v paměti

Zápis konstanty na adresu v paměti
ld (hl),N
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. +more [wiki_table=9f87aac0] 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.

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. +more

Přesun hodnoty mezi registrem a polovinou indexového registru
ld lx,ald lx,bld lx,cld lx,dld lx,eld lx,hxld lx,lx
ld a,lxld b,lxld c,lxld d,lxld e,lxld hx,lxld lx,lx
ld hx,ald hx,bld hx,cld hx,dld hx,eld hx,hxld hx,lx
ld a,hxld b,hxld c,hxld d,hxld e,hxld hx,hxld lx,hx
ld ly,ald ly,bld ly,cld ly,dld ly,eld ly,hyld ly,ly
ld a,lyld b,lyld c,lyld d,lyld e,lyld hy,lyld ly,ly
ld hy,ald hy,bld hy,cld hy,dld hy,eld hy,hyld hy,ly
ld a,hyld b,hyld c,hyld d,hyld e,hyld hy,hyld ly,hy
.

Naplnění poloviny indexového registru konstantou
ld lx,Nld hx,N
ld ly,Nld hy,N

Operace s šestnáctibitovými operandy

Naplnění dvojice registrů konstantou

Naplnění dvojice registrů konstantou
ld bc,NNld de,NNld hl,NN
Nastavení ukazatele zásobníkuNastavení ukazatele zásobníkuNastavení ukazatele zásobníku
ld sp,NNld sp,NNld sp,NN

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. +more

Kód instrukce
76543210
1. byte00cílový registrcílový registr0001
2. bytenižší byte konstantynižší byte konstantynižší byte konstantynižší byte konstantynižší byte konstantynižší byte konstantynižší byte konstantynižší byte konstanty
3. bytevyšší byte konstantyvyšší byte konstantyvyšší byte konstantyvyšší byte konstantyvyšší byte konstantyvyšší byte konstantyvyšší byte konstantyvyšší byte 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ů. +more 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.

Přesun hodnoty mezi dvojicí registrů a místem v paměti

Přesun hodnoty mezi dvojicí registrů a paměťovým místem určeným konstantou
ld bc,(NN)ld de,(NN)ld hl,(NN)
ld (NN),bcld (NN),deld (NN),hl
Přesun hodnoty mezi ukazatelem zásobníku a paměťovým místem určeným konstantouPřesun hodnoty mezi ukazatelem zásobníku a paměťovým místem určeným konstantouPřesun hodnoty mezi ukazatelem zásobníku a paměťovým místem určeným konstantou
ld sp,(NN)ld sp,(NN)ld sp,(NN)
ld (NN),spld (NN),spld (NN),sp
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. +more [wiki_table=cef012db].

Kód duplicitní instrukce (pouze pro dvojici registrů HL)
76543210
1. byte0010S010
2. +more bytenižší byte adresynižší byte adresynižší byte adresynižší byte adresynižší byte adresynižší byte adresynižší byte adresynižší byte adresy
3. bytevyšší byte adresyvyšší byte adresyvyšší byte adresyvyšší byte adresyvyšší byte adresyvyšší byte adresyvyšší byte adresyvyšší byte adresy
.

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ů. +more 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 z dvojice registrů do ukazatele zásobníku

Přesun hodnoty z dvojice registrů do ukazatele zásobníku
ld sp,hl
Instrukce slouží k přesunu hodnoty z dvojice registrů do ukazatele zásobníku. Délka instrukce je jeden byte. +more [wiki_table=727e2f5f].

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.

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

Rozmístění instrukcí ld v instrukčním souboru procesoru Z80
##. 0. +more1. 2. 3. 4. 5. 6. 7. 8. 9. A. B. C. D. E. F
0. ld bc,NNld (bc),ald b,Nld a,(bc)ld c,N
1. ld de,NNld (de),ald d,Nld a,(de)ld e,N
2. ld hl,NNld (NN),hlld h,Nld hl,(NN)ld l,N
3. ld sp,NNld (NN),ald (hl),Nld a,(NN)ld a,N
4. ld b,bld b,cld b,dld b,eld b,hld b,lld b,(hl)ld b,ald c,bld c,cld c,dld c,eld c,hld c,lld c,(hl)ld c,a
5. ld d,bld d,cld d,dld d,eld d,hld d,lld d,(hl)ld d,ald e,bld e,cld e,dld e,eld e,hld e,lld e,(hl)ld e,a
6. ld h,bld h,cld h,dld h,eld h,hld h,lld h,(hl)ld h,ald l,bld l,cld l,dld l,eld l,hld l,lld l,(hl)ld l,a
7. ld (hl),bld (hl),cld (hl),dld (hl),eld (hl),hld (hl),lld (hl),ald a,bld a,cld a,dld a,eld a,hld a,lld a,(hl)ld a,a
F. ld sp,hl
Po prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu EDPo prefixu ED
4. ld (NN),bcld i,ald bc,(NN)ld r,a
5. ld (NN),deld a,ild de,(NN)ld a,r
6. ld (NN),hlld hl,(NN)
7. ld (NN),spld sp,(NN)
S indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IXS indexovým registrem IX
2. ld ix,NNld (NN),ixld hx,Nld ix,(NN)ld lx,N
3. ld (ix±N),N
4. ld b,hxld b,lxld b,(ix±N)ld c,hxld c,lxld c,(ix±N)
5. ld d,hxld d,lxld d,(ix±N)ld e,hxld e,lxld e,(ix±N)
6. ld hx,bld hx,cld hx,dld hx,eld hx,hld hx,lld h,(ix±N)ld hx,ald lx,bld lx,cld lx,dld lx,eld lx,hld lx,lld l,(ix±N)ld lx,a
7. ld (ix±N),bld (ix±N),cld (ix±N),dld (ix±N),eld (ix±N),hld (ix±N),lld (ix±N),ald a,hxld a,lxld a,(ix±N)
F. ld sp,ix
.

Reference

Literatura

Související články

ldi * ldd * ldir * lddr

Externí odkazy

[url=https://web. archive. +moreorg/web/20140404022922/http://strojak. cz/]Naučte se assembler 8080, Z80, 6502[/url] - učebnice assembleru osmibitových procesorů 8080, Z80 a 6502.

Kategorie:Z80

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top