Tento soubor je urcen jen pro pokrocile - uvadim zde prikazy pro mikroprocesor Z80, kterym je osazena EUREKA. Predem ovsem alespon ve zkratce uvedu rigistry mikroprocesoru Z80 REGISTRY MIKROPROCESORU Z80 =========================== registr - A - neboli stradac 8 bitovy registr. Provadi se v nem veskere aritmeticke operace. registr - F - stavovy 8 bitovy registr (Flags) V tomto registru jsou ulozeny priznaky vysledku operaci. Registr obsahuje nasledujici sadu priznaku: S - priznak znamenka (S=0 - kladny vysledek) - jedna se o kopii nejvyssiho bitu. Z - priznak nuloveho vysledku (Z=1 znamena registr A=0, Z=0 znamena registr A je nenulovy. AC - priznak prenosu z 3. do 4. bitu pouziva se v BCD aritmetice tj. pracujeme-li v desitkove soustave. P - priznak preteceni nebo parity. Priznak se nastavi jestlize vysledek opera ma sudy pocet jednicek (v binarnim tvaru). N - priznak odcitani pro instrukci DAA - desitkova korekce. C - (Carry) priznak prenosu z nejvyssiho bitu. (C=1 - doslo k preteceni). Dalsimi 8 bitovymi registry jsou B,C,D,E,H,L. Nasledujicim spojenim vzniknou 16 bitove registry AF = stavove slovo procesoru, BC, DE, HL. Registry A, B, C, D, E, F, H, L jsou u mikroprocesoru zdvojeny, tj existuje zalozni rada techto registru. Mikroprocesor Z80 dale obsahuje 16 bitove registry SP - ukazatel na vrchol zasobniku (Stack Pointer), PC - citac adres (Program Counter) a registry IX a IY, ktere jsou vyuzivany pri indexovem zpusobu adresace. Mikroprocesor Z80 obsahuje jeste dalsi registry, ale ty zde nebudu popisovat. TVAR PRIKAZU V ASEMLERU tvar prikazu asembleru vypada instrukce cil,zdroj instrukce = samotny prikaz Cil a zdroj jsou operandy instrukce. Nektere instrukce maji pouze jeden nebo nemaji zadny operand. Operandem muze byt registr, konstata tj. cislo, nebo pametove misto. V pripade, ze se jedna o ukazatel na pametove misto, kde se nachazi data tak tento ukazatel je dan do kulatych zavorek. V prehledu instrukci uvadim pro konstatu slovo data a pro pametove misto addr. DATA8 znamena 8 bitove a DATA16 16 bitove cislo. Pametove misto ADDR je vzdy 16 bitove. Priklad: v registru HL je ulozeno cislo 1234, v pametove bunce 1234 je ulozeno cislo 13 pak LD A,(HL) znamena premisteni obsahu bunky registru HL tj. pametoveho mista 1234 do registru A. Registr A bude mit tudiz hodnotu 13. PRIKAZY MIKROPROCESORU Prikazy jsou uvedeny v asembleru prvni udaj je pro mikroprocesor 8080 druhy pro Z80. Dale jsou uvedeny strojove kody a to v HEX tvaru, v desitkovem tvaru. Posledni udaj je celkova delka instrukce v bitech Prikazy jsou uvedeny abecedne a uvadim i kratky popis. 8080 Z80 HEX TVAR DES.TVAR DELKA ADC DATA ADC A,DATA CE,DATA8 206,DATA8 16 ADC B ADC A,B 88 136 8 ADC C ADC A,C 89 137 8 ADC D ADC A,D 8A 138 8 ADC E ADC A,E 8B 139 8 ADC H ADC A,H 8C 140 8 ADC L ADC A,L 8D 141 8 ADC M ADC A,(HL) 8E 142 8 ADC A ADC A,A 8F 143 8 Sada adc = scitani registr A = registr A + registr nebo konstanta nebo pamet + priznak carry ve stavovem registru Napr.: registr A = 20, registr HL = 12200, Na adrese 12200 je 35 a stavovy registr C = 1 ADC A,(HL) = registr A tj. 20+(HL) tj. na adrese uvedene v HL je 35 + Carry tj. 1. Registr A bude mit hodnotu 20 + 35 + 1 = 56. ADI DATA ADD A,DATA C6,DATA8 198,DATA8 16 ADD B ADD A,B 80 128 8 ADD C ADD A,C 81 129 8 ADD D ADD A,D 82 130 8 ADD E ADD A,E 83 131 8 ADD H ADD A,H 84 132 8 ADD L ADD A,L 85 133 8 ADD M ADD A,(HL) 86 134 8 ADD A ADD A,A 87 135 8 sada ADD = scitani registr A = registr A + registr nebo konstanta nebo pamet. Je to to same jako ADC, ale nepricita se priznak Carry. DAD B ADD HL,BC 09 09 8 DAD D ADD HL,DE 19 25 8 DAD H ADD HL,HL 29 41 8 DAD SP ADD HL,SP 39 57 8 Tato sada provadi scitani HL = HL + 16 bitovy registr ANI DATA AND DATA E6,DATA8 230,DATA8 16 Logicky soucin A = A and DATA8 - provadi se bitovy logicky soucin ANA B AND B A0 160 8 ANA C AND C A1 161 8 ANA D AND D A2 162 8 ANA E AND E A3 163 8 ANA H AND H A4 164 8 ANA L AND L A5 165 8 ANA M AND (HL) A6 166 8 ANA A AND A A7 167 8 Logicky bitovy soucin A = A and registr nebo pamet. Pro and plati 0 and 0 = 0 0 and 1 = 0 1 and 0 = 0 1 and 1 = 1 Priklad: A = 56 des. - 38 v hex a 00111000 bin. B = 41 des. - 29 v hex a 00101001 bin. Prikaz AND B - A = 00111000 and 00101001, A = 00101000 tj. 40 des. 28 hex CALL ADDR CALL ADDR CD,ADDR16 205.ADDR16 24 Instrukce CALL vyvola podprogram na adrese uvedene v ADDR. Pro vsechny instrukce pro vyvolani podprogramu plati: Do SP zasobniku se ulozi adresa citace instrukci (nasledujici adresa za CALL) a zaroven se SP snizi o 2. CC ADDR CALL A,ADDR DC,ADDR16 220,ADDR16 24 podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz Carry = 1 CM ADDR CALL M,ADDR FC,ADDR16 252,ADDR16 24 Podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz S = 1 CNC ADDR CALL NC,ADDR D4,ADDR16 212,ADDR16 24 podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz Carry = 0 CNZ ADDR CALL NZ,ADDR C4,ADDR16 196,ADDR16 24 Podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz Z = 0 CP ADDR CALL P,ADDR F4,ADDR16 244,ADDR16 24 Podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz S = 0 CPE ADDR CALL PE,ADDR EC,ADDR16 236,ADDR16 24 Podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz P = 1 CPO ADDR CALL PO,ADDR E4,ADDR16 228,ADDR16 24 Podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz P = 0 CZ ADDR CALL Z,ADDR CC,ADDR16 204,ADDR16 24 Podminene vyvolani podprogramu. Podprogram bude vyvolan jen kdyz Z = 1 CMC CCF 3F 63 8 instrukce vynuluje Carry tj. Carry = 0. CPI DATA CP DATA FE,DATA8 254,DATA8 16 CMP B CP B B8 184 8 CMP C CP C B9 185 8 CMP D CP D BA 186 8 CMP E CP E BB 187 8 CMP H CP H BC 188 8 CPM L CP L BD 189 8 CMP M CP (HL) BE 190 8 CMP A CP A BB 191 8 tato sada provede odecet A - registr,data nebo pamet pricemz hodnota registru A se nezmeni nastavi se vsak priznaky Carry a Z jako kdyby se odcitani provedlo. a to hlavne: Z = 1 kdyz A se rovna zdroj Z = 0 kdyz A se nerovna zdor Carry = 1 kdyz A je vetsi nez zdroj Carry = 0 kdyz A je mensi nez zdroj CMA CPL 2F 47 8 Tak u teto instrukce si bohuzel presne nejsem jist, ale myslim si ze provede bitovou negaci registru A tj. bit s hodnotou 0 na 1 a bit s hodnotou 1 na 0. DAA DAA 27 39 8 desitkova korekce obsahu registru A pri praci s cisli v BCD kodu (v desitkove soustave) DCR B DEC B 05 05 8 DCR C DEC C 0D 13 8 DCR D DEC D 15 21 8 DCR E DEC E 1D 29 8 DCR H DEC H 25 37 8 DCR L DEC L 2D 45 8 DCR M DEC (HL) 35 53 8 DCR A DEC A 3D 61 8 DCX B DEC BC 0B 11 8 DCX D DEC DE 1B 27 8 DCX H DEC HL 2B 43 8 DCX SP DEC SP 3B 59 8 tyto instrukce zmensi obsah registru nebo pameti o 1 registr nebo pamet = registr nebo pamet - 1. DI DI F3 243 8 zakaz preruseni EI EI FB 251 8 povoleni preruseni XCHG EX DE,HL EB 235 8 vymena obsahu registru DE a HL. Lepe receno to co bylo v HL bude v DE a naopak. XTHL EX (SP),HL E3 227 8 vymena obsahu registru HL a pameti na kterou ukazuje registr SP L = (SP) (SP) = L, H = (SP + 1) (SP + 1) = H HLT HALT 76 118 8 zastaveni vypoctu do prijeti zadosti o preruseni. IN port IN A,(port) DB,port8 219,port8 16 vstup A = vracena hodnota z portu INR B INC B 04 04 8 INR C INC C 0C 12 8 INR D INC D 14 20 8 INR E INC E 1C 28 8 INR H INC H 24 36 8 INR L INC L 2C 44 8 INR M INC (HL) 34 52 8 INR A INC A 3C 60 8 INX B INC BC 03 03 8 INX D INC DE 13 19 8 INX H INC HL 23 35 8 INX SP INC SP 33 51 8 tyto instrukce zvetsi obsah registru nebo pameti o 1 registr nebo pamet = registr nebo pamet + 1. JMP ADDR JMP ADDR C3,ADDR16 195,ADDR16 24 nepodmineny skok na adresu ADDR. JC ADDR JP C,ADDR DA,ADDR16 218,ADDR16 24 skok s podminkou kdyz Carry = 1 pak skok PCHL JP (HL) E9 233 8 nepodmineny skok na adresu, ktera je na adrese uvedene v registru HL JM ADDR JP M,ADDR FA,ADDR16 250,ADDR16 24 skok s podminkou kdyz S = 1 pak skok JNC ADDR JP NC,ADDR D2,ADDR16 210,ADDR16 24 skok s podminkou kdyz Carry = 0 pak skok JNZ ADDR JP NZ,ADDR C2,ADDR16 194,ADDR16 24 skok s podminkou kdyz Z = 0 pak skok JP ADDR JP P,ADDR F2,ADDR16 242,ADDR16 24 skok s podminkou kdyz S = 0 pak skok JPE ADDR JP PE,ADDR EA,ADDR16 234,ADDR16 24 skok s podminkou kdyz P = 1 pak skok JPO ADDR JP PO,ADDR E2,ADDR16 226,ADDR16 24 skok s podminkou kdyz P = 0 pak skok JZ ADDR JP Z,ADDR CA,ADDR16 202,ADDR16 24 skok s podminkou kdyz Z = 1 pak skok LDA A,ADDR LD A,(ADDR) 3A,ADDR16 58,ADDR16 24 do registru A se premisti obsah pameti, na ktery ukazuje ADDR tj. 8 bitu do registru A z mista na ktere ukazuje ADDR LDAX B LD A,(BC) 0A 10 8 LDAX D LD A,(DE) 1A 26 8 do registru A se premisti obsah pameti, na ktery ukazuji registry BC,DE STA ADR LD (ADDR),A 32,ADDR16 50,ADDR16 24 na adresu uvedenou v ADDR se premisti obsah registru A SHLD ADDR LD (ADDR),HL 22,ADDR16 34,ADDR16 24 na adresu uvedenou v ADDR se premisti obsah registru HL tj.celych 16 bitu a to (ADDR) = L, (ADDR + 1) = H STAX B LD (BC),A 02 02 8 STAX D LD (DE),A 12 18 8 na adresu uvedenou v BC, DE se premisti obsah registru A tj. 8 bitu LHLD ADDR LD HL,(ADDR) 2A,ADDR16 42,ADDR16 24 Do registru HL premisti obsah pametoveho mista uvedeneho v ADDR tj celych 16 bitu a to L = (ADDR), H = (ADDR + 1) MOV A,B LD A,B 78 120 8 MOV A,C LD A,C 79 121 8 MOV A,D LD A,D 7A 122 8 MOV A,E LD A,E 7B 123 8 MOV A,H LD A,H 7C 124 8 MOV A,L LD A,L 7D 125 8 MOV A,M LD A,(HL) 7E 126 8 MOV A,A LD A,A 7F 127 8 MOV B,B LD B,B 40 64 8 MOV B,C LD B,C 41 65 8 MOV B,D LD B,D 42 66 8 MOV B,E LD B,E 43 67 8 MOV B,H LD B,H 44 68 8 MOV B,L LD B,L 45 69 8 MOV B,M LD B,(HL) 46 70 8 MOV B,A LD B,A 47 71 8 MOV C,B LD C,B 48 72 8 MOV C,C LD C,C 49 73 8 MOV C,D LD C,D 4A 74 8 MOV C,E LD C,E 4B 75 8 MOV C,H LD C,H 4C 76 8 MOV C,L LD C,L 4D 77 8 MOV C,M LD C,(HL) 4E 78 8 MOV C,A LD C,A 4F 79 8 MOV D,B LD D,B 50 80 8 MOV D,C LD D,C 51 81 8 MOV D,D LD D,D 52 82 8 MOV D,E LD D,E 53 83 8 MOV D,H LD D,H 54 84 8 MOV D,L LD D,L 55 85 8 MOV D,M LD D,(HL) 56 86 8 MOV D,A LD D,A 57 87 8 MOV E,B LD E,B 58 88 8 MOV E,C LD E,C 59 89 8 MOV E,D LD E,D 5A 90 8 MOV E,E LD E,E 5B 91 8 MOV E,H LD E,H 5C 92 8 MOV E,L LD E,L 5D 93 8 MOV E,M LD E,(HL) 5E 94 8 MOV E,A LD E,A 5F 95 8 MOV H,B LD H,B 60 96 8 MOV H,C LD H,C 61 97 8 MOV H,D LD H,D 62 98 8 MOV H,E LD H,E 63 99 8 MOV H,H LD H,H 64 100 8 MOV H,L LD H,L 65 101 8 MOV H,M LD H,(HL) 66 102 8 MOV H,A LD H,A 67 103 8 MOV L,B LD L,B 68 104 8 MOV L,C LD L,C 69 105 8 MOV L,D LD L,D 6A 106 8 MOV L,E LD L,E 6B 107 8 MOV L,H LD L,H 6C 108 8 MOV L,L LD L,L 6D 109 8 MOV L,M LD L,(HL) 6E 110 8 MOV L,A LD L,A 6F 111 8 MOV M,B LD (HL),B 70 112 8 MOV M,C LD (HL),C 71 113 8 MOV M,D LD (HL),D 72 114 8 MOV M,E LD (HL),E 73 115 8 MOV M,H LD (HL),H 74 116 8 MOV M,L LD (HL),L 75 117 8 MOV M,A LD (HL),A 76 119 8 MVI B,DATA LD B,DATA 06,DATA8 06,DATA8 16 MVI C,DATA LD C,DATA 0E,DATA8 14,DATA8 16 MVI D,DATA LD D,DATA 16,DATA8 22,DATA8 16 MVI E,DATA LD E,DATA 1E,DATA8 30.DATA8 16 MVI H,DATA LD H,DATA 26,DATA8 38,DATA8 16 MVI L,DATA LD L,DATA 2E,DATA8 46,DATA8 16 MVI M,DATA LD (HL),DATA 36,DATA8 54,DATA8 16 MVI A,DATA LD A,DATA 3E,DATA8 62,DATA8 16 SPHL LD SP,HL F9 249 8 LXI B,DATA16 LD BC,DATA16 01,DATA16 01,DATA16 24 LXI D,DATA16 LD DE,DATA16 11,DATA16 17,DATA16 24 LXI H,DATA16 LD HL,DATA16 21,DATA16 33,DATA16 24 LXI SP,DATA16 LD SP,DATA16 31,DATA16 49,DATA16 24 Tak tato spousta instrukci slouzi k premisteni, myslim ze neni co dodavat z instrukci je jasne o jake premisteni jde priklad: MOV L,M neboli LD L,(HL) premisti do registru L obsah pameti, ktery udava registr HL je jasne, ze pouze 8 bitu. NOP NOP 00 00 8 nevykonna instrukce neprovede se nic a prejde se na dalsi instrukci ORA A OR A B7 183 8 ORA B OR B B0 176 8 ORA C OR C B1 177 8 ORA D OR D B2 178 8 ORA E OR E B3 179 8 ORA H OR H B4 180 8 ORA L OR L B5 181 8 ORA M OR (HL) B6 182 8 ORI DATA OR DATA F6,DATA8 246,DATA8 16 Logicky bitovy soucet vzdy provaden registr A a zadany registr,pamet nebo data. Pro logicky soucet plati: 0 or 0 = 0 0 or 1 = 1 1 or 0 = 1 1 or 1 = 1 Upozornuji je provaden logicky soucet BITU. OUT PORT OUT (PORT),A D3,PORT8 211,PORT8 16 vyslani obsahu registru na port POP B POP BC C1 193 8 POP D POP DE D1 209 8 POP H POP HL E1 225 8 POP PSW POP AF F1 241 8 obnoveni registru ze zasobniku (predchozi instrukce PUSCH) zde plati: obnoveni je vzato z vrcholu zasobniku tj. z mista kam ukazuje registr SP je-li napriklad POP BC plati B = SP + 1 C = SP SP = SP + 2 PUSH B PUSH BC C5 192 8 PUSH D PUSH DE D5 213 8 PUSH H PUSH HL E5 229 8 PUSH PSW PUSH AF F5 245 8 uschova registru do zasobniku (vyzvedne se instrukci POP) zde plati: je-li napriklad PUSH BC plati SP + 1 = B SP = C SP = SP - 1 RET RET C9 201 8 nepodmineny navrat z podprogramu RNZ RET NZ C0 192 8 podmineny navrat z podprogramu je-li Z = 0 pak navrat RZ RET Z C8 200 8 podmineny navrat z podprogramu je-li Z = 1 pak navrat RNC RET NC D0 208 8 podmineny navrat z podprogramu je-li Carry = 0 pak navrat RC RET C D8 216 8 podmineny navrat z podprogramu je-li Carry = 1 pak navrat RPO RET PO E0 224 8 podmineny navrat z podprogramu je-li P = 0 pak navrat RPE RET PE EB 232 8 podmineny navrat z podprogramu je-li P = 1 pak navrat RP RET P F0 240 8 podmineny navrat z podprogramu je-li S = 0 pak navrat RM RET M F8 248 8 podmineny navrat z podprogramu je-li S = 1 pak navrat RLC RLCA 07 07 8 bitovy cyklicky posun registru A vlevo hodnota nejvyssiho bitu registru A tj. 7 bit prechazi do Carry RRC RRCA 0F 15 8 bitovy cyklicky posun registru A vpravo hodnota nejnizsiho bitu registru A tj. 0 bit prechazi do Carry RAL RLA 17 23 8 stejne jako RLC akorat bit Carry prechazi do bitu 0 registru A RAR RRA 1F 31 8 stejne jako RRC akorat bit Carry prechazi do bitu 7 registru A RST 0 RST 0 C7 199 8 RST 1 RST 8 CF 207 8 RST 2 RST 10H D7 215 8 RST 3 RST 18H DF 223 8 RST 4 RST 20H E7 231 8 RST 5 RST 28H EF 239 8 RST 6 RST 30H F7 247 8 RST 7 RST 38H FF 255 8 vyvola prislusne preruseni pravidla jsou stejna jako u instrukce CALL SBI SBC A,DATA DE,DATA8 222,DATA8 16 instrukce odcitani: registr A = registr A - DATA8 - Carry SBB B SBC A,B 98 152 8 SBB C SBC A,C 99 153 8 SBB D SBC A,D 9A 154 8 SBB E SBC A,E 9B 155 8 SBB H SBC A,H 9C 156 8 SBB L SBC A,L 9D 157 8 SBB M SBC A,(HL) 9E 158 8 SBB A SBC A,A 9F 159 8 instrukce odcitani: registr A = registr A - registr, pamet - priznak Carry STC SCF 37 55 8 nastavi Carry na 1 SUI SUB DATA D6,DATA8 214,DATA8 16 SUB B SUB B 90 144 8 SUB C SUB C 91 145 8 SUB D SUB D 92 146 8 SUB E SUB E 93 147 8 SUB H SUB H 94 148 8 SUB L SUB L 95 149 8 SUB M SUB (HL) 96 150 8 SUB A SUB A 97 151 8 instrukce odcitani: registr A = registr A - uvedeny registr, data, pamet. Priznak Carry se neodecita. XRI XOR DATA EE,DATA8 238,DATA8 16 XRA B XOR B A8 168 8 XRA C XOR C A9 169 8 XRA D XOR D AA 170 8 XRA E XOR E AB 171 8 XRA H XOR H AC 172 8 XRA L XOR L AD 173 8 XRA M XOR (HL) AE 174 8 XRA A XOR A AF 175 8 provadi bitovou nonekvivalenci registru A a zadaneho registru, dat nebo pameti. Vysledek ulozen v registru A podle nasledujiciho vzorce 0 XOR O = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 Toto jsou vsechny me zname instrukce mikroprocesoru 8080 a Z80 nepopiram a dokonce vim, ze jich je vic tak me prosim nemlatte, kdyz zjistite ze nejaka instrukce chyby. Zaverem podotykam, ze tato tabulka laikovi nic nerekne a bohuzel je mu i k nicemu. V pripade nejakeho zajmu muzu zdelit podrobnejsi informace o operacnim systemu CP/M (pokud to budu vedet) Weiss Rostislav