GENSnav.5                                            TASWORD TWO
PRILOHA 2  REZERVOVANA SLOVA, MNEMONIKA ATD.
Zde je uveden seznam rezervovanych slov v  ramci  GENS  3.  Tyto
symboly nesmeji byt pouzity jako navesti, ale mohou tvorit  cast
navesti. Vsimnete si, ze rezervovana slova jsou tvorena  velkymi
pismeny.
A     B     C     D     E     H     L     I     R     $
AF          AF'         BC          DE          HL         IX
IY          SP          NC          Z           NZ         M
P           PE          PO
Nyni nasleduje seznam platne mnemoniky  Z80,  prikazu  a  povelu
assembleru. Rovnez tato musi byt vkladana velkymi pismeny.
ADC    ADD     AND     BIT     CALL    CCF    CP     CPD    CPDR
CPI    CPIR    CPL     DAA     DEC     DI     DJNZ   EI     EX
EXX    HALT    IM      IN      INC     IND    INDR   INI    INIR
JP     JR      LD      LDD     LDDR    LDI    LDIR   NEG    NOP
OR     OTDR    OTIR    OUT     OUTD    OUTI   POP    PUSH   RES
RET    RETI    RETN    RL      RLA     RLC    RLCA   RLD    RR
PRA    RRC     RRCA    RRD     RST     SBC    SCF    SET    SLA
SRA    SRL     SUB     XOR
DEFB   DEFM    DEFS    DEFW    ELSE    END    ENT    EQU    IF
ORG
*D     *E      *H      *L      *S      *C     *F
PRILOHA 3  FUNKCNI PRIKLAD
Nyni nasleduje  priklad  typickeho  pouziti  GENS  3  -  jste-li
zacatecnik programovani v assembleru nebo jste-li trochu nejisti
v pouzivani editor/assembleru, pak doporucujeme  pozorne  projit
tento priklad. Vsimnete si, ze ENTER oznacuje, ze mate stisknout
ENTER na klavesnici.
Cil cviceni:
Napsat a vyzkouset rychlou rutinu pro nasobeni  celych  cisel  a
ulozit jeji text na pasku pomoci prikazu editoru 'T', aby  mohla
byt lehce vlozena do pozdejsich programu.
Postup cviceni:
1. Napsat rutinu nasobeni jako podprogram a ulozit ji  na  pasku
pomoci prikazu editoru 'P', aby mohla byt  lehce  znovu  nahrana
pri tomto cviceni pro odstraneni chyb, pokud se vyskytnou.
2. Odstranit chyby v podprogramu, upravit pokud bude treba.
3. Ulozit bezchybny podprogram na pasku pouzitim prikazu editoru
'T', tak aby mohl byt 'vlozen' do pozdejsich programu.
Nez zacneme musime nahrat GENS  3  do  pocitace  -  udelejte  to
vlozenim LOAD ""CODE 24064 k ulozeni assembleru na adresu 24064.
Nyni vlozte RANDOMIZE USR 24064 a jako odpoved na dotaz  'Buffer
size?' vlozte 1 nasledovanou ENTER, tim  se  vytvori  'vkladaci'
pamet velikosti 1*256 bytu. Nyni se objevi '>' - jste v  editoru
pripraveni vytvorit program.
Cast 1 - napsani rutiny pro nasobeni.
Pouzijeme prikazu editoru 'I' k vlozeni textu  uzitim  CI  (znak
tabelace) k ziskani tabelovaneho zobrazeni. Nemusime pouzit CI a
ziskame vzdy vypis tabelovany. Neni oznaceno kde je  pouzit  CI,
ale predpokladame,  ze  pred  mnemonikou  a  mezi  mnemonikou  a
oprandem. Uvedomte si, ze adresy uvedene ve  vypisu  assembleru,
ktery nasleduje, nemusi odpovidat adresam  vytvorenym  na  vasem
pocitaci; jsou uvedeny pouze pro ilustraci.
   110,10 ENTER
     10 ;A fast integer multiply ENTER
     20 ;routine. Multiplies HL ENTER
     30 ;by DE. Return the result ENTER
     40 ;in HL. C flag set on an ENTER
     50 ;overflow. ENTER
     60 ENTER
     70        ORG  #7F00 ENTER
     80 ENTER
     90 Mult   OR   A ENTER
    100        SBC  HL,DE ;HL>DE ENTER
    110        ADD  HL,DE ENTER
    120        JR   NC,Mu1 ;yes ENTER
    130        EX   DE,HL ENTER
    140 Mu1    OR   D ENTER
    150        SCF ;overflow if ENTER
    160        RET  NZ ;DE>255 ENTER
    170        OR   E ;times 0?ENTER
    180        LD   E,D ENTER
    190        JR   NZ,MU4 ;no ENTER
    200        EX   DE,HL ;0 ENTER
    210        RET ENTER
    220 ENTER
    230 ;Main routine. ENTER
    240 ENTER
    250 Mu2    EX   DE,HL ENTER
    260        ADD  HL,DE ENTER
    270        EX   DE,HL ENTER
    280 Mu3    ADD  HL,HL ENTER
    290        RET  C ;overflow ENTER
    300 Mu4    RRA ENTER
    310        JR   NC,Mu3 ENTER
    320        OR   A ENTER
    330        JR   NZ,Mu2 ENTER
    340        ADD  HL,DE ENTER
    350        RET ENTER
    360 CC
  >P10,350,Mult ENTER
Toto vytvori text a ulozi jej na pasku. Pamatujte, ze magnetofon
musi byt spusten pred vlozenim prikazu 'P'.
Cast 2 - odstraneni chyb v programu
Nejprve  se  presvedcime,  zda  probehla   spravne    kompilace.
Pouzijeme cinnosti 6, takze se neprovede vypis  a  nevytvori  se
strojni kod.
>A ENTER
Table size: ENTER   (standardni hodnota velikosti tabulky symb.)
Options: 6 ENTER
*HISOFT GENS3 ASSEMBLER*
 Copyright Hisoft 1983
  All Rights Reserved
Pass 1 errors: 00
Pass 2 errors: 00
*WARNING* MU4  absent
Table used:     74  from    161
>
Z teto kompilace vidime, ze jsme udelali chybu  v  radku  190  a
vlozili MU4 namisto Mu4, ktere je pouzite navesti. Upravime tedy
radek 190:
>F190,190,MU4,Mu4 ENTER
  190        JR   NZ,  (nyni uzijte povelu 'S')
>
Nyni provedeme kompilaci jeste jednou a ta by mela byt bez chyby
a musime vlozit kod pro odzkouseni rutiny:
>N300,10 ENTER   (precislovani pro vlozeni dalsiho textu)
>110,10 ENTER
   10 ;kod pro zkouseni ENTER
   20 ;the Mult routine. ENTER
   30 ENTER
   40        LD   HL,50 ENTER
   50        LD   DE,20 ENTER
   60        CALL MULT ;Multiply ENTER
   70        LD   A,H ;o/p result ENTER
   80        CALL Aout ENTER
   90        LD   A,L ENTER
  100        CALL Aout ENTER
  110        RET ;Return to editor ENTER
  120 ENTER
  130 ;Routine to o/p A in hex ENTER
  140 ENTER
  150 Aout   PUSH AF ENTER
  160        RRCA ENTER
  170        RRCA ENTER
  180        RRCA ENTER
  190        RECA ENTER
  200        CALL Nibble ENTER
  210        POP  AF ENTER
  220 Nibble AND  %1111 ENTER
  230        ADD  A,#90 ENTER
  240        DAA ENTER
  250        ADC  A,#40 ENTER
  260        DAA ENTER
  270        LD   IY,#5C3A ;for ROM ENTER
  280        RST  #10 ;ROM call ENTER
  290        RET ENTER
  300 CC
>
Nyni zkompilujte zkusebni rutinu spolu s rutinou pro nasobeni.
>A
Table size: ENTER
Options: 6 ENTER
*HISOFT GENS3 ASSEMBLER*
 Copyright HISOFT 1983
  All rights reserved
7EAC  190        RECA
*ERROR* 02     (hit any key to continue)
Pass 1 errors: 01
Table used:    88  from   210
Mame chybu v teto rutine; RECA ma byt RRCA v radku 190. Tedy:
>E190
  190           RECA
  190            C(enter change mode)R ENTER ENTER
Nyni provedte kompilaci znovu pomoci cinnosti 4 (bez  vypisu)  a
text bude kompilovan bezchybne. Nyni jsme  pripraveni  vyzkouset
cinnost programu pro masobeni a je treba sdelit editoru odkud se
ma spustit program. To provedeme pseudoinstrukci ENT:
>35         ENT   $ ENTER
Nyni provedeme kompilaci jeste jednou a  mela  by  byt  ukoncena
zpravou:
Table used:     88   from    211
Executes: 32416
>
nebo podobnou. Nyni muzeme spustit program prikazem editoru 'R'.
Ocekavame nasobeni 50 krat 20 coz je 1000 nebo #3E8 hex.
>R ENTER
0032>
Nepracuje! Proc? Vypiste radky 380 az 500 (L380,500). Uvidite na
radku 430  instrukci  OR  D  nasledovanou  RET  NZ.  To  zpusobi
logickou operaci OR mezi registrem D a akumulatorem A a navrat s
chybou  (stavovy  registr  C  nataven)  v  pripade    nenuloveho
vysledku. Podstatou  toho  je  zjistit  zda  DE<256  a  nasobeni
nezpusobi preplneni - to se provede kontrolou zda D je nulovy...
ale OR pracuje spravne  jen  tehdy,  kdyz  akumulator  A  je  na
zacatku nulovy a toto zde neni zajisteno. Musime zajistit, aby A
byl nulovy pred provedenim OR D, jinak ziskame nepredpoveditelne
preplneni  s  navratem  vetsiho  cisla  nez  je  vysledek.   Pri
prohlidce kodu vidime, ze OR A  na  radku  380  muzeme  nahradit
instrukci XOR A a tim nastavit stavove registry pro SBC HL,DE  a
soucasne nulovat A. Takze:
>F380 ENTER
  380 Mult     OR   A
  380          I(enter insert mode)X ENTER ENTER
>
Nyni provedeme opet kompilaci (cinnost  4)  a  spustime  program
pouzitim 'R'. Odpoved by nyni mela byt spravna - #3EB.
Muzeme nyni provest dalsi kontrolu zmenou radku 40 a 50 ke zmene
cinitelu pak kompilovat a spustit - zjistime, ze rutina  pracuje
perfektne.
Po provereni rutiny ji muzeme ulozit  na  pasku  ve  'vkladacim'
formatu:
>T300,999,Mult ENTER
Nezapomente spustit  magnetofon  na  nahravani  pred  stisknutim
ENTER. Takto ulozena rutina muze byt vlozena do programu takto:
   500        RET
   510
   520 ;Vlozit rutinu Mult zde.
   530
   540 *F Mult
   550
   560 ;Dalsi rutina
Po kompilaci tohoto textu se objevi 'Start tape..',  kdyz  dojde
na radek 540 pri obou prubezich. Musite prehrat Mult z  pasky  v
obou pripadech. To znamena previnout pasek  po  prvnim  prubehu.
Muzete vsak na pasek nahrat Mult 2x za sebou a pro druhy  prubeh
pouzit druhou nahravku.
Prostudujte prosim peclive tento priklad a sami jej provedte.