Z80: Porovnání verzí

Smazaný obsah Přidaný obsah
rozšíření - překlad z AJ
Řádek 68:
 
Interupt vector registr, I, se používá u Z80 konkrétně pro přerušení ''mode 2'' (vybraný IM 2 instrukcí). Dodává nejvyšší byt ze základních adres pro 128-vstupní tabulku obsluhy adres, které jsou vybírány přes ukazatel zaslání CPU během vědomého přerušení cyklu. Nejnižší byt ze základních adres je napevno nastaven na nulu. Ukazatel identifikuje zejména periferní čip a/nebo periferní funkci nebo akci, kde jsou čipy normálně spojeny v takzvaném [[Sériové zapojení|sériovém zapojení]] pro prioritní řešení. Stejně jako refresh registr, tento registr je někdy použit také kreativně, u přerušení v ''mode 0'' a ''1'' může být použit jednoduše jako další 8bitový data registr.
 
===Z80 - jazyk symbolických adres===
 
====Datapoint 2200 a Intel 8008====
 
První [[jazyk symbolických adres]] (dále jen [[assembler]]) pro Intel 8008 byl založen na velmi jednoduché (ale systematické) syntaxi, zděděné od [[Datapoint 2200|Datapointu 2200]]. Pro původní čip Intel 8008 byla později tato originální syntaxe změněna na novou, poněkud tradičnější formu assembleru. V tu samou dobu byl assembler rozšířen, aby se přizpůsobil přidání nových adresních možností ve více pokročilém čipu Intel 8080 (Intel 8008 a 8080 sdíleli jazykovou podskupinu bez toho aby byly binárně kompatibilní, nicméně, Intel 8008 byl binárně kompatibilní s Datapointem 2200).
 
V tomto procesu, symbolický název (neboli mnemonická zkratka) L, pro LOAD, byla nahrazena různými zkratkami slov LOAD, STORE a MOVE, a ty byli smíchány s ostatními symbolickými písmeny. Symbolický název písmene M, pro paměť, byl odstraněn ze symbolických instrukcí, aby se stal syntakticky samostatným operandem, zatímco [[Registr procesoru|registry]] a kombinace registrů byli velmi rozporuplně označeny. Buď zkrácením operandu (MVI D, LXI H a podobně) nebo v rámci vlastních symbolických instrukcí (LDA, LHLD a podobně) nebo obojím najednou (LDAX B, STAX D a podobně).
 
{| class="wikitable"
|-
! Datapoint 2200 & i8008
! i8080
! Z80
! i8086/i8088
|-
! before ~1973
! ~1974
! 1976
! 1978
|-
| <code>LBC</code>
| <code>MOV B,C</code>
| <code>LD B,C</code>
| <code>MOV BL,CL</code>
|-
| <code>--</code>
| <code>LDAX B</code>
| <code>LD A,(BC)</code>
| <code>MOV AL,[BX]</code>
|-
| <code>LAM</code>
| <code>MOV A,M</code>
| <code>LD A,(HL)</code>
| <code>MOV AL,[BP]</code>
|-
| <code>LBM</code>
| <code>MOV B,M</code>
| <code>LD B,(HL)</code>
| <code>MOV BL,[BP]</code>
|-
| <code>--</code>
| <code>STAX D</code>
| <code>LD (DE),A</code>
| <code>--</code>
|-
| <code>LMA</code>
| <code>MOV M,A</code>
| <code>LD (HL),A</code>
| <code>MOV [BP],AL</code>
|-
| <code>LMC</code>
| <code>MOV M,C</code>
| <code>LD (HL),C</code>
| <code>MOV [BP],CL</code>
|-
| <code>LDI 56</code>
| <code>MVI D,56</code>
| <code>LD D,56</code>
| <code>MOV DL,56</code>
|-
| <code>LMI 56</code>
| <code>MVI M,56</code>
| <code>LD (HL),56</code>
| <code>MOV byte ptr [BP],56</code>
|-
| <code>--</code>
| <code>LDA 1234</code>
| <code>LD A,(1234)</code>
| <code>MOV AL,[1234]</code>
|-
| <code>--</code>
| <code>STA 1234</code>
| <code>LD (1234),A</code>
| <code>MOV [1234],AL</code>
|-
| <code>--</code>
| <code>--</code>
| <code>LD B,(IX+56)</code>
| <code>MOV BL,[SI+56]</code>
|-
| <code>--</code>
| <code>--</code>
| <code>LD (IX+56),C</code>
| <code>MOV [SI+56],CL</code>
|-
| <code>--</code>
| <code>--</code>
| <code>LD (IY+56),78</code>
| <code>MOV byte ptr [DI+56],78</code>
|-
| <code>--</code>
| <code>LXI B,1234</code>
| <code>LD BC,1234</code>
| <code>MOV BX,1234</code>
|-
| <code>--</code>
| <code>LXI H,1234</code>
| <code>LD HL,1234</code>
| <code>MOV BP,1234</code>
|-
| <code>--</code>
| <code>SHLD 1234</code>
| <code>LD (1234),HL</code>
| <code>MOV [1234],BP</code>
|-
| <code>--</code>
| <code>LHLD 1234</code>
| <code>LD HL,(1234)</code>
| <code>MOV BP,[1234]</code>
|-
| <code>--</code>
| <code>--</code>
| <code>LD BC,(1234)</code>
| <code>MOV BX,[1234]</code>
|-
| <code>--</code>
| <code>--</code>
| <code>LD IX,(1234)</code>
| <code>MOV SI,[1234]</code>
|}''Ukázka čtyř syntaxí, používajících vzorky ekvivalentní nebo (pro 8086) velmi podobné LOAD a&nbsp;STORE instrukcím.''
 
====Nová syntaxe====
 
Protože [[Intel]] prohlašoval, že vlastní práva na symbolické názvy, musela být v&nbsp;assembleru vyvinuta nová [[Syntax|syntaxe]].
Tentokrát byl použit mnohem systematičtější přístup:
* Všechny registry, včetně párových registrů jsou explicitně označeny jejich celými jmény.
* Závorky jsou běžně použity k&nbsp;označení "obsahu paměti", s&nbsp;výjimkou nějakých skokových instrukcí.
* Všechny LOAD a&nbsp;STORE instrukce používají stejný symbolický název, LD pro LOAD (byl to návrat ke zjednodušenému slovníku z&nbsp;Datapointu&nbsp;2200). Ostatní běžné instrukce, jako například ADD a&nbsp;INC, používali stejný symbolický název, bez ohledu na adresní režim nebo velikost operandu. To je možné právě proto, že operand už sám o&nbsp;sobě obsahuje dostatek informací.
 
Tyto zásady umožňovali přímočaře zjistit jména a&nbsp;tvary všech instrukcí procesoru Z80.
 
S&nbsp;výjimkou pojmenování rozdílů, a&nbsp;navzdory určitému rozporu v&nbsp;základní registrové struktuře, syntaxe Z80 a&nbsp;8086 je v&nbsp;podstatě izomorfní pro velkou část instrukcí. V&nbsp;assembleru pro 8080 a&nbsp;8086 existují pouze docela povrchní podobnosti (jako například slovo MOV, nebo písmeno X pro rozšířené registry). [[ProgramProgramy]] pro procesor 8080 mohou být přeloženy do strojového kódu pro procesor 8086 pomocí speciálního assembleru nebo přeloženy do jazyku symbolických adres pomocí překladatelského programu.
 
===Instrukční sada a kódování===
 
Procesor Z80 používá 252 z&nbsp;256 možných kódů jednotlivých [[Bajt|bajtů]] opcodu ([[Strojový kód|operační kód]] - "kořenové instrukce"). Čtyři zbývající kódy jsou značně používané jako opcode prefix.
CB a&nbsp;ED povolí speciální instrukce a&nbsp;DD nebo FD vyberou IX+d nebo IY+d příslušně (v&nbsp;některých případech bez posunutí&nbsp;"d") v&nbsp;místě&nbsp;HL. Toto schéma dává procesoru Z80 velké množství permutací instrukcí a&nbsp;registrů. Zilog je kategorizuje do 158 různých instrukčních typů, 78 z&nbsp;nich jsou ty samé jako u&nbsp;procesoru Intel&nbsp;8080 (umožňují provoz programů z procesoru 8080 na procesoru Z80).
Dokumentace k&nbsp;Z80 dělí skupiny instrukcí do následujících kategorií:
 
* 8bitové aritmeticko logické operace
* 16bitová aritmetika
* 8bitový load
* 16bitový load
* Nastavení bitů, resetování a&nbsp;testování
* Call, return a restart
* Výměna, transfer bloků a&nbsp;vyhledávání
* Základní účel aritmetiky a&nbsp;řízení CPU
* Vstup a&nbsp;výstup
* Skoky
* Rotace a&nbsp;posun
 
V&nbsp;originálním procesoru Z80 nejsou dostupné několikanásobné instrukce. Rozdílné velikosti a&nbsp;varianty sčítání, posunu a&nbsp;rotace mají někdy rozdílné účinky na příznaky, a&nbsp;to proto, že z&nbsp;procesoru 8080 byly zkopírovány příznaky ovlivňující vlastnosti. Instrukce LOAD neovlivňuje příznaky (s&nbsp;výjimkou LOAD registru I a&nbsp;R, které jsou pro zvláštní účely). Instrukce index registru jsou užitečné pro snížení délky kódu a&nbsp;zatímco některé nejsou o&nbsp;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&nbsp;obnovit registry. O&nbsp;deset let mladší design [[Z180]] si mohl ze začátku dovolit více "čipového prostoru", který umožňuje o&nbsp;něco účinnější implementaci (mimo jiné používá širší [[ALU]]). Podobné věci mohou být řečeny o&nbsp;[[Z800]], [[Z280]] a&nbsp;[[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ížili svou efektivitou v cyklech jak jen to bylo technicky možné, to&nbsp;jest vzhledem ke kódování v&nbsp;Z80 kombinovaném se schopností realizovat 8bitové čtení nebo zápis v&nbsp;každém hodinovém cyklu. Stejně tak instrukce pro 16bitové sčítání nejsou v&nbsp;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&nbsp;stejně tak důležité je, že snižují množství operací s&nbsp;registry.
 
== Externí odkazy ==