str.67 Půlbytové příkazy přesunu --------------------------- Těmito povely lze provádět půlbytový posun vpravo, či vlevo v ledné paměťové buňce jejíž adresa je v HL registru. Celek je uspořádán tak, že je z akumulátoru jeden půlbyte přisunut a jeden z půlbytů paměťové buňky je zachraňován do akumulátoru. Tím je možno posouvat vícemístné číslo BCD o jednu cifru doprava nebo doleva, když HL reg. je průběžně inkrementován respektive dekrementován. Kontrolní povely CPU ---------------------- Z kontrolních povelů CPU jsme již použili povely SCF a CCF. Většina z ostatních kontrolních povelů aktivují speciální CPU komponenty Herdware a jsou pro normální programování bez významu Jedině povel NOP (No Operation, česky žádná operace) je při programování pomocí "Learn-Paketu" k užitku. Lze jej použít pro držení místa v programu, kde chceme později vsunout změnu. Je zcela nepůsobivý. Příkazy Restart ----------------- Tyto povely jsou zkrácené výzvy podprogramů. Pomocí povelů RST lze skákat na adresy 0000......0038 v odstupu po 8mi bytech. Výzvy ovšem potřebují 1 byte. Jsou často používány v rutinách R O M. Kapitola 6 ---------- Použití: Příklady programů Teď vám chceme ukázat co se dá provádět ve strojovém jazyce Uváděné programy vám ukáží použití a na nich uvidíte, že i malé užitečnosti jsou ve strojovém jazyce programovatelné. 6.1 Počítač jako klavír Abyste poznali jak se tóny tvoří, tedy malý sound-program. S tímto programem se stává váš počítač klavírem o dvou oktávách. Klávesy až <,> patří celým tónům první oktávy, klávesy patří druhé oktávě. Půltóny leží vždy mezi celými tóny o jednu řádku výše. Když startujete program objeví se na obrazovce obraz klávesnice, kterou můžete ovládat aby hrála příslušné tóny. ukončuje celý program. Napřed se vyvolá podprogram od adresy 8045 na vydání textu. Mezi adresami 8003 a 8051 leží vlastní klavírový program.Vyčkává na stisk klávesy a vydává podle stisknuté klávesy tón. Kód stisknuté klávesy je získáván pomocí rutiny ROM z adresy 0018. Povelem CPIR je tento kód vyhledáván v tabulce 1 (počínaje adr. 80E0). Když je nalezen je podle tabulky 2 (počínaje adresou 80FA) příslušný High byte tónové výšky uložen do paměťové buňky 11A2. Potom se příslušný Low byte tónové výšky z tabulky 3 (počínaje adresou 8114) ukládá do paměťové buňky 11A2, a pomocí ROM rutiny na adrese 0044 je vydáván tón. Zpoždovací smyčka zajišťuje aby se tón chvilku udržel. Když je během této doby stisknuta jiná klávesa, je vydán nový tón. Když ne pak tón za uplynulou dobu zanikne a čeká se na další stlačení klávesy. Od adresy 8045 je program výpisu textu. Vybírá znak z textu který str.68 je uložen počínaje adresou 8060a vydává jej prostřednictvím ROM rutiny na adrese 0012, vybere další znak, vydá jej, atd. až je nalezen ASCII kód 03 (konec textu). V paměťové buňce 8052 se ukládá kód naposled stisklé klávesy. Mezi 8060 a 80F9 je tabulka s klávesovým kódem. Mezi 80FA a 8113 je tabulka s Low byty výšky tónů. Klavírový program Adresa: Code: Příkaz: Komentář: 8000: CD4580 CALL 8045 vyvolej podpr. pro vypsání textu 8003: CD1B00 CALL 001B sejmi znak z klávesnice 8006: FE00 CP 00 když není stisknuta žádná klávesa 8008: 28F9 JR Z,8003-$ opakuj od 8003 800A: 325280 LD (8052),A ulož kód stisklé klávesy 800D: FE66 CP 66 když je stl. klávesa ,pak konec 800F: C8 RET Z konec 8010: 21E080 LD HL,80E0 adresa tabulky 1 8013: 011A00 LD BC,001A délka tabulky 1 8016: 111A00 LD DE,001A odstup mezi tabulkami 8019: EDB1 CPIR hledej kód klávesy v tabulce 1 801B: 20E6 JR NZ,8003-$ není-li nalezen, opakuj od 8003 801D: 19 ADD HL,DE dej HL na příslušný prvek v tab. 2 801E: 2B DEC HL 801F: 7E LD A,(HL) High-byte výšky tónu 8020: 32A211 LD (11A2),A podle 11A2 8023: 19 ADD HL,DE dej HL na příslušný prvek v tab. 3 8024: 7E LD A,(HL) Low-byte 8025: 32A111 LD (11A1),A výšku tónu podle 11A1 8028: CD4400 CALL 0044 zahraj tón 802B: 012500 LD BC,0025 nastav délku tónu 802E: EDA1 CPI zkrácená doba trvání tónu 8030: E24080 JP PO,8040 když doba pominula, skoč na 8040 8033: CD1B00 CALL 001B sejmi znak z klávesnice 8036: FE00 CP 00 když není stlačena žádná klávesa 8038: 28F4 JR Z,802E-$ pak opakuj od 802E 803A: 215280 LD HL.8052 adr. buňka pro kód stisklé klávesy 803D: BE CP (HL) když je stlačena stejná klávesa 803E: 28EB JR Z,802B-$ pak opakuj od 802B 8040: CD4700 CALL 0047 vypni tón 8043: 18BE JR 8003-$ opakuj od 8003 8045: 216080 LD HL,8060 adresa textu 8048: 7E LD A,(HL) vyber znak do A 8049: FE03 CP 03 když je 03, pak 804B: C8 RET Z skok zpět 804C: CD1200 CALL 0012 zobraz znak 804F: 23 INC HL ukaž na další znak 8050: 18F6 JR 8048-$ opakuj od 8048 8052: str.69 Adresa: Code: ASCII: Komentář: 8060: 19 0D 11 11 11 11 20 20 ...... od 8060 do 80D9je text 8068: 20 20 44 52 55 45 43 4B DRUECK který se má zobrazit 8070: 45 4E 20 53 49 45 2E 2E EN SIE.. konec je označen 03 8078: 2E 0D 11 11 11 20 20 20 ..... 8080: 20 20 32 20 33 20 20 20 2 3 8088: 35 20 36 20 37 20 0D 20 5 6 7 . 8090: 20 20 20 51 20 57 20 45 Q W E 8098: 20 52 20 54 20 59 20 55 R T Y U 80A0: 20 49 0D 11 20 20 20 20 I.. 80A8: 20 53 20 44 20 20 20 47 S D G 80B0: 20 48 20 4A 0D 20 20 20 H J. 80B8: 20 5A 20 58 20 43 20 56 Z X C V 80C0: 20 42 20 4E 20 4D 20 2C B N M , 80C8: 0D 11 11 11 20 20 20 20 .... 80D0: 3C 43 52 3E 3D 45 4E 44 =END 80D8: 45 03 00 00 00 00 00 00 E....... 80E0: 5A 53 58 44 43 56 47 42 ZSXDCVGB od 80E0 do 80F9 Tab 1 80E8: 48 4E 4A 4D 2C 51 32 57 HNJM,Q2W s kódy kláves 80F0: 33 45 52 35 54 36 59 37 EER5T6Y7 80F8: 55 49 0D 0C 0B 0B 0A 0A UI...... od 80FA do 8113 Tab 2 8100: 09 08 08 07 07 07 06 06 ........ High-byte tónu 8108: 06 05 05 05 05 04 04 04 ........ 8110: 03 03 03 03 59 9D E8 3D ....Y..= od 8114 do 8120 Tab 3 8118: 9B 03 73 EB 6B F2 80 14 ........ Low-byte tónu 8120: AE AE 4E F4 9E 4E 01 BA ..N..N.. 8128: 76 36 F9 C0 8A 57 00 00 .&...W.. 6.2 Zaklíčování ----------------- S tímto programem můžete zaklíčovat přes klávesnici zadaný text a vypsat jej na obrazovce. Jako klíč poslouží jakákoliv klávesa. Když se zaklíčovaný text nato stejnou kláv. odklíčuje, lze text znovu zaklíčovat nějakou jinou klávesou. Naposled se obrazovka smaže a zadá se text (max. 80 znaků). Počínaje adresou 81B8 je text ukládán. Nato se objeví výzva k stlačení nějaké klávesy. Zaklíčování spočívá v tom, že je vytvořeno exklusivní "nebo" mezi jednotlivými znaky textu a kódem klíčované klávesy. Takto vznikajíci kód je indikován a tvoří zaklíčovaný text, který je opět od adresy 81B8 ukládán, aby mohl být znovu zaklíčován. Znaky jejichž kód je menší než 20 hexadecimálně, jsou v indikaci nahrazeny prázdnými místy. Zaklíčování Adresa: Code: Příkaz: Komentář: 8130: 118081 LD DE,8180 Text adresy 8133: CD1500 CALL 0015 Vydej text 8136: 3E0D LD A,0D Cursor zadaný 8138: CD1200 CALL 0012 Stanovení začátku řádku 813B: 11B881 LD DE,81B8 Adresa od které se má začít střádat 813E: CD0300 CALL 0003 Vyber řádek z klávesnice 8141: 3E16 LD A,16 Vymaž 8143: CD1200 CALL 0012 Displej 8146: 3E00 LD A,00 Stanov X a Y 8148: 327111 LD (1171),A Souřadnice str.70 814B: 327211 LD (1172),A Kursor na nulu 814E: 11A981 LD DE,81A9 Adresa "SCHLUSSEL?" 8151: CD1500 CALL 0015 Vydej text 8154: CDB309 CALL 09B3 Vyber znak z klávesnice 8157: FECD CP CD Jestliže 8159: C8 RET Z Pak konec 815A: 5F LD E,A Klíč v E 815B: 3E00 LD A,00 Souřadnice X.. 815D: 327111 LD (1171),A Kursor na nulu 8160: 3E0A LD A,0A Souřadnice Y.. 8162: 327111 LD (1172),A Kursor dát na 10 8165: 21B881 LD HL,81B8 Text adresy 8168: 7E LD A,(HL) Stanov znak 8169: FE0D CP 0D Opakuj 0D, pak 816B: 28D9 JR Z,8146-$ Opakuj od 8146 816D: AB XOR E Zaklíčuj 816E: 77 LD (HL),A Ulož zaklíčované znaky 816F: FE20 CP 20 Je to 20? 8171: 3002 JR NC,8175-$ Jestliže ano, skoč na 8175 8173: 3E20 LD A,20 Kód pro space 8175: CD1200 CALL 0012 Vydej znak 8178: 23 INC HL Postup na další znak 8179: 18ED JR 8168-$ Opakuj od 8168 Adresa: Code: ASCII: Komentář: 8180: 47 45 42 45 4E 20 53 49 GEBEN SI Mezi 8180 a 8185 8188: 45 20 45 49 4E 45 4E 20 E EINEN stojí texty, které se 8190: 54 45 58 54 20 45 49 4E TEXT EIN mají vydat. 8198: 28 4D 41 58 20 38 30 20 81A8: 0D 53 43 48 4C 55 45 53 .SCHLUES 81B0: 53 45 4C 20 3F 0D 0D FF SEL ?... 81B8: 00 00 FF FF 00 00 FF FF ........ Od 81B8 je text ukládán | Zadej text (max 80 znaků) Klíč? 6.3 Měření časů ----------------- S tímto programem můžete měřit čas od 0 ... 9999 sekund. Klávesou se spouští stopky, klávesou se stopky zastavují a je přpraveno k dalšímu měření. Klávesou se ukončuje program. Napřed se vydává text na obrazovce, který je uložen od adresy 8268. Pak je přepsán pomocí 30 (ASCII 0) rozsah paměti od 8260 do 8263, kde je zaznamenán čas v sekundách. Pak se čeká až se stlačí klávesa pro start. Rutinou ROM adresy 0033 se hodiny vynulují a startují. Po každé sekundě se počet sekund zvyšujr o 1. Při tom se zvyšují nejprve sekundové jedničky a když budou větší než 9 vrací se na nulu a následuje přenos na desítky atd. Mezi adresami 821F a 822E je dotazováno zda je stlačena klávesa nebo a zda uplynula sekunda? Mezi 8243 a 8254 je programová část vydávající počet sekund. Od 8256 je pak podprogram pro výpis textu. Paměťové buňky 8260 až 8263 obsahují počítadlo sekund. Od adresy 8265 je text, který má být vypsán. Jeho konec je označen kódem 03. str.71 Měřič času Adresa: Code: Příkaz: Komentář: 8200: 216582 LD HL,8265 Adresa textu 8203: CD5682 CALL 8256 Podprogram pro vydání textu 8206: 216082 LD HL,8260 Adresa pro časovou paměť 8209: 0604 LD B,04 Čtyři místa 820B: 3630 LD (HL),30 Ulož ASCII 0 820D: 23 INC HL Následujíci místo 820E: 10FB DJNZ 820B-$ Když<>0 opakuj od 810B 8210: 360D LD (HL),0D Konec označ 0D 8212: CDB309 CALL 09B3 Vyber znak z klávesnice 8215: FE13 CP 13 Když to není 8217: 20F9 JR NZ,8212-$ Pak opakuj od 8212 8219: 110000 LD DE,0000 Sekundy dát na 0 821C: CD3300 CALL 0033 Startovat hodiny 821F: CD3B00 CALL 003B Odečíst hodiny 8222: CD1B00 CALL 001B Vyber znak z klávesnice 8225: FE66 CP 66 Když je to 8227: C8 RET Z Pak konec 8228: FE4E CP 4E Když je to pak 822A: 28D4 JR Z,8200-$ Zpět na začátek 822C: 7B LD A,E Sekundy do A 822D: B8 CP B Když ještě neproběhly sekundy 822E: 28EF JR Z,821F-$ Pak opakuj od 821F 8230: 216382 LD HL,8263 Adresa sekund v paměti 8233: 3E39 LD A,39 ASCII 9 8235: 34 INC (HL) Zvyš číslo sekund 8236: BE CP (HL) Porovnej s 9 8237: 300A JR NC,8243-$ Když < pak skoč na 8243 8239: 3630 LD (HL),30 Napiš ASCII 0 823B: 2B DEC HL Ukáž na další místo 823C: 7D LD A,L HIGH-Byte adresy do A 823D: FE5F CP 5F Když je to poslední místo 823F: 2815 JR Z,8256-$ Pak skoč na 8256 8241: 18F0 JR 8233-$ Opakuj od 8233 8243: 3E12 LD A,12 Y souřadnice 8245: 327111 LD (1171),A Kursor stanovit 8248: 3E0A LD A,0A X souřadnice 824A: 327211 LD (1172),A Kursor stanovit 824D: 43 LD B,E LOW-Byte sekund do B zachránit 824E: 116082 LD DE,8260 Adresa časové paměti 8251: CD1500 CALL 0015 Udej čas 8254: 18C9 JR 821F-$ Opakuj od 821F 8256: 7E LD A,(HL) Vyber znak do A 8257: FE03 CP 03 Když 03, pak konec 8259: C8 RET Z Podprogram 825A: CD1200 CALL 0012 Vydej znak 825D: 23 INC HL Ukaž na další znak 825E: 18F6 JR 8256-$ Opakuj od 8256 8260: 3031 Adresa: Code: ACSII: Komentář: 8260: 30 30 30 30 0D 16 3C 53 0000..=START Mezi 8265 a 8288 Text, 8270: 3C 4E 3E 3D 4E 45 55 54 =NEUE který má být vydán. 8278: 52 20 53 54 41 52 54 20 R START Konec je značen 03. 8280: 3C 43 52 3E 3D 45 4E 44 =END 8288: 45 20 20 03 20 20 03 20 E . str.72 Kapitola 7 ---------- Profesionální programování: Assembler a jiné věci Potom, co jste se teď trochu seznámili s možnostmi strojového jazyka a dali se do pohybu vaše první programy, měly by jste získat představu, jak pracují profesionálové při programování. Protože, jestliže chcete skutečně psát delší strojové programy, je to s Monitorem a Line-assemblerem jako jedinými pomůckami poněkud obtížné, pravý Macro assembler (jako MZ-MACRO) usnadňuje práci výrazně a s podprogramovou knihovnou jako (MZ-PROFI) potřebujete pro standartní úkoly jako INPUT, PRINT nebo aritmetické operace vyhledat pouze správné programy. 7.1 Assembler -------------- Základní funkce assembleru pozůstává v tom aby váš strojový program byl mnemotechnickou formou jako čitelný text. OP kódy generyje assembler pak sám. Při tzv. Line-assembleru je to potom také všechno. Program je řádek po řádku vkládán a překládán okamžitě do OP-kódů. U komfortních tzv. 1 nebo 2 průchodových assemblerů je to trochu jinak. Celý programový text takzvaný zdrojový program (source program) se zadává prostřednictvím texteditoru a teprve když je zadávání ukončeno, je program v assembleru překládán. Při tom assembler prochází programem 1 nebo 2 krát, proto to označení 1- nebo 2 průchozí assembler. Do OP kódu přeložený program označujeme též jako objektový program. U 2 průchozího assembleru se zdrojový program zapisuje editorem. Tím máte všechny funkce editoru, jako vkládání nebo mazání pro váš program k dispozici. Když jste zkusili provést v hexakódu některého programu změny, pak jistě oceníte že se ve zdrojovém programu vsouvají řádky nebo mažou. Při tom hraje důležitou roli ještě jiné funkce 1 nebo 2 průchodového assembleru. Nepotřebujete se již starat o skokové adresy v programu, assembler vyřídí propočet za vás. To funguje následovně. Vepíšete do zdrojového programu jednoduše značku (label) v místě kam se má skočit. Jako značku můžete přitom použít jakékoliv symbolické jméno např. "Smyčka". Když teď přijde povel ke skoku, napíšete již pouze "JP Smyčka". Příklad: Smyčka: BIT 7,(HL) JR NZ,Konec LDI JR Smyčka Konec: RET Když assembler přeloží program, spočítá současně adresy, které patří ke značkám a vsadí je do příslušných OP kódů. K tomu potřebují komfortní assemblery oba průběhy, za prvního proběhnutí se propočtou hodnoty všech značek a uloží se v tzv. symbolové tabulce, za druhého průběhu je program přeložen do OP kódů. Pokaždé když se při tom použije značka, vyhledá assembler k tomu příslušnou hodnotu v symbolové tabulce a dosadí jej do OP kódu. Protože při použití značek se programovými adresami pracuje jak jen symbolicky, je možné provádět v programu vsouvání nebo vymazání aniž by se měnily některé adresy. Právě tak jako skokové povely lze také symbolicky označovat paměťové buňky. To usnadňuje čitelnost programů a pomáhá zabraňovat str.73 chybám. Další zjednodušení nabízejí tzv. Macroassemblery. U těchto Macroassemblerů je totiž možno opatřit často potřebné povelové sledy jedním jménem a jednoduše uvedením tohoto jména na libovolném místě je zařadit do programu. Toto je užitečné pro malé programy, pro které z důvodů rychlosti nechceme rozepisovat vlastní podprogram, ale raději použijeme pokaždé originální povelový sled ve strojovém programu. Klavírový program z 6.1 vypadá s assemblerem následovně: ;***Konstanty NOKEY =00 EOT =03 CR =66 STO =8025 TAB =80E0 TABLEN =1A TABDIS =1A FLOW =11A1 FHIGH =11A2 DAUER =0025 TEXT =8060 ANFANG =8000 ;***ROM - programy PRNT =0012 GETKY =001B MSTA =0044 MSTP =0047 ORG ANFANG CALL TEXT INPUT: CALL GETKY CP NOKEY JR Z,INPUT LD (STO),A CP CR RET Z LD HL,TAB LD BC,TABLEN LD DE,TABDIS CPIR JR NZ,INPUT ADD HL,DE DEC HL LD A,(HL) LD (FHIGH),A ADD HL,DE LD A,(HL) LD (FLOW),A TON AN: CALL MSTA DAUER1: LD BC,DAUER DAUER2: CPI JP PO,TONAUS CALL GETKY CP NOKEY JR Z,DAUER2 LD HL,STO CP (HL) JR Z,DAUER1 str.74 TONAUS: CALL MSTP JR INPUT TEXT: LD HL,ADTEXT LD A,(HL) CP EOT RET Z CALL PRNT INC HL ENDE: JR TEXT 7.2 Debugger (odštěňovač) --------------------------- Je něco jako učební Learn-Program. S jeho pomocí lze vystopovat chyby (štěnice) ve strojovém programu, přičemž se prezentují obsahy registrů a programy se nechávají běžet v krokovém způsobu provozu, anebo až k předem stanoveným bodům přerušení (breakpointy) a při tom se pozorují obsahy registrů. U symbolického debuggru lze přitom přebírat jména značek ze symbolové tabulky assembleru a zavádět je namísto adres. 7.3 Znalost systémů a sbírka podprogramů ------------------------------------------ Chceme-li napsat obsáhlejší strojové programy musíme mít určité znalosti o systému, protože je třeba vědět jak získám něco z klávesnice a jak zobrazit např. text na monitoru. Nutné minimum takových znalostí najdete v dodatku E. Pro profesiální práci je samozřejmě velmi užitečná sbírka podprogramů, která pro takové standartní úkoly obsahuje hotové programy. Dobrá sbírka podprogramů může skutečně učinit Compiler téměř přebytečný, protože v ní naleznete pro všechny operace programy (aritmetika, grafika, ukládání a vybírání textů). Při programování pak stačí pro standartní operace vyhledat jen správné podprogramy a sestavit je na samotný program. 7.4 Programovací technika --------------------------- U assemblerového programování tím více platí, co se v každém programovacím jazyce vyplácí : Na začátku každého programu je systematické rozvážení. Při tom se koncipuje návrh v podobě blokového schématu nebo organizačního diagramu na papír. Skutečně v profesionální praxi zabírá skoro 50% programovacího času v této programovací fázi. Nejpříznivější je přito, že zatím se udělá velmi hrubý návrch, který se pak postupně zpřesňuje. To celé se nazývá Top-Down-Design, vychází se z problémové roviny shora dolů, až se dostaneme k nejmenším detailům. Velmi výhodné je při tom, když tyto problémové roviny se také současně odráží v hiearchii budoucích programů. Když program je v návrhu hotov, začne programování. Při tom je příznivé, když teď budeme postupovat opačně a programovat začneme zdola nahoru, tedy Bottom-Up. Nejdříve se napíší základní podprogramy a vyzkouší se též hned jejich funkce. Když jsou bezchybné, přistoupíme k dalšímu stupni a sestavíme nové podprogramy z těch hotových, až dosáhneme nejvyšší úroveň. Tím se ušetří mnoho času při hledání chyb a získá se přehledný program. str.75 Při programování by se mělo dbát aby se jednotlivé podprogramy tvořily přijatelné k používání. Měly by měnit pouze registry a paměťové buňky, které odpovídají jejím buňkám a pokud možno se neprojevovali vedlejšími účinky. Kromě toho by se při rozkladu na podprogramy mělo důsledně dbát na to abychom dospěli k přehledným jednotkám. Při programování se nesmí zapomínat samozřejmě dokumentace. Nejlépe je, když přidělování jmen v assemblerových programech (viz. 7.1) se již postaráme, že se mnohé již samo sebou vysvětlí Kromě toho jsou strukturální programy u kterých se struktura již při vsouvání odráží v Listingu, mnohem přehlednější. Celkem ještě platí, že program zůstává mnohem přehlednější, když se vyhneme divokému skákání sem tam. Pokud možno se máme držet struktur smyčkových a větvícich, jak již jsou předem dány strukturálními povely assembleru. Budete-li se držet těchto pravidel, stanete se lechce assemblerovým profesionálem. str.76 D O D A T E K A ------------------ Kódování: Znakový kód, Tokens, Znázornění čísel A.1 Znakový kód ---------------- V tomto dodatku najdete sadu znaků vašeho computeru s příslušnými kódy : Tabulka vzhledem k nemožnosti tisku převážné většiny grafických znaků, jež jsou v tabulce uvedeny, není v tomto výpisu uvedena. Uživatel si jí může prohlédnout v OWNER'S MANUAL jež je součástí MZ-800. V následující tabulce najdete řídící znaky s kódy hex. 00....1F. Jen část těchto řídících znaků se ve vašem computeru bude vyskytovat, funkce těchto řídících znaků je pak udána. |-------------------------------------------| | Hex | ASCII | CTRL | Funktion | |-----|--------|-------|--------------------| | 0 | NUL | @^1) | | | 1 | SOH | A | | | 2 | STX | B | | | 3 | ETX | C | | | 4 | EOT | D | | | 5 | ENQ | E | | | 6 | ACK | F | | | 7 | BEL | G | | | 8 | BS | H | | | 9 | HT | I | | | A | LF | J | Nová řádka | | B | VT | K | | | C | FF | L | | | D | CR | M | Kursor na začátek | | E | SO | N | | | F | SI | O | | | 10 | DLE | P | | | 11 | DC1 | Q | Kursor dolů | | 12 | DC2 | R | Kursor nahoru | | 13 | DC3 | S | Kursor vpravo | | 14 | DC4 | T | Kursor vlevo | | 15 | NAK | U | Kursor Home | | 16 | SYN | V | Smazat obrazovku | | 17 | ETB | W | | | 18 | CAN | X | | | 19 | EM | Y | | | 1A | SUB | Z | | | 1B | ESC | [ | | | 1C | FS | \ | | | 1D | GS | ] | | | 1E | RS | ^ | | | 1F | US | - | | |-----|--------|-------|--------------------| str.77 A.2 Znázornění čísel ---------------------- Dvojková čísla bez předznamenání Rozsah hodnot pro jeden byte (8bitů) je : 0....255 (hex. 00....FF) S čísly se pracuje jako s obyčejnými dvojkovými čísly. |---------|-------------|---------|---------| | dual | hexadecimal | decimal | poznámka| | B7 B0| | | | |---------|-------------|---------|---------| | 11111111| FF | 255 | Maximum | | 11111110| FE | 254 | | | 11111101| FD | 253 | | | . | . | . | | | . | . | . | | | . | . | . | | | 00000010| 02 | 2 | | | 00000001| 01 | 1 | | | 00000000| 00 | 0 | Minimum | |---------|-------------|---------|---------| Větší čísla se kódují do více bytů. Pro 16-ti bitová čísla (2 byty) obnáší rozsah hodnot : 0.....65635 (hex. 0....FFFF) U počítačů se Z-80 se zpravidla ukládá do prvé paměťové buňky Low-byte (8 bitů vpravo) 16-ti bitového čísla, do druhé paměťové buňky pak High-byte (8 bitů vlevo), tak jak je to obvyklé i u počítačů s jinými procesory (6502,8080). Dvojková čísla s předznamenáním -------------------------------- Rozsah hodnot pro předznamenaná 8 bitová čísla je : -128...+127 Pozitivní čísla se znázorňují jako obyčejná dvojková čísla, negativni čísla v komplementární dvojici. Abychom obdrželi komplementární dvojici se obnos čísla odečte od nejvyššího možného čísla +1, tady FF+1=100. Toto znázorňování čísel používá Z-80 CPU k relativním skokům a pro indikované adresování. |----|---------|------|---------|-----------| | | dual | hexa | decimal | Poznámka | | B7 | B6 B0 | | | | |----|---------|------|---------|-----------| | 0 | 1111111 | 7F | +127 | Maximum | | 0 | 1111110 | 7E | +126 | | | 0 | 1111101 | 7D | +125 | | | . | . | . | . | | | . | . | . | . | | | . | . | . | . | | | 0 | 0000010 | 02 | +2 | | | 0 | 0000001 | 01 | +1 | | | 0 | 0000000 | 00 | 0 | | |----|---------|------|---------|-----------| str.78 |----|---------|------|---------|-----------| | 1 | 1111111 | FF | -1 | . | | 1 | 1111110 | FE | -2 | . | | 1 | 1111101 | FD | -3 | . | | . | . | . | . | Komplemen | | . | . | . | . | tární | | . | . | . | . | dvojice | | 1 | 0000010 | 82 | -126 | . | | 1 | 0000001 | 81 | -127 | . | | 1 | 0000000 | 80 | -128 | Minimum | |----|---------|------|---------|-----------| Bit B7 je bitem předznamenání B7=0 pozitivní B7=1 negativní Obnos negativního čísla je dán, když komplementární dvojice je odečtena od hex. 100. Příklad: Číslo -1 je znázorněno jako FF 100-FF=1 100-<číslo v komplementární dvojici>= Pro větší čísla je potřeba více bytů. Nejpřednější bit je i zde použit pro předznamenání a negativní čísla jsou tu znázorněny jako komplementární dvojice. Pro 16-ti bitová předznamenaná čísla (2 byte) je rozsah hodnot : -32768...+32767 (hex. 8000....7FFF) Výsledek obnosu negativního 16-ti bitového čísla dostaneme, když odečteme komplementární dvojici od hex. 10000. Decimální číslo znázorněné v BCD ---------------------------------- V podobě BCD (Binary Coded Decimal) jsou decimální čísla kódovány separátně v půlbytech duálně. |-----------|----------| | Decimální | Půlbyte | | číslo | binárně | |-----------|----------| | 0 | 0000 | | 1 | 0001 | | 2 | 0010 | | 3 | 0011 | | 4 | 0100 | | 5 | 0101 | | 6 | 0110 | | 7 | 0111 | | 8 | 1000 | | 9 | 1001 | |-----------|----------| Rozsah jednoho byte je 0....99. S čísly se pracuje jako s obvyklými BCD čísly. Hodnota 87 se např. znázorňuje takto : Decimální číslo: 8 7 Binární číslo: 1000 0111 str.79 |----------|------|---------|---------------| | dual | hexa | decimal | Poznámka | | B7 B0 | | | | |----------|------|---------|---------------| | | | | Maximum | | 10011001 | 99 | 99 | | | 10011000 | 98 | 98 | | | 10010111 | 97 | 97 | | | . | . | . | | | . | . | . | | | . | . | . | | | 00000010 | 02 | 2 | | | 00000001 | 01 | 1 | | | 00000000 | 00 | 0 | Minimum | |----------|------|---------|---------------| Větší čísla se kódují po dvou decimálních místech v jednom bytu.