.. L ! ! ! ! ! ! ! ! ! ! ! R .pl 72 .he Ghid de utilizare DDT .fo # .uj 1 1. PREZENTARE GENERALA Programul DDT permite testarea si depanarea interactiva a progra melor. Programul DDT se lanseaza in executie prin una din comenzile: (1) DDT(CR) (2) DDT [dispozitiv:]nume-fisier.HEX(CR) (3) DDT [dispozitiv:]nume-fisier.COM(CR) unde: dispozitiv: - numele unitatii de disc (A - P) pe care se afla programul (fisierul). nume-fisier - numele programului care va fi incarcat in memorie si testat. Formele (2) si (3) realizeaza, in plus fata de forma (1), si incarcarea in memorie a programului (fisierului) specificat. Toate formele de apel DDT realizeaza incarcarea, de pe disc, a programului DDT, in locul componentei CCP (vezi si "Ghidul de interfata CP/M"). Dialogul cu programul DDT se face prin comenzi introduse de la consola. Dupa lansarea in executie a programului DDT si ori de cite ori DDT asteapta o comanda, la consola apare semnul "-". Comenzile DDT au forma generala: nume-comanda[parametri](CR) unde: nume-comanda - o litera parametri - 0, 1, 2 sau 3 valori hexazecimale separate intre ele prin blanc sau ",". Fiecare parametru poate contine 1 - 4 cifre hexa. Parametrii mai lungi de 4 cifre hexa sint trunchiati la dreapta. .cp 3 In timpul introducerii oricarei comenzi sint active caracterele de editare ale sistemului CP/M (ex: RUBOUT, CTRL/U, CTRL/R, etc.). .cp 2 Orice comanda DDT poate contine maximum 32 de caractere (al 33- lea caracter, automat inserat de catre DDT, este (CR)). .cp 6 Executia programului DDT poate fi oprita in orice moment prin introducerea caracterului CTRL/C sau prin intrerupere pe nivelul zero (reinitializare CP/M). Controlul trece in sistemul CP/M si imaginea-memorie a programului care a fost testat/depanat cu ajutorul DDT poate fi salvata pe disc cu ajutorul comenzii: .cp 7 SAVE n [unitate:]nume-fisier.COM unde: n - numarul de pagini de memorie (de cite 256 octeti fiecare) care trebuie salvate pe disc ("n" este expri mat in zecimal). unitate si nume fisier - numele unitatii de disc si al fisierului in care se va salva imaginea-memorie. .. L ! ! ! ! ! ! ! ! R NOTA "n" se calculeaza pornind de la valoarea octetului cel mai semnificativ din adresa afisata de DDT, ca adresa a primei locatii de memorie disponibila dupa ce programul de testat/depanat cu DDT-ul a fost incarcat in memorie. De exemplu, daca DDT afiseaza mesajul: NEXT PC 12A6 0100 atunci, 12A6 va fi adresa primei locatii de memorie disponibila, iar "n" va fi egal cu 18 (adica 12H). .. L ! ! ! ! ! ! ! ! ! ! ! R .cp 5 .pa 2. COMENZI DDT Programul DDT permite: - incarcarea de pe disc a unui program (fisier) de testat/depanat. - dezasamblarea programului cod-masina existent intr-o zona de memorie. - vizualizarea si/sau modificarea continutului unor locatii de memorie si/sau registre ale unitatii centrale. - corectarea unui program cod-obiect existent in memorie prin introducerea, la adrese specificate, a unor instructiuni in limbaj de asamblare (programul DDT realizeaza automat asam blarea acestora si introducerea codului-masina corespunzator in memorie). - lansarea in executie a unui program existent in memorie si controlul executiei acestuia. In prezentarea sintaxei/efectului comenzilor DDT se vor folosi urmatorii termeni: adresa - valoare hexazecimala (maximum 4 cifre hexa) ce indica o adresa absoluta de memorie. .cp 2 constanta - valoare hexazecimala reprezentabila pe un octet (maximum 2 cifre hexa). .cp 4 stare sistem - valoarea la un moment dat a registrelor generale (A, B, C, D, E, H, L), al registrelor SP si PC si a indicato rilor de conditie (Z, S, P, C, AC). .cp 6 .. L ! ! ! ! ! ! ! ! R NOTA Codificarea folosita de DDT pentru aceste elemente este: .uj 0 C - indicatorul C (carry) Z - indicatorul Z (zero) M - indicatorul S (sign) E - indicatorul P (parity) I - indicatorul AC (auxiliary carry) A - registrul A B - registrele B si C D - registrele D si E H - registrele H si L S - registrul SP P - registrul PC .uj 1 .. L ! ! ! ! ! ! ! ! ! ! ! R adresa de afisare - adresa de memorie incepind de la care va fi vizualizat continutul memoriei. adresa de dezasamblare - adresa de memorie incepind de la care va dezasamblare incepe procesul de dezasamblare. .. L ! ! ! ! ! ! ! ! R NOTA Operatia de dezasamblare consta in scrierea textului-sursa corespunzator continutului unor locatii de memorie (se presupune ca locatiile de memorie contin un program cod- masina). Exemplu: .uj 0 23 INX H 210001 LXI H,0100H 010304 LXI B,0403H .uj 1 .. L ! ! ! ! ! ! ! ! ! ! ! R .cp 14 2.1 Comanda D (display) (1) D(CR) (2) Dadresa(CR) (3) Dadresa1,adresa2(CR) Afiseaza la consola continutul unei zone de memorie. Forma (1) afiseaza la consola, incepind de la "adresa de afisare curenta", 16 linii a cite 16 octeti. Initial, adresa de afisare curenta este 100H. Aceasta "adresa de afisare" se modifica dupa fiecare comanda D (ia o valoare egala cu "adresa ultimei locatii afisate printr-o comanda D anterioara" + 1). .cp 2 Forma (2) afiseaza la consola 16 linii a cite 16 octeti incepind de la "adresa". .cp 2 Forma (3) afiseaza la consola continutul zonei de memorie cuprin sa intre "adresa1" si "adresa2". .cp 14 Formatul standard de afisare este: aaaa bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb cccccccccccc unde: aaaa - este o valoare hexazecimala ce indica adresa de inceput a zonei de memorie vizualizata. bb - este continutul in hexa al fiecarei locatii de memorie (incepind de la adresa "aaaa"). cc...c - este textul ASCII asociat configuratiei hexa bb...bb. .. L ! ! ! ! ! ! ! ! R NOTA Pentru codurile care corespund unor caractere netiparibile va apare caracterul "." In sirul "cc...c" vor apare (daca terminalul accepta acest lucru) si caractere minuscule si carac tere majuscule, in functie de codurile "bb". .. L ! ! ! ! ! ! ! ! ! ! ! R Afisarile prea lungi, pot fi oprite prin tastarea caracterului RUBOUT (DEL). .cp 6 2.2 Comanda F (fill) Fadresa1,adresa2,constanta(CR) Umple zona de memorie cuprinsa intre "adresa1" si "adresa2" cu constanta specificata. .cp 6 2.3 Comanda M (move) Madresa1,adresa2,adresa3(CR) Muta continutul zonei de memorie cuprinsa intre "adresa1" si adresa2" in zona care incepe la "adresa3". .cp 6 2.4 Comanda S (substitute) Sadresa(CR) Permite vizualizarea si/sau modificarea unor locatii de memorie incepind de la "adresa". Comanda afiseaza automat mesajul: aaaa bb unde "aaaa" este adresa locatiei curente iar "bb" este continutul acestei locatii. Daca utilizatorul introduce caracterul (CR) va apare afisata adresa si continutul urmatoarei locatii de memorie. Daca utilizatorul introduce o constanta (2 cifre hexa) si (CR), atunci va fi modificat continutul locatiei respective cu valoarea introdusa. Comanda S se termina atunci cind utilizatorul intro duce caracterul "." sau atunci cind s-a introdus eronat o con stanta. .cp 8 2.5 Comanda X (examine) (1) X(CR) (2) Xlitera(CR) permite vizualizarea si/sau modificarea starii curente a sistemu lui. Forma (1) afiseaza la consola: CxZxMxExIx A=bb B=dddd D=dddd H=dddd S=dddd P=dddd instructiune unde: x, bb, dddd - reprezinta valorile curente ale indica torilor de conditie si registrelor uni tatii centrale. instructiune - reprezinta textul sursa corespunzator instructiunii (cod-masina) de la adresa data in registrul P (PC-ul curent). Forma (2) permite vizualizarea/modificarea continutului unui indicator de conditie sau al unui registru. In aceasta forma "litera" este una din literele (C, Z, M, E, I, A, B, D, H, S, P) i indica numele indicatorului/registrului de vizualizat/modifi cat. In urma unei astfel de comenzi apare tiparit numele ele mentului implicat in comanda si valoarea lui curenta. Utilizato rul poate introduce: (1) (CR) - se termina comanda fara nici o modificare; (2) valoare(CR) - se modifica continutul elementului specificat si se termina comanda X. unde valoare este: 0 sau 1 - daca se modifica un indicator de conditie. 2 cifre hexa - daca se modifica A. 4 cifre hexa - daca se modifica registrele B - P. .cp 6 2.6 Comanda H (hexa) Hadresa1,adresa2(CR) Comanda calculeaza si afiseaza suma si diferenta hexa intre adresa1 si adresa2. .cp 8 2.7 Comanda G (go) (1) G(CR) (2) G,adresa2(CR) (3) G,adresa2,adresa3(CR) (4) Gadresa1(CR) (5) Gadresa1,adresa2(CR) (6) Gadresa1,adresa2,adresa3(CR) unde "adresa2", "adresa3" sint adrese de "puncte de intrerupere" (breakpoint) in executia unui program. Comanda realizeaza lansarea in executie a unui program existent in memorie. Executia programului incepe de la: - valoarea curenta a registrului PC (formele 1, 2, 3). - "adresa1" (formele 4, 5, 6). Executia programului se termina atunci cind: - continutul registrului PC este egal cu "adresa2" sau "adresa3" (formele 2, 3, 5, 6) - s-a executat instructiunea RST 7 (care intoarce controlul in DDT). - s-a executat o instructiune: RST 0 JMP 0 CALL 0 (care intoarce controlul in CP/M cu reinitializarea sistemului CP/M) Formele (2), (3), (5) si (6) permit executia controlata a unor programe (se specifica in comanda G adresa urmatorului punct de intrerupere). Oprirea executiei programului, ca urmare a atinge rii unei adrese de punct de intrerupere sau ca urmare a excutiei unei instructiuni RST 7 are ca efect aparitia la consola a mesa jului: *adresa unde "adresa" este valoarea PC-ului curent. Starea sistemului ramine nemodificata si utilizatorul poate vi zualiza/modifica continutul unor locatii de memorie/registre prin comenzile D, M, F, S, X. .. L ! ! ! ! ! ! ! ! R .cp 7 NOTA 1. Exista o forma particulara a comenzii G si anume: G0(CR) Aceasta comanda intoarce controlul, din DDT, in CP/M. 2. Daca un program se termina cu o instruc tiune RST 0 sau JMP 0 sau CALL 0 este indicat sa se inlocuiasca aceasta instructiune (numai pe perioada testarii/depanarii progragramu lui) printr-o instructiune RST 7; prin aceasta, la sfirsitul executiei programului, controlul va fi intors tot in programul DDT. Se poate evita efectuarea acestei modificari daca utilizatorul foloseste intotdeauna un "punct de intrerupere" pe adresa corespunza toare instructiunii RST 0/JMP 0/CALL 0. 3. In formele (3) si (6), daca s-a atins unul din punctele de intrerupere specificate prin "adresa2" si "adresa3", executia programului se suspenda, controlul trece in DDT si cela lalt punct de intrerupere prevazut (dar neatins!) este automat sters (nu ramine in continuare valabil!). .. L ! ! ! ! ! ! ! ! ! ! ! R .cp 9 2.8 Comanda T (trace) (1) T(CR) (2) Tn(CR) Aceasta comanda permite vizualizarea "starii curente a siste mului" (in formatul specific comenzii X) si executia uneia sau mai multor instructiuni din programul supus testarii. In urma unei comenzi T, executia programului se opreste si la consola apare mesajul: *adresa unde "adresa" este valoarea PC-ului curent si anume adresa urma toarei instructiuni de executat. "Adresa curenta de afisare" (folosita de catre comanda D) devine egala cu continutul registrelor H si L, iar "adresa curenta de dezasamblare" (folosita de catre comanda L) devine egala cu "adresa". Utilizatorul poate vizualiza "starea curenta a siste mului", dupa executia comenzi T, prin comanda X. Forma (1) a comenzii T permite vizualizarea starii curente a sistemului si executia unei instructiuni. Forma (2) a comenzii T permite executia a "n" instructiuni (n exprimat in hexazecimal), cu vizualizarea la consola a starii sistemului inaintea fiecarei instructiuni. Aceasta comanda se termina dupa executia a "n" instructiuni, la intilnirea unui "punct de intrerupere" (RST 7) sau atunci cind s-a introdus de la consola caracterul RUBOUT (DEL), care forteaza un "punct de intrerupere" in timpul comenzii T. .. L ! ! ! ! ! ! ! ! R .cp 6 NOTA Executia unui program cu comanda T se reali zeaza de aproximativ 500 de ori mai lent decit executia normala a programului, intru cit DDT preia controlul dupa fiecare instruc tiune executata. .. L ! ! ! ! ! ! ! ! ! ! ! R .cp 6 2.9 Comanda U (untrace) (1) U(CR) (2) Un(CR) Comanda U este similara ca functiune cu comanda T, cu exceptia faptului ca starea sistemului nu mai apare afisata la consola la fiecare pas intermediar (instructiune intermediara) ci doar inainte de executia primei instructiuni. .cp 10 2.10 Comanda L (list) (1) L(CR) (2) Ladr1(CR) (3) Ladr1,adr2(CR) Aceasta comanda permite listarea textului sursa (in limbaj de asamblare) asociat continutului unei zone de memorie. Formele (1) si (2) ale comenzii L permit listarea a 12 linii de text-sursa asociat zonei de memorie care incepe de la "adresa curenta de dezasamblare" (forma 1) sau de la "adr1" (forma 2). Prin forma (3) se listeaza textul-sursa asociat continutului zonei de memorie cuprinsa intre "adr1" si "adr2". Dupa executia comenzii L (orice forma), "adresa de dezasamblare" devine egala cu adresa primei locatii de memorie nedezasamblata; astfel "adresa de dezasamblare" este pregatita pentru executia ulterioa ra a altor comenzi L. Dupa intilnirea unui "punct de intreru pere", in timpul executiei unui program, "adresa de dezasamblare" devine egala cu valoarea curenta a registrului PC (vezi comenzile G si T). Dupa lansarea in executie a programului DDT, "adresa de dezasam blare" este initial stabilita la 100H. Comanda L poate fi intrerupta in timpul executiei prin introduce rea caracterului RUBOUT (DEL). .cp 8 2.11 Comanda A (assembly) Aadr(CR) Comanda permite introducerea in memorie, incepind de la adresa "adr", a unor instructiuni 8080. Instructiunile se introduc in format sursa (in limbaj de asamblare), ele continind mnemonice 8080 si operanzi: nume de registre sau constante numerice (valori absolute, exprimate implicit in hexa). .cp 2 Comanda A realizeaza automat asamblarea instructiunilor introduse si inscrierea codului-masina generat in memorie. .cp 5 Comanda A afiseaza permanent la consola adresa de memorie la care va fi introdusa noua instructiune specificata de utilizator. Comanda A se termina atunci cind s-a introdus de la consola o linie vida. .cp 3 Dupa executia comenzii A, utilizatorul poate revedea continutul zonei de memorie modificata, prin utilizarea comenzii L (pentru dezasamblare). .cp 7 EXEMPLU: -A109 (CR) 0109 JC 10D(CR) 010C INX H(CR) 010D (CR) - .. L ! ! ! ! ! ! ! ! R NOTA Comenzile A si L utilizeaza doua module ale programului DDT (un asamblor si un dezasam blor) care se gasesc dispuse in memorie deasupra nucleului programului DDT (la adrese mai mici decit acesta!). Zona de memorie asociata acestor module poate fi, in unele cazuri, reacoperita de catre programul supus testarii/depanarii (pentru programe de dimen siuni mari), fara ca utilizatorul sa fie avertizat printr-un mesaj la consola asupra faptului ca modulele DDT respective nu mai sint disponibile. In aceasta situatie, uti lizarea comenzilor L si A va produce aparitia la consola a caracterului "?", iar comenzile T si X nu vor mai contine textul-sursa aso ciat instructiunii cod-masina respective, ci chiar codul-masina respectiv (in format hexa). .. L ! ! ! ! ! ! ! ! ! ! ! R .cp 8 2.12 Comanda I (input) Ispecificator-individual(CR) Daca extensia fisierului specificat in comanda I este "HEX" sau "COM" atunci, in urma comenzii I, pot fi folosite comenzi de tip "R" (read) pentru incarcarea in memorie a programelor hexa sau absolute respective. Comanda permite utilizatorului sa introduca un specificator- fisier (un nume de fisier) in "blocul de control fisier" (FCB-ul) rezervat standard de CP/M la adresa 005CH (vezi si Manualul de interfata CP/M). Acest FCB poate fi utilizat de catre programul supus testarii/depanarii, el fiind initializat, prin comanda I, asa cum l-ar fi initializat componenta CCP. Specificatorul de fisier, prezent in FCB, este folosit de asemenea si de catre programul DDT pentru citirea ulterioara, a unor fisiere "HEX" sau "COM". .cp 10 2.13 Comanda R (read) (1) R(CR) (2) Radr(CR) Comanda R se utilizeaza impreuna cu comanda I (necesita o comanda I prealabila) si permite citirea de pe disc si incarcarea in memorie, in zona TPA, a fisierelor ".HEX" si ".COM" (fisiere ce contin un program de testat/depanat). Incarcarea programelor in memorie se face la o adresa egala cu "adresa de incarcare a fiecarui bloc", (specificata in fiecare inregistrare dintr-un fisier de tip ".HEX") sau incepind de la adresa implicita 100H (pentru fisierele de tip ".COM"). Operatia de incarcare a programelor in memorie nu trebuie sa afecteze zona 0000H - 00FFH (prima pagina de memorie), rezervata pentru para metrii sistemului CP/M (vezi si "Manualul de interfata CP/M). Forma (2) a comenzii R face ca programul sa fie incarcat la adresa specificata pe suport la care se aduna "adr" (pentru fisierele tip ".HEX") sau incepind de la adresa 0100H + "adr" (pentru fisierele de tip ".COM"). Parametrul "adr" reprezinta deci, o valoare de "deplasare" pentru incarcarea in memorie a programelor. Forma (1) a comenzii R este similara formei (2), in acest caz "adr" fiind implicit considerata 0000H. Utilizatorul poate folosi, in urma unei comenzi I, o singura comanda R pentru incarcarea in memorie a programului de tes tat/depanat. Daca se doreste reincarcarea programului, trebuie repetata comanda I. Orice fisier cu extensie "COM" se presupune a fi un program cod- obiect direct executabil (rezultat in urma unei comenzi LOAD sau SAVE) iar fisirul cu extensia "HEX" se presupune a fi un program cod-obiect in format hexa (rezultat, de exemplu, in urma unei comenzi ASM). Comanda de apel DDT de forma: DDT specificator-individual(CR) este echivalenta comenzilor: DDT(CR) Ispecificator-individual(CR) R(CR) Ori de cite ori se utilizeaza comanda R, programul DDT raspunde cu: a. mesajul NEXT PC nnnn pppp unde: nnnn - adresa primei locati de memorie disponibile dupa ce programul a fost incarcat. pppp - valoarea curenta a PC-ului (100H pentru fisierele tip ".COM" sau "adresa de lansare automata in executie a programului", preluata din ultima inregistrare a unui fisier tip ".HEX"). Acest mesaj indica faptul ca programul a fost incarcat corect. b. mesajul de eroare ? care indica faptul ca fisierul specificat nu poate fi deschis sau ca a aparut eroare de "cifra de control" in citirea unui fisier de tip ".HEX".