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 <z> až <,> patří celým tónům první oktávy, klávesy <q>
až <i> 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. <CR> 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 <CR>,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  <CR>=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 <CR>
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   <MAX 80 
81A0:   5A 45 49 43 48 45 4E 29   ZEICHEN>
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 <S> se spouští stopky, klávesou <N> se stopky zastavují
a je přpraveno k dalšímu měření. Klávesou <CR> 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 <S> 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 <N> nebo <CR> 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í <S>
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 <CR>
8227:   C8     RET Z         Pak konec
8228:   FE4E   CP 4E         Když je to <N> 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..<S  Mezi 8260 a 8264 se
                                            počet sekund ukládá.
                                            Konec je značen 0D.
8268:   3E 3D 53 54 41 52 54 20   >=START   Mezi 8265 a 8288 Text,
8270:   3C 4E 3E 3D 4E 45 55 54   <N>=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   <CR>=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>=<obnos negativního
čísla>
     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.


