Z80: Porovnání verzí

Smazaný obsah Přidaný obsah
Přidán seznam instrukcí procesoru, odkaz na online vývojové prostředí a odkazy na porovnání instrkcí procesoru Z80 a 8080
Řádek 223:
 
V originálním procesoru Z80 nejsou dostupné několikanásobné instrukce. Rozdílné velikosti a varianty sčítání, posunu a rotace mají někdy rozdílné účinky na příznaky, a to proto, že z procesoru 8080 byly zkopírovány příznaky ovlivňující vlastnosti. Instrukce LOAD neovlivňuje příznaky (s výjimkou LOAD registru I a R, které jsou pro zvláštní účely). Instrukce index registru jsou užitečné pro snížení délky kódu a zatímco některé nejsou o mnoho rychlejší než ekvivalentní sekvence jednodušších operací, nepřímo šetří čas pro vykonání instrukce tím, že snižuje potřebu uložit a obnovit registry. O deset let mladší design [[Z180]] si mohl ze začátku dovolit více "čipového prostoru", který umožňuje o něco účinnější implementaci (mimo jiné používá širší [[Aritmeticko-logická jednotka|ALU]]). Podobné věci mohou být řečeny o [[Z800]], [[Z280]] a [[Z380]]. Nicméně až roku 2001, když byl vydán procesor [[eZ80]] umožňující plné [[Pipelining|zřetězení instrukcí]] (neboli [[Pipelining]]), se jim tyto instrukce konečně přiblížily svou efektivitou v cyklech jak jen to bylo technicky možné, to jest vzhledem ke kódování v Z80 kombinovaném se schopností realizovat 8bitové čtení nebo zápis v každém hodinovém cyklu. Stejně tak instrukce pro 16bitové sčítání nejsou v originálním procesoru Z80 příliš rychlé (11 hodinových cyklů). Nicméně, jsou asi dvakrát rychlejší, než když se vykonávají ty samé výpočty pomocí 8bitových operací. A stejně tak důležité je, že snižují množství operací s registry.
 
==== Seznam instrukcí ====
Některé instrukce vyžadují, aby byly následovány číselnými operandy. Typ vyžadovaného operandu je označen následujícím způsobem:
* N - instrukce je následována bezznaménkovým osmibitovým operandem,
* NN - instrukce je následována bezznaménkovým šestnáctibitovým operandem,
* ±N - instrukce je následována znaménkovým osmibitovým operandem.
 
Některé instrukce se z konstručních důvodů nacházejí v instrukční sadě několikrát, např. instrukce ''ld hl,(NN)'' a ''ld (NN),hl'', a jejich jednotlivé varianty se liší způsobem interní realizace a dobou jejich vykonání.<ref name="Assember a ZX Spectrum, 1">{{Citace monografie
| příjmení = Vilím
| jméno = Tomáš
| odkaz na autora = Tomáš Vilím
| titul = Assembler a ZX Spectrum, 1. díl
| odkaz na titul = Assembler a ZX Spectrum
| vydavatel = [[Proxima - Software]]
| místo = Ústí nad Labem
| rok = 1992
| isbn =
}}</ref> Ze stejných důvodů se v instrukční sadě nacházejí také instrukce, které nedělají žádnou smyslupnou akci, např. instrukce ''ld a,a''.<ref>[http://www.z80.info/decoding.htm Decoding Z80 Opcodes] na z80.info</ref> Počítač [[Sprinter (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.<ref>{{Citace periodika
| příjmení =
| jméno =
| autor = +Gama
| odkaz na autora =
| spoluautoři =
| titul = Ruské plečky
| periodikum = ZX Magazín
| odkaz na periodikum = ZX Magazín
| rok = 1999
| měsíc =
| ročník =
| číslo = 3-4
| strany = 24 - 27
| url =
| issn =
}}</ref>
 
{| class="wikitable"
! desítkově !! šestnáctkově !! základní instrukce !! instrukce po prefixu CB !! instrukce po prefixu ED
|-
| 0 || 0 || nop || rlc b ||
|-
| 1 || 1 || ld bc,NN || rlc d ||
|-
| 2 || 2 || ld (bc),a || rlc e ||
|-
| 3 || 3 || inc bc || rlc h ||
|-
| 4 || 4 || inc b || rlc l ||
|-
| 5 || 5 || dec b || rlc (hl) ||
|-
| 6 || 6 || ld b,N || rlc a ||
|-
| 7 || 7 || rlca || rlc a ||
|-
| 8 || 8 || ex af,af' || rrc b ||
|-
| 9 || 9 || add hl,bc || rrc c ||
|-
| 10 || 0A || ld a,(bc) || rrc d ||
|-
| 11 || 0B || dec bc || rrc e ||
|-
| 12 || 0C || inc c || rrc h ||
|-
| 13 || 0D || dec c || rrc l ||
|-
| 14 || 0E || ld c,N || rrc (hl) ||
|-
| 15 || 0F || rrca || rrc a ||
|-
| 16 || 10 || djnz ±N || rl b ||
|-
| 17 || 11 || ld de,NN || rl c ||
|-
| 18 || 12 || ld (de),a || rl d ||
|-
| 19 || 13 || inc de || rl e ||
|-
| 20 || 14 || inc d || rl h ||
|-
| 21 || 15 || dec d || rl l ||
|-
| 22 || 16 || ld d,N || rl (hl) ||
|-
| 23 || 17 || rla || rl a ||
|-
| 24 || 18 || jr ±N || rr b ||
|-
| 25 || 19 || add hl,de || rr c ||
|-
| 26 || 1A || ld a,(de) || rr d ||
|-
| 27 || 1B || dec de || rr e ||
|-
| 28 || 1C || inc e || rr h ||
|-
| 29 || 1D || dec e || rr l ||
|-
| 30 || 1E || ld e,N || rr (hl) ||
|-
| 31 || 1F || rra || rr a ||
|-
| 32 || 20 || jr nz,±N || sla b ||
|-
| 33 || 21 || ld hl,NN || sla c ||
|-
| 34 || 22 || ld (NN),hl || sla d ||
|-
| 35 || 23 || inc hl || sla e ||
|-
| 36 || 24 || inc h || sla h ||
|-
| 37 || 25 || dec h || sla l ||
|-
| 38 || 26 || ld h,N || sla (hl) ||
|-
| 39 || 27 || daa || sla a ||
|-
| 40 || 28 || jr z,±N || sra b ||
|-
| 41 || 29 || add hl,hl || sra c ||
|-
| 42 || 2A || ld hl,(NN) || sra d ||
|-
| 43 || 2B || dec hl || sra e ||
|-
| 44 || 2C || inc l || sra h ||
|-
| 45 || 2D || dec l || sra l ||
|-
| 46 || 2E || ld l,N || sra (hl) ||
|-
| 47 || 2F || cpl || sra a ||
|-
| 48 || 30 || jr nc,±N || slia b{{#tag:ref|Instrukce bývá pojmenována také jako ''sll'' a některé kompilátory ji neumějí překládat.<ref name="Assember a ZX Spectrum, 1" />|group="p"|name="slia"}} ||
|-
| 49 || 31 || ld sp,NN || slia c<ref name="slia" group="p" /> ||
|-
| 50 || 32 || ld (NN),a || slia d<ref name="slia" group="p" /> ||
|-
| 51 || 33 || inc sp || slia e<ref name="slia" group="p" /> ||
|-
| 52 || 34 || inc (hl) || slia h<ref name="slia" group="p" /> ||
|-
| 53 || 35 || dec (hl) || slia l<ref name="slia" group="p" /> ||
|-
| 54 || 36 || ld (hl),N || slia (hl)<ref name="slia" group="p" /> ||
|-
| 55 || 37 || scf || slia a<ref name="slia" group="p" /> ||
|-
| 56 || 38 || jr c,±N || srl b ||
|-
| 57 || 39 || add hl,sp || srl c ||
|-
| 58 || 3A || ld a,(NN) || srl d ||
|-
| 59 || 3B || dec sp || srl e ||
|-
| 60 || 3C || inc a || srl h ||
|-
| 61 || 3D || dec a || srl l ||
|-
| 62 || 3E || ld a,N || srl (hl) ||
|-
| 63 || 3F || ccf || srl a ||
|-
| 64 || 40 || ld b,b || bit 0,b || in b,(c)
|-
| 65 || 41 || ld b,c || bit 0,c || out (c),b
|-
| 66 || 42 || ld b,d || bit 0,d || sbc hl,bc
|-
| 67 || 43 || ld b,e || bit 0,e || ld (NN),bc
|-
| 68 || 44 || ld b,h || bit 0,h || neg
|-
| 69 || 45 || ld b,l || bit 0,l || retn
|-
| 70 || 46 || ld b,(hl) || bit 0,(hl) || im 0
|-
| 71 || 47 || ld b,a || bit 1,a || ld i,a
|-
| 72 || 48 || ld c,b || bit 1,b || in c,(c)
|-
| 73 || 49 || ld c,c || bit 1,c || out (c),c
|-
| 74 || 4A || ld c,d || bit 1,d || adc hl,bc
|-
| 75 || 4B || ld c,e || bit 1,e || ld bc,(NN)
|-
| 76 || 4C || ld c,h || bit 1,h ||
|-
| 77 || 4D || ld c,l || bit 1,l || reti
|-
| 78 || 4E || ld c,(hl) || bit 1,(hl) ||
|-
| 79 || 4F || ld c,a || bit 1,a || ld r,a
|-
| 80 || 50 || ld d,b || bit 2,b || in d,(c)
|-
| 81 || 51 || ld d,c || bit 2,c || out (c),d
|-
| 82 || 52 || ld d,d || bit 2,d || sbc hl,de
|-
| 83 || 53 || ld d,e || bit 2,e || ld (NN),de
|-
| 84 || 54 || ld d,h || bit 2,h ||
|-
| 85 || 55 || ld d,l || bit 2,l ||
|-
| 86 || 56 || ld d,(hl) || bit 2,(hl) || im 1
|-
| 87 || 57 || ld d,a || bit 2,a || ld a,i
|-
| 88 || 58 || ld e,b || bit 3,b || in e,(c)
|-
| 89 || 59 || ld e,c || bit 3,c || out (c),e
|-
| 90 || 5A || ld e,d || bit 3,d || adc hl,de
|-
| 91 || 5B || ld e,e || bit 3,e || ld de,(NN)
|-
| 92 || 5C || ld e,h || bit 3,h ||
|-
| 93 || 5D || ld e,l || bit 3,l ||
|-
| 94 || 5E || ld e,(hl) || bit 3,(hl) || im 2
|-
| 95 || 5F || ld e,a || bit 3,a || ld a,r
|-
| 96 || 60 || ld h,b || bit 4,b || in h,(c)
|-
| 97 || 61 || ld h,c || bit 4,c || out (c),h
|-
| 98 || 62 || ld h,d || bit 4,d || sbc hl,hl
|-
| 99 || 63 || ld h,e || bit 4,e || ld (NN),hl
|-
| 100 || 64 || ld h,h || bit 4,h ||
|-
| 101 || 65 || ld h,l || bit 4,l ||
|-
| 102 || 66 || ld h,(hl) || bit 4,(hl) ||
|-
| 103 || 67 || ld h,a || bit 4,a || rrd
|-
| 104 || 68 || ld l,b || bit 5,b || in l,(c)
|-
| 105 || 69 || ld l,c || bit 5,c || out (c),l
|-
| 106 || 6A || ld l,d || bit 5,d || adc hl,hl
|-
| 107 || 6B || ld l,e || bit 5,e || ld hl,(NN)
|-
| 108 || 6C || ld l,h || bit 5,h ||
|-
| 109 || 6D || ld l,l || bit 5,l ||
|-
| 110 || 6E || ld l,(hl) || bit 5,(hl) ||
|-
| 111 || 6F || ld l,a || bit 5,a || rld
|-
| 112 || 70 || ld (hl),b || bit 6,b || in (c)<ref group="p">Instrukce bývá také označována jako ''in f,(c)''</ref>
|-
| 113 || 71 || ld (hl),c || bit 6,c ||
|-
| 114 || 72 || ld (hl),d || bit 6,d || sbc hl,sp
|-
| 115 || 73 || ld (hl),e || bit 6,e || ld (NN),sp
|-
| 116 || 74 || ld (hl),h || bit 6,h ||
|-
| 117 || 75 || ld (hl),l || bit 6,l ||
|-
| 118 || 76 || halt || bit 6,(hl) ||
|-
| 119 || 77 || ld (hl),a || bit 6,a ||
|-
| 120 || 78 || ld a,b || bit 7,b || in a,(c)
|-
| 121 || 79 || ld a,c || bit 7,c || out (c),a
|-
| 122 || 7A || ld a,d || bit 7,d || adc hl,sp
|-
| 123 || 7B || ld a,e || bit 7,e || ld sp,(NN)
|-
| 124 || 7C || ld a,h || bit 7,h ||
|-
| 125 || 7D || ld a,l || bit 7,l ||
|-
| 126 || 7E || ld a,(hl) || bit 7,(hl) ||
|-
| 127 || 7F || ld a,a || bit 7,a ||
|-
| 128 || 80 || add a,b || res 0,b ||
|-
| 129 || 81 || add a,c || res 0,c ||
|-
| 130 || 82 || add a,d || res 0,d ||
|-
| 131 || 83 || add a,e || res 0,e ||
|-
| 132 || 84 || add a,h || res 0,h ||
|-
| 133 || 85 || add a,l || res 0,l ||
|-
| 134 || 86 || add a,(hl) || res 0,(hl) ||
|-
| 135 || 87 || add a,a || res 0,a ||
|-
| 136 || 88 || adc a,b || res 1,b ||
|-
| 137 || 89 || adc a,c || res 1,c ||
|-
| 138 || 8A || adc a,d || res 1,d ||
|-
| 139 || 8B || adc a,e || res 1,e ||
|-
| 140 || 8C || adc a,h || res 1,h ||
|-
| 141 || 8D || adc a,l || res 1,l ||
|-
| 142 || 8E || adc a,(hl) || res 1,(hl) ||
|-
| 143 || 8F || adc a,a || res 1,a ||
|-
| 144 || 90 || sub b || res 2,b ||
|-
| 145 || 91 || sub c || res 2,c ||
|-
| 146 || 92 || sub d || res 2,d ||
|-
| 147 || 93 || sub e || res 2,e ||
|-
| 148 || 94 || sub h || res 2,h ||
|-
| 149 || 95 || sub l || res 2,l ||
|-
| 150 || 96 || sub (hl) || res 2,(hl) ||
|-
| 151 || 97 || sub a || res 2,a ||
|-
| 152 || 98 || sbc a,b || res 3,b ||
|-
| 153 || 99 || sbc a,c || res 3,c ||
|-
| 154 || 9A || sbc a,d || res 3,d ||
|-
| 155 || 9B || sbc a,e || res 3,e ||
|-
| 156 || 9C || sbc a,h || res 3,h ||
|-
| 157 || 9D || sbc a,l || res 3,l ||
|-
| 158 || 9E || sbc a,(hl) || res 3,(hl) ||
|-
| 159 || 9F || sbc a,a || res 3,a ||
|-
| 160 || A0 || and b || res 4,b || ldi
|-
| 161 || A1 || and c || res 4,c || cpi
|-
| 162 || A2 || and d || res 4,d || ini
|-
| 163 || A3 || and e || res 4,e || outi
|-
| 164 || A4 || and h || res 4,h ||
|-
| 165 || A5 || and l || res 4,l ||
|-
| 166 || A6 || and (hl) || res 4,(hl) ||
|-
| 167 || A7 || and a || res 4,a ||
|-
| 168 || A8 || xor b || res 5,b || ldd
|-
| 169 || A9 || xor c || res 5,c || cpd
|-
| 170 || AA || xor d || res 5,d || ind
|-
| 171 || AB || xor e || res 5,e || outd
|-
| 172 || AC || xor h || res 5,h ||
|-
| 173 || AD || xor l || res 5,l ||
|-
| 174 || AE || xor (hl) || res 5,(hl) ||
|-
| 175 || AF || xor a || res 5,a ||
|-
| 176 || B0 || or b || res 6,b || ldir
|-
| 177 || B1 || or c || res 6,c || cpir
|-
| 178 || B2 || or d || res 6,d || inir
|-
| 179 || B3 || or e || res 6,e || otir
|-
| 180 || B4 || or h || res 6,h ||
|-
| 181 || B5 || or l || res 6,l ||
|-
| 182 || B6 || or (hl) || res 6,(hl) ||
|-
| 183 || B7 || or a || res 6,a ||
|-
| 184 || B8 || cp b || res 7,b || lddr
|-
| 185 || B9 || cp c || res 7,c || cpdr
|-
| 186 || BA || cp d || res 7,d || indr
|-
| 187 || BB || cp e || res 7,e || otdr
|-
| 188 || BC || cp h || res 7,h ||
|-
| 189 || BD || cp l || res 7,l ||
|-
| 190 || BE || cp (hl) || res 7,(hl) ||
|-
| 191 || BF || cp a || res 7,a ||
|-
| 192 || C0 || ret nz || set 0,b ||
|-
| 193 || C1 || pop bc || set 0,c ||
|-
| 194 || C2 || jp nz,NN || set 0,d ||
|-
| 195 || C3 || jp NN || set 0,e ||
|-
| 196 || C4 || call nz,NN || set 0,h ||
|-
| 197 || C5 || push bc || set 0,l ||
|-
| 198 || C6 || add a,N || set 0,(hl) ||
|-
| 199 || C7 || rst 0 || set 0,a ||
|-
| 200 || C8 || ret z || set 1,b ||
|-
| 201 || C9 || ret || set 1,c ||
|-
| 202 || CA || jp z,NN || set 1,d ||
|-
| 203 || CB || PREFIX CB || set 1,e ||
|-
| 204 || CC || call z,NN || set 1,h ||
|-
| 205 || CD || call NN || set 1,l ||
|-
| 206 || CE || adc a,N || set 1,(hl) ||
|-
| 207 || CF || rst 8 || set 1,a ||
|-
| 208 || D0 || ret nc || set 2,b ||
|-
| 209 || D1 || pop de || set 2,c ||
|-
| 210 || D2 || jp nc,NN || set 2,d ||
|-
| 211 || D3 || out (N),a || set 2,e ||
|-
| 212 || D4 || call nc,NN || set 2,h ||
|-
| 213 || D5 || push de || set 2,l ||
|-
| 214 || D6 || sub N || set 2,(hl) ||
|-
| 215 || D7 || rst 16 || set 2,a ||
|-
| 216 || D8 || ret c || set 3,b ||
|-
| 217 || D9 || exx || set 3,c ||
|-
| 218 || DA || jp c,NN || set 3,d ||
|-
| 219 || DB || in a,(N) || set 3,e ||
|-
| 220 || DC || call c,NN || set 3,h ||
|-
| 221 || DD || PREFIX IX || set 3,l ||
|-
| 222 || DE || sbc a,N || set 3,(hl) ||
|-
| 223 || DF || rst 24 || set 3,a ||
|-
| 224 || E0 || ret po || set 4,b ||
|-
| 225 || E1 || pop hl || set 4,c ||
|-
| 226 || E2 || jp po,NN || set 4,d ||
|-
| 227 || E3 || ex (sp),hl || set 4,e ||
|-
| 228 || E4 || call po,NN || set 4,h ||
|-
| 229 || E5 || push hl || set 4,l ||
|-
| 230 || E6 || and N || set 4,(hl) ||
|-
| 231 || E7 || rst 32 || set 4,a ||
|-
| 232 || E8 || ret pe || set 5,b ||
|-
| 233 || E9 || jp (hl) || set 5,c ||
|-
| 234 || EA || jp pe,NN || set 5,d ||
|-
| 235 || EB || ex de,hl || set 5,e ||
|-
| 236 || EC || call pe,NN || set 5,h ||
|-
| 237 || ED || PREFIX ED || set 5,l ||
|-
| 238 || EE || xor N || set 5,(hl) ||
|-
| 239 || EF || rst 40 || set 5,a ||
|-
| 240 || F0 || ret p || set 6,b ||
|-
| 241 || F1 || pop af || set 6,c ||
|-
| 242 || F2 || jp p,NN || set 6,d ||
|-
| 243 || F3 || di || set 6,e ||
|-
| 244 || F4 || call p,NN || set 6,h ||
|-
| 245 || F5 || push af || set 6,l ||
|-
| 246 || F6 || or N || set 6,(hl) ||
|-
| 247 || F7 || rst 48 || set 6,a ||
|-
| 248 || F8 || ret m || set 7,b ||
|-
| 249 || F9 || ld sp,hl || set 7,c ||
|-
| 250 || FA || jp m,NN || set 7,d ||
|-
| 251 || FB || ei || set 7,e ||
|-
| 252 || FC || call m,NN || set 7,h ||
|-
| 253 || FD || PREFIX IY || set 7,l ||
|-
| 254 || FE || cp N || set 7,(hl) ||
|-
| 255 || FF || rst 56 || set 7,a ||
|}
 
== Kompilátory ==
Protože procesor Z80 je použit v mnoha typech počítačů, pro každý typ existuje kompilátor. Pro počítače Sinclair ZX Spectrum existují kompilátor [[Gens]] a [[Prometheus (program)|Prometheus]]. Pro operační systém [[Linux]] a pro DOS existuje kompilátor [[Z80-ASM]], který kromě podpory samotného procesoru s 64 KiB paměti podporuje i obvod [[Z80 CTC]], rozšířené stránkování paměti a prioritní systém přerušení procesoru Z80.<ref>[http://wwwhomes.uni-bielefeld.de/achim/z80-asm.html Z80-ASM] na uni-bielefeld.de</ref> Existuje také online vývojové prostředí a kompilátor ORG.<ref>[http://clrhome.org/asm/ ORG] na clrhome.org</ref>
 
== Poznámky ==
<references group="p" />
 
== Reference ==
Řádek 235 ⟶ 788:
* Thomas Scherrer Z80-Family Official Support Page: http://www.z80.info/
* Počítače používající procesory Z80 (Michael Kromeke): [http://www.zianet.com/kromeke/pastcomp/misc/cpu_z80.htm http://www.zianet.com/…]
* [http://clrhome.org/table/ Z80 instruction set] na clrhome.org - tabulkový přehled instrukcí procesoru Z80, včetně jejich popisu, počtu strojových cyklů nutných k jejich vykonání a vlivu na příznakové bity
* [http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html 8080/Z80 Instruction Set] na lonestar.org - tabulkový přehled odpovídajících si instrukcí procesorů 8080 a Z80
* vývojové prostředí [http://clrhome.org/asm/ ORG] na clrhome.org - online vývojové prostředí pro procesor Z80, umožňuje i export do souboru .tap pro emulátory ZX Spectra
 
 
{{Procesory Zilog}}