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 ENTERToto 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.