Sunteți pe pagina 1din 4

Laborator 1: utilizarea utilitarei DEBUG pentru scrierea de programe simple

Sintaxa comenzilor DEBUG


A [ adres ] Permite editarea unui program n limbaj de asamblare, cu anumite restricii (nu se pot utiliza nume simbolice, deci toate adresele sunt absolute, iar toate constantele sunt specificate prin valori absolute, n hexazecimal, fr a fi urmate de litera h corespunztoare acestei convenii din limbajele de asamblare). Editarea se va ncepe de la adresa specificat sau, n caz contrar, de la adresa 100h n cadrul segmentului disponibil, cel mai de jos; pentru operatorii de conversie de tip: word ptr, byte ptr se pot utiliza formele prescurtate: wo i respectiv by. La nceputul fiecrei linii se afieaz adresa curent din memorie (segment : offset), i se ateapt introducerea de instruciuni, n limbaj de asamblare, terminate cu Enter (CR), dup care se reia editarea cu o linie nou. Pentru linia anterioar el genereaz codul main respectiv i indexeaz, n mod corespunztor, adresa urmtoarei instruciuni. Dac trebuie s se specifice un cmp al unei instruciuni (ca n cazul unei instruciuni de salt la o adres ulterioar), care nu este cunoscut n momentul introducerii liniei respective, se vor completa octeii corespunztori cu zero (sau alt valoare), iar dup editarea celorlalte linii, cnd cmpurile respective devin cunoscute, se poate reedita (reasambla), integral, numai instruciunea respectiv, prin specificarea adresei instruciunii. Dac se introduce o instruciune greit (eroare sintactic), editorul nu asambleaz linia respectiv i afieaz aceeai adres pe o linie nou, ateptnd introducerea de noi instruciuni, corecte. Revenirea n modul comand, din modul de editare, se realizeaz tastnd Enter (CR), cnd se afieaz pe o linie o nou adres, fr a mai edita nimic pe linia respectiv. Dac comanda nu este urmat de parametru 'adresa', se va continua asamblarea (editarea) de la adresa la care rmsese editarea anterioar. Exemplu : -A 5A2C:200 (CR) 5A2C:0200 _ C domeniu adres Compar zona de memorie specificat de 'domeniu' cu o zon, de aceeai dimensiune, ncepnd de la adresa specificat. Dac cele dou zone de memorie sunt identice nu se afieaz nimic, i se revine n modul comand din Debug. Dac exist diferene ntre cele dou zone de memorie se afieaz octeii diferii i adresele corespunztoare, din cele dou zone, n formatul: adresa_zona_1 Exemplu : -C 3AB2:100 200 300 - va compara coninutul zonei de memorie cuprins ntre adresele relative 100h i 200h, n segmentul care ncepe la adresa 3A2Bh, cu coninutul unei zone de aceeai lungime care ncepe de la adresa 300h, n acelai segment de memorie. D [ domeniu ] Afieaz coninutul zonei de memorie specificat prin 'domeniu'. Dac comanda nu este urmat de parametrul 'domeniu', atunci se afieaz 128 de octei, ncepnd de la afiarea anterioar. Afiarea se face n dou cmpuri: hexazecimal i ASCII. Pentru caracterele netipribile se afieaz '.'. Se afieaz pe fiecare linie adresa, coninutul hexa pentru 16 octei ncepnd de la adresa respectiv, separai n dou grupe prin -, iar dup aceea caracterele ASCII corespunztoare codurilor hexa, respective. Exemplu : -D 100 10f 3AB2:0100 30 41 42 43 44 45 46 47 - 38 39 4a 4b 4c 4d 4e 4f 0ABCDEFG89JKLMNO E adres [ list ] Comanda permite introducerea n memorie a unor valori de tip octet, ncepnd de la adresa specificat. Dac 'lista' nu este specificat se pot introduce valori octet cu octet. Debug afieaz adresa specificat i vechiul coninut i ateapt: - introducerea unei noi valori, dup care trece la adresa urmtoare, afind din nou vechiul coninut al acesteia; 1 octet_zona_1 octet_zona_2 adresa_zona_2

dac se tasteaz spaiu (blanc), atunci se trece la urmtoarea locaie de memorie, fr modificarea celei curente; dac se tasteaz - se revine la octetul anterior, pe care l tiprete pe o linie nou, precedat de adresa sa; dac se tasteaz Enter (CR), se ncheie comanda E.

F domeniu list Comanda permite umplerea unei zone de memorie cu valorile din 'lista'. Dac domeniul este mai mare dect lungimea listei, aceasta va fi depusa repetat n memorie pn se umple domeniul specificat. Dac lista este mai lung, valorile suplimentare din list sunt ignorate. G [ = adres [ adres adres ... ] ] Aceast comand permite execuia unui program; programul ncepe de la adresa specificat dup semnul =, care face deosebirea ntre adresa de start i celelalte adrese care reprezint puncte de breakpoint (de suspendare a execuiei programului n momentul n care sunt atinse). n cazul n care se ntlnete o astfel de adres, specificat n comand, se ntrerupe execuia programului i se afieaz adresa la care s-a ajuns, instruciunea executat, coninutul registrelor i a indicatorilor. Se pot specifica pna la 10 de astfel de adrese de breakpoint, dar numai la adrese ce conin primul octet al unei instruciuni. De fapt la adresele de beakpoint se plaseaz codul ntreruperii 3 (INT 3), care trateaz ntreruperea; n stiv trebuie sa fie disponibili cel puin 6 octei, deoarece se salveaz registrul indicatorilor, registrele segment i IP. Lansarea n continuare a programului se poate face doar cu comanda G, fr nici un parametru. Se evit, de obicei, acest mod de lansare n execuie deoarece se poate pierde controlul asupra calculatorului, dac programul nu este bine pus la punct. H valoare valoare Comanda furnizeaz suma i diferena, fr transport (mprumut), a celor doi parametri. Exemplu : -H 1234 ABCD BE01 6667 I valoare Citete i afieaz un octet de la portul specificat (valoare). L [ adresa [ disc nregistrare nregistrare ]] Comanda fr parametri ncarc n memorie, de la adresa CS:0100, un fiier al crui nume a fost specificat ntr-o comand N , anterioar; se va depune n BX:CX numrul de octei ncrcai. Dac se specific adresa, fiierul va fi ncrcat, n memorie, de la adresa specificat. Dac se utilizeaz comanda cu toi parametrii se vor ncrca, de pe disc, sectoare absolute n locul unui fiier. Unitatea de disc de la care se face citirea este specificat de cmpul 'disc'. Se va ncrca prima nregistrare specificat i se continu cu urmtoarele, pn cnd numrul de sectoare este egal cu cel de-al doilea parametru din comand. De exemplu: -L04BA:100 2 0F 6D se vor ncrca 109 (6Dh) nregistrri, ncepnd cu nregistrarea logic numrul 15 (0Fh), n memorie ncepnd cu adresa 04BA:0100. Parametrul adres este ignorat pentru fiierele .exe. Dac comanda L conine 'adresa', Debug o va aduna la adresa gasit n fiierul .exe, pentru a determina adresa de start la care se ncarc fiierul. M domeniu adres Comanda permite mutarea unui bloc de memorie, specificat de 'domeniu', ncepnd de la adresa specificat. Mutarea suprapus este fr pierdere de date, deoarece octetul de la adresa ce ar putea fi pierdut prin scriere peste el, este salvat primul. Adresele trebuie sa fie n ordine cresctoare. N nume_fisier Aceast comand realizeaz dou funcii : - asigneaz un nume de fiier pentru o comand L sau W, ulterioar. Dac s-a lansat Debug fr a se specifica numele unui fiier, atunci trebuie utilizat aceast comand nainte de ncrcarea sau scrierea unui fiier; - asigneaz parametrii nume_fisier la fiierul n depanare.

O valoare octet Transmite la portul de ieire specificat (valoare), octetul. Q Sfrit sesiune de lucru Debug; revenire MS-DOS.

R [ nume_registru ] Aceast comand, fr nici un parametru, afieaz coninutul tuturor registrelor i starea indicatorilor de condiii. Dac comanda este urmat de numele unui registru, se afieaz coninutul curent al acestuia i se poate modifica coninutul su.

Starea indicatorilor de condiii este afiat astfel :


Indicator OF DF IF SF Set(1) OV DN EI NG Clear(0) NV UP DI PL

ZF
AF PF CF

ZR
AC PE CY

NZ
NA PO NC

Indicatorii pot fi afiai separat, deci numai ei, prin comanda RF, i se pot modifica prin precizarea mnemonicii dorite a indicatorului respectiv. S domeniu list Se caut n 'domeniul' specificat 'lista' de octei. Lista poate conine unul sau mai muli octei, separai prin spaiu sau virgul. Comanda returneaz adresele la care este gsit lista de octei. T [ = adres ] [ valoare ] Aceast comand execut instruciune cu instruciune ncepnd de la adresa specificat dup semnul =, i afieaz coninutul tuturor registrelor, indicatorilor i urmtoarea instruciune de executat; dac parametrul 'valoare' lipsete, se va executa o singur instruciune, altfel se vor executa cte instruciuni specific acest parametru (hexazecimal). Dac comanda nu are nici un parametru se execut o singur instruciune, de la adresa curent din CS. De exemplu : -T=11A 10 va executa 16 instruciuni ncepnd de la adresa CS:011A. U [ adres ] Comanda dezasambleaz octei i afieaz declaraiile surs ce le corespund, mpreun cu adresele i valorile octeilor. Dac comanda nu este urmat de parametru sunt dezasamblai 32 octei, de la prima adres dup cea afiat de comanda U anterioar. W [ adres [ disc nregistrare nregistrare ] ] Scrie fiierul n depanare ntr-un fiier de pe disc, al crui nume a fost precizat ntr-o comand N, anterioar. n rest comanda este asemntoare, din punct de vedere al parametrilor i al semnificaiei acestora, cu comanda L. n registrele BX:CX trebuie s se specifice numrul de octei de transferat pe disc. Mesaje de eroare bf = s-au tastat caractere greite pentru indicatorii de condiii (bad flag); bp = s-au specificat prea multe puncte de breakpoint ntr-o comand G (too many breakpoints); br = nume gresit de registru (bad register); 3

df = s-au specificat dou valori diferite pentru acelai indicator (double flag).