MONSnav.2 TASWORD TWO
Priklad:
P
First:7000 RETURN
Last:77FF RETURN
With:55 RETURN
Zaplni prostor od &7000 do &77FF (vcetne) bytem &55 ('U').
Je-li pocatecni adesa vetsi nez koncova, prikaz se neprovede." Q "
Zmena sady registru.
Pri vstupu zobrazi 'celni panel' standardni sadu registru (AF,
HL, DE, BC). Prikaz 'Q' zobrazi sadu alternativnich registru
(AF', HL',DE',BC'), ktera se od standardni rady lisi apostrofem
za nazvem registru.
Prikaz ucinkuje i opacne.
" > "
Nastavi bod preruseni za beznou instrukci a pokracuje v
provadeni programu.
Priklad:
9000 B7 OR A
9001 C20098 CALL NZ,#9800
9004 010000 LD BC,0
9800 21FFFF LD HL,-1
Krokujte ve vyseuvedenem programu a dosli jste na adresu &9001 s
nenulovou hodnotou v registru A, takze nulovy indikator bude po
instrukci OR A ve stavu NZ (ne nula). Jestlize nyni pouzijete
pro dalsi krokovani prikaz ':' , pak provadeni programu bude
pokracovat na adrese podprogramu tj. &9800. Neprejete-li si
krokovat timto programem, pak pri dosazeni adresy &9001 zadejte
prikaz '^T' a instrukce CALL se provede automaticky a program se
zastavi na adrese &9004, abyste mohli pokracovat v krokovani.
Pamatujte si, ze ':' nastavuje bod preruseni za beznou
instrukci a pak zada prikaz 'K'.
Viz prikaz ':' v rozsirenem prikladu krokovani.
" T " ( funguje s chybami )
Dekompilace bloku programu s moznosti vystupu na tiskarnu.
Nejprve vas program vyzve ke vlozeni pocatecni ('First:') a
koncove ('Last:') adresy programu, ktery si prejete dekompilovat
- vlozte ji hexadecimalne, jak bylo podrobne vysvetleno v
kapitole 1. Je-li pocatecni adresa vetsi nez koncova, prikaz se
neprovede. Po vlozeni adres budete vyzvan naznakem 'Printer?';
odpoved 'Y' nasmeruje dekompilovany program na vasi tiskarnu -
jakakoliv jina hodnota jej odesle na obrazovku.
Pote jste vyzvani naznakem 'Text' ke vlozeni (hexadecimalne)
pocatecni adresy libovolneho textoveho souboru, ktery ma
dekompilator vyhotovit. Nechcete-li, aby byl generovan textovy
soubor, stisknete proste po naznaku RETURN . Udate-li adresu,
pak bude vyhotoven dekompilovany textovy soubor ve forme
pouzitelne pro EDTASM.
Jestlize jste zadali adresu textoveho souboru, budete pozadani o
adresu pracovni oblasti ('Workspace:') - to by mela byt adresa
volne oblasti pameti, ktera se vyuziva jako primitivni tabulka
symbolu pro veskera navesti generovana dekompilatorem.
Pozadovany objem pameti je 2 byty na kazde generovane navesti.
Pote budete opakovane zadani o prvni ('First:') a posledni
('Last:') - vcetne - adresu jakychkoliv datovych oblasti v ramci
bloku, ktery chcete dekompilovat. Datove oblasti jsou oblasti -
napr. textu, u kterych nechcete, aby byly interpretovany jako
instrukce Z80. Misto toho tyto datove oblasti vyvolaji
generovani assemblerovych prikazu DEFB. Je-li hodnota datoveho
bytu mezi 32 a 127 (&20 az &7F) vcetne, pak je udana
interpretace ASCII tohoto bytu, ktere nasleduji za DEFB, napr.
&41 se zmeni na "A". Kdyz jste ukoncili specifikovani datovych
oblasti nebo nechcete-li je specifikovat, stisknete proste
RETURN jako odezvu na oba naznaky.
Prikaz 'T' vyuziva oblast na konci MONS 3 k ukladani adres
datovych oblasti, a tak muzete urcit tolik oblasti, kolik je
dostupne pameti; kazda datova oblast vyzaduje 4 byty pameti.
Mejte na zreteli, ze pouziti 'T' rusi veskere body preruseni,
ktere byly predtim nastaveny viz prikaz 'V'.
Nyni se vymaze obsah obrazovky. Jestlize jste si vyzadali tvorbu
textoveho souboru, bude nasledovat kratka pauza (zavisi na
velikosti vyseku pameti, ktery chceme dekompilovat), behem ktere
se konstruuje tabulka symbolu. Jakmile je konstrukce skoncena,
objevi se vypis dekompilace na obrazovce nebo na tiskarne -
vypis muzete zastavit stiskem RETURN nebo SPACE na konci radku
a opet pokracovat stisknutim libovolne klavesy. Pri zastavenem
vypisu se lze stisnutim CTRL X vratit kzobrazeni celniho panelu.
Neplatny operacni kod je dekompilovan jako NOP a indikovan * za
vypisem operacniho kodu.
Kdyz je dekompilace ukoncena, stisknete libovolno klavesu k nav-
ratu do BASICU.
Navesti se generuji vsude, kde jsou na miste (napr. C30078) ve
formatu Lxxxx, kde xxxx je absolutni adresa (hex) navesti, ale
pouze v tom pripade, ze adresa je v ramci hranic dekompilace.
Je-li adresa mimo tento rozsah, navesti se negeneruje a uda se
pouze adresa, Napr. pri zpracovami oblasti &7000 - &8000 bude
instrukce C30078 dekompilovana jako JP #7800 . Jestlize je v
instrukci reference na urcitou adresu v ramci dekompilace, pak
jeji navesti se objevi v poli navesti (pred mnemonickou
zkratkou) dekompilovane instrukce na teto adrese - pouze vsak
kdyz je vypis smerovan do textoveho souboru.
Priklad:
T
First:8B RETURN
Last: 9E RETURN
Printer? Y
Text: RETURN
First: 95 RETURN
Last: 9E RETURN
First:RETURN
Last: RETURN
008B FE16 CP #16
008D 3801 JR C,L0090
008F 23 INC HL
0090 37 SCF
0091 225D5C LD (#5C5D),HL
0094 C9 RET
0095 BF524E DEFB #BF, 'R', 'N'
0098 C4494E DEFB #C4, 'I', 'N'
009B 4B4559 DEFB 'K', 'E', 'Y'
009E A4 DEFB #A4" U "
Pouziva se ve spojeni s prikazem 'O'.
Pamatujte si, ze prikaz 'O' aktualizuje zobrazeni pameti v
souladu s relativnim posunutim, tj. ukaze vysledek instrukci JR
nebo DJNZ. Prikaz 'U' se pouzije k aktualizaci zobrazeni pameti
zpet na miste, kde byl zadan posledni prikaz 'O'.
Priklad:
7200 47 71F3 77
7201 20 71F4 C9
>7202 F2< >71F5 F5<
7203 06 71F6 C5
Zobrazeni 1 Zobrazeni 2
Jste na zobrazeni 1 a prejete si vedet kam se vetvi relativni
skok 20F2. Stisknete tedy 'O' a zobrazeni se zmeni na 2. Ted
prosetrite instrukce, ktere nasleduji za &71F5 a prejete si
navrat k instrukci ktera nasleduje za puvodnim relativnim
skokem, abyste mohli zjistit, co se stane, kdyz je nastaven
nulovy indikator (Z). Stisknete tedy 'U' a dostanete opet
zobrazeni 1.
Povsimnete si, ze prikazem 'U' se muzete vratit pouze k mistu
posledniho zadani prikazu 'O'. Vsechny ostatni jsou ztraceny.
" V "
Pouziva se ve spojeni s prikazem 'X'.
'V' je podobny prikazu 'U' co do ucinku krome toho, ze
aktualizuje zobrazeni pameti v miste, kde byl zadan posledni
prikaz 'X'.
Priklad:
8702 AF 8420 18
8703 CD 842E A2
>8704 2F< >842F E5<
8705 44 8430 21
Zobrazeni 1 Zobrazeni 2
Jste na zobrazeni 1 a chcete se podivat na podprogram v miste
&842F. Stisknete tedy 'X' se zobrazenim soustredenem dle 1;
zobrazeni pameti se zmeni na 2. Prohlednete si tento program a
chcete se vratit k instrukci puvodniho volani podprogramu.
Stisknete tedy 'V' a znovu se zobrazi 1.
Stejne jako u prikazu 'U' se muzete vratit pouze na adresu, kde
byl zadan posledni prikaz 'X'. Vsechny predchozi jsou ztraceny.
" W "
Nastavi bod preruseni do pametoveho ukazatele.Bod preruseni je,
pokud se tyka MONS 3, prosta instrukce volani (CALL) programu v
MONS 3,ktfry zobrazi celni panel a tak umozni programatorovi
zastavit provadeni programu a zkoumat obsah registru a
indikatoru Z80,jakoz i prislusne oblasti pameti.
Takze chcete-li napr. zastavit provadeni programu na adrese
&9876, pak pouzijete prikaz 'M' k nastaveni pametoveho ukazatele
na &9876 a prikaz 'W' k nastaveni bodu preruseni na teto adrese.
Tri byty kodu, ktere byly puvodne na adrese &9876 se uchovaji a
nahradi instrukci CALL, ktera zastavi beh programu. Pri dosazeni
instrukce CALL se puvodni tri byty vrati na sve misto a zobrazi
se celni panel se vsemi registry a indikatory ve stavu tesne
pred bodem preruseni. Ted muzete pouzit vsechny moznosti MONS 3
obvyklym zpusobem.
Poznamky:
MONS 3 vyuziva oblast na svem konci, ktera puvodne obsahuje
adresy premisteni, pro ulozeni informace o bodech preruseni.
Tzn., ze muzete nastavit tolik bodu preruseni, kolik je pameti k
dispozici; kazdy bod preruseni vyzaduje 5 bytu. Po vykonani bodu
preruseni obnovi MONS 3 obsah pameti tak, jak byl pred
nastavenim bodu preruseni.
Vsimnete si, ze vsechny body preruseni se zrusi, kdyz pouzijete
prikaz 'T', protoze rovnez vyuziva tuto oblast. Body preruseni
lze nastavit pouze v RAM.
Jelikoz bod preruseni je tvoren tribytovou instrukci CALL je
treba venovat trochu pozornosti urcitym pripadum.
Priklad:
8000 3E 8008 00
8001 01 8009 00
8002 18 800A 06
8003 06 800B 02
>U004 AF < 800C 18
8005 0E 800D F7
8006 FF 800E 06
8007 01 800F 44
Kdyz nastavite bod preruseni na &8004 a zacnete provadet program
od &8000, pak do registru A se vlozi hodnota 1, program prejde
na &800A, do registru B se vlozi hodnota 2 a program prejde na
&8005. Ale adresa &8005 byla prepsana spodnim bytem bodu
preruseni a tim jsme zkomolili instrukci, ktera da
nepredpokladane vysledky. Tato situace je spise neobvykla, ale
musite se snazit ji zamezit - v tomto pripade vyhovi krokovani;
viz prikaz ':' dale.
" X "
Aktualizuje pametovy ukazatel hodnotou absolutni adresy mista
urceni instrukce CALL nebo JP.
'X' bere 16 bitovou adresu, urcenou bytem v pametovem ukazateli
a bytem v pametovem ukazateli + 1 a pote aktualizuje zobrazeni
pameti tak, ze je soustredeno kolem teto adresy. Pamatujte, ze
spodni polovina adresy je dana prvnim bytem a horni polovina
adresy druhym bytem - format INTEL.
Priklad:
Chceme se podivat na podprogram, ktery vola kod CD0563;
nastavime ukazatel pameti ('M') tak, aby adresoval 05 v
ramci instrukce CALL a stiskneme 'X'. Zobrazeni pameti se
soustredi kolem adresy &6305.
Viz tez prikaz 'V' v suvislosti s prikazem 'X'." Y "
Vlozit ASCII do pameti.
Prikaz 'Y' vygeneruje novy radek, na ktery muzete vkladat znaky
ASCII primo z klavesnice. Tyto znaky se zpetne kontroluji a
jejich hexadecimalni hodnoty se ukladaji do pameti od bezne
hodnoty pametoveho ukazatele. Retezec znaku se ma ukoncit CTRL
+ ; a DEL lze pouzit k vypusteni znaku z retezce.
Po vlozeni znaku a stisknuti CTRL ; se zobrazeni aktualizuje tak
ze pametovy ukazatel je umisten bezprostredne za koncem retezce.
" : "
Krokovani
Pred pouzitim ':'(nebo '>') musi byt jak citac instrukci (PC)tak
pametovy ukazatel nastaven na adresu instrukce, kterou chcete
provest.
':' pouze provede beznou instrukci a zaktualizuje celni panel
tak, aby odpovidal zmenam, ktere instrukce vyvolala.
Pamatujte, ze muzete krokovat kdekoliv v pameti (RAM nebo ROM),
ale musite zajistit, aby nebyla aktivovana preruseni.
Nyni nasleduje rozsahly priklad, ktery by mel objasnit pouziti
mnoha odladovacich prikazu dostupnych v MONS 3 - je nutne jej
peclive prostudovat a vyzkouset.
Predpokladejme, ze mame tri casti programu ve strojovem kodu
vlozene do pocitace (viz priklad). Prvni cast je hlavni program,
ktery plni registry HL a DE cisly a pak vola podprogram, ktery
cisla vynasobi (2. cast), a vysledek ulozi do HL, posleze 2x
vola podprogram, ktery vysle vysledek na obrazovku (3.cast).
A nyní si nahraj poslední část návodu !