Prezentare Turbo Debugger: facilitati, mod de utilizare ; Unitate centrala 8086:registre,
flaguri, memorie. Moduri de adresare. Spatii de adresare. Sintaxainstructiunilor
in limbaj de asamblare. Formatul intern al instructiunilor.Implementare de instructiuni
in Turbo Debugger.
1. Prezentare Turbo Debugger
Utilitarul Turbo Debugger este un produs al firmei Borland, destinatdepanarii
aplicatiilor scrise in mediile de programare Borland, avind siposibibilitate
de interfatare cu programe scrise in Microsoft (C, ASM).
Trasaturi:- mediu rapid, interactiv, facilitati de help dependente de context;-
accepta surse C, C++, Turbo Pascal versiune minima 5.0 si limbaj deasamblare
Tasm versiune minima 1.0;- facilitati de breakpoint si memorare (logging);-
reluare trasare (back tracing);- posibilitati de depanare hardware, pentru procesorul
80386;- depanare programe rezidente (Terminate and Stay Resident) si driverededicate;-
depanare aplicatii Microsoft Windows.
Cerinte:- nu necesita coprocesor matematic;- accepta programe .EXE compilate
cu optiunea "full debugginginformation"=ON sau programe .COM impreuna
cu fisierul .TDS (fisier ce contineinformatii despre tabela de simboluri) corespunzator.-
necesita existenta ambelor fisiere .EXE sau .COM si sursa.
Programe utile:
TDSTRIP.EXE - extrage informatia necesara pentru depanare din program farao
noua link-editare a acestuia; creeaza un fisier .COM si fisierul .TDScorespunzator
acestuia. TDUMP.EXE - afiseaza continutul fisierului de intrare (ex.: modul
obiectsau fisier .EXE in formate semnificative utile (ex.:ASCII); TDDEV.EXE
-afiseaza informatii despre driverele instalate;
Observatie:
Prin tiparirea oricaruia din numele programelor de mai sus se vor obtineinformatii
suplimentare despre acesta. Facilitati de depanare oferite de Turbo Debugger
Utilitarul Turbo Debugger permite:- Trasare (Tracing) - executia unei linii
sursa sau a unei linii in limbajde asamblare;- Reluare trasare (Back tracing)
;- Executie pas cu pas (Stepping), procedurile si functiile nu se executapas
cu pas ;- Vizualizare (Viewing) - vizualizare prin intermediul ferestrelor a:variabilelor,
continutului stivei, fisiere, cod Central Processor Unit (CPU),memorie, registre,
informatii Numeric Processor Unit (NPU), etc ;- Inspectare (Inspecting) - vizualizare
structuri complexe de date:vectori, uniuni, structuri ;- Modificare (Changing),
globala sau locala a valorii unei variabile; - Vizualizare pe timpul executiei
programului (Watching) ;
Nu permite:- nu are un editor incorporat; daca la instalare a fost specificat
inprogramul de configurare TDINST un editor, acesta va putea fi folosit din
meniullocal al ferestrei Module sau File ;- nu permite recompilarea sursei ;
Avantaje:- meniuri globale convenabile si logice;- meniuri locale sensibile
la context;- posibilitatea de a alege, seta si selecta optiuni;- posibilitate
de memorare a unui "istoric" a tastelor introduse;- posibilitate de
definire macrouri;- copiere si transfer intre ferestre;- lucru cu mouse-ul;-
meniuri de help "online" ;- reluare executie si memorare a "sesiunii"
curente;
Meniuri si ferestre de dialog:
- Meniul global - selectat cu F10, sau ALT+prima litera si ALT+spacepentru =.
- Se revine din meniul curent in cel anterior apasind tasta Esc. - Partea de
jos a ecranului reprezinta linia de stare, contine permanentinformatii de Help
relativ la linia selectata sau la fereastra curenta, inclusiv"hotkeys";
informatii suplimentare se obtin prin apasarea tastelor ALT si CTRL. - In cadrul
unei ferestre, trecerea dintr-o subfereastra in alta se facecu Tab, respectiv
Shift-Tab.
Important:- Fiecare fereastra are un meniu local specific, selectabil prin ALT-F10.-
Rezultatul unei comenzi depinde de contextul in care aceasta a fostlansata.
Ferestre Turbo Debugger
Exista doua surse posibile de ferestre: meniul View si meniul Data/ Inspect.Meniul
View poate genera urmatoarele ferestre:- Module Window - contine codul program
curent;- Watches Window - afisare variabile si expresii; permite adaugarea de
noivariabile cu comanda CTRL-W.- Breakpoints Window - afiseaza punctele de oprire
setate, cu tipulcorespunzator (global sau local) si conditiile in care breakpoint-ul
selectatse executa.- Stack window - afiseaza starea curenta a stivei, prima
functie apelata -in partea inferioara a stivei. Folosind comanda Inspect (CTRL-I)
se poateexamina codul sursa al oricarei functii din stiva. CTRL-L (din meniul
local)deschide o fereastra ce afiseaza variabilele globale unui program, variabilelelocale
ale unei functii, impreuna cu argumentele lor de apel.- Log Window - afiseaza
o lista de mesaje si informatii generate simemorate in timpul depanarii: motivele
opririi programului, rezultatelebreakpoint-urilor, etc.- Variables Window -
afiseaza variabile globale si locale pentru functiasau modulul curent.- File
Window - afisare continutul unui fisier in format ASCII sauhexazecimal.- CPU
Window - afisare stare curenta CPU, contine 5 ferestre:- instructiuni in limbaj
de asamblare;- date, implicit in format hexa, echivalenta cu Dump Window;- continutul
stivei, in cuvinte format hexa, echivalenta cu StackWindow;- continutul registrelor
CPU, - starea indicatorilor de conditie CPU, ultimele doua ferestre CPUfiind
echivalente cu Registers Window.- Dump Window -afisare zona de memorie pointata
de registrul DS curent,in diferite formate; permite manipularea blocurilor de
date.- Registers Window - afiseaza continutul registrelor CPU, (inclusiv aflagurilor),
permite modificarea acestora.- NPU Window - afiseaza starea curenta a coprocesorului
matematic, contine3 ferestre:- continutul registrelor CPU;- indicatorii de stare
NPU;- indicatorii de control NPU.- Execution History Window - afiseaza codul
in limbaj de asamblare si inlimbajul sursa, numarul instructiunii curente si
starea curenta: trasare saurulare pas cu pas.- Hierarchy Window - utilizata
in programarea orientata obiect;- Windows messages Window - utilizata la depanarea
aplicatiilor Windows.- Clipboard Window - toate "obiectele" introduse
in aceasta fereastra sintdinamice, valoarea lor este actualizata permanent pe
parcursul executieiprogramului. Permite afisare, inspectare, stergere si "inghetare"
valoare inClipboard. Fiecarui "obiect" introdus in Clipboard Turbo
Debugger-ul iiasigneaza un atribut ce il caracterizeaza, de ex.: String, Module,
CPU code sauCPU data, address, Coprocessor, Expression, etc. Avantajele acestei
ferestre:- memorare adrese ce vor fi folosite ulterior la comanda Goto;- analiza
valorii unei expresii pe timpul executiei programului;- memorare siruri in Log
Window;
- Another - Duplicate Windows -permite definirea simultana a mai multorferestre
de tipul Module, Dump sau File.- Inspector Window -afiseaza valoarea curenta
a datei selectate, inclusivpentru date complexe.
Observatii:- fereastra activa are chenarul cu =, cea inactiva -;- ALT-F3 inchide
fereastra curenta;- ALT-numar => fereatra 'numar' devine activa;- meniul
Window ofera comenzi de lucru cu ferestre;
2. Prezentare generala a microprocesorului 8086. Registre. Moduri de adresare.
Caracteristici generale ale familiei I8086: - specializarea functionala a circuitelor;
- posibilitati de lucru in sistem multiprocesor; - organizarea ierarhica a bus-urilor.
Microprocesorul I8086:
- realizat in tehnologie N-MOS; - impachetat in capsula cu 40 pini; - functioneaza
la o frecventa de 5..8 MHz - transfer de date pe 8 sau 16 biti; - adreseaza
direct o memorie maxima de 1Mo.
Registre accesibile utilizatorului: - registre generale pe 16 biti: AX,BX,CX,DX,
SP,BP,SI,DI. - registre segment: CS,DS,ES,SS. - registre utilizabile pe octet:
AH,AL,BH,BL,CH,CL,DH,DL.- registru de flag-uri, F.
-------------------------------------------------------- | - | - | - | - |OF|DF|IF|TF|SF|ZF|
- |AF| - |PF| - |CF| --------------------------------------------------------
CF - carry flag, reprezinta indicatorul de transport, devine 1 dacaoperatia
a produs un transport de iesire din cel mai semnificativ bit alrezultatului;
AF - auxiliary carry, reprezinta indicatorul de transport auxiliar, devine1
daca operatia a produs un transport de la bitul al 4-lea (D3) la bitul al 5-lea
al rezultatului. Acest transport semnifica imprumut in cazul operatiei descadere.
PF - parity flag, reprezinta indicatorul de paritate, devine 1 in urmaoperatiilor
logice daca rezultatul este par; OF - overflow, reprezinta indicatorul de depasire,
OF=1 indica depasirea,adica alterarea bitului de semn; DF - direction flag,
indica incrementarea/decrementarea registrelorSI/DI in cazul instructiunilor
iterative; IF - interrupt flag, activeaza/dezactiveaza intreruperile externe;
TF - trap flag, permite executia instructiunilor pas cu pas; SF - sign flag,
devine 1 daca bitul cel mai semnificativ al rezultatuluieste 1; ZF - zero flag,
devine 1 daca rezultatul operatiei anterioare este nul.
Registrele generale sint utilizate ca surse si/sau destinatie pentru operanzi.
Sint prezentate in continuare citeva exemple de utilizare implicitaa registrelor
I8086:
AX - operatii aritmetice si operatii de I/O pe 16 biti ; BX - conversii cod
si registru de baza de adresare ; CX - contor ciclu pentru operatii pe siruri
de caractere si bucle ; CL - contor pentru intructiuni deplasare ; DX - registru
de adresare indirecta a porturilor de I/O ; SI - registru index sursa - operatii
cu siruri de date ; DI - registru index destinatie - operatii cu siruri de date
; CS - adrese de baza ale segmentelor pentru codurile instructiunilor ; DS -
adrese de baza ale segmentelor pentru operanzi ; ES - adrese de baza ale segmentelor
pentru operanzi ; SS - segmentul stivei; ES - extra-segment de date;
Operatiile cu doi operanzi admit urmatoarele tipuri de perechi deoperanzi: -
registru-registru ;- registru-memorie ;- registru-operand imediat ;- memorie-operand
imediat ;
Operanzii in memorie pot fi adresati:
- direct, cu o adresa relativa in segment de 16 biti; - indirect, printr-un
registru de baza (BX,BP), optional cu o deplasare de8 sau 16 biti; - indirect,
printr-un registru de index (SI,DI), optional cu o deplasarede 8 sau 16 biti;
- indirect, prin suma continutului registrului de baza, cu cel alregistrului
index, optional cu o deplasare de 8 sau 16 biti.
Relatia generala de calcul a adresei efective, EA, devine : EA = aBX/BPi + aSI/DIi
+ aD8/D16i ,
unde : BX, BP, SI, DI reprezinta valorile continute in registrele respective,interpretate
ca numere binare cu 16 biti, fara semn; / semnifica alegerea unuia dintre cele
doua elemente; D8/D16 -operanzi numerici de deplasare, pe 8 respectiv 16 biti.
In cazuldeplasarilor pe 8 biti, acestea sint considerate ca numere cu semn si
se faceextensia semnului pina la 16 biti, dupa care se executa calculul adreseiefective.
Observatii:
1. EA reprezinta adresa relativa (offset) in cadrul unui segment, adresa fizicafiind:
A = SEG * 16 + EA ,unde SEG reprezinta continutul unui registrusegment.2. Oricare
din cei trei termeni poate lipsi.3. Registrul segment utilizat implicit depinde
de tipul operatiei si deregistrul utilizat ca adresa de baza sau index:
____________________________________________________________| | | | | Adresa
efectiva (EA) | RS implicit | Alte RS utilizabile ||______________________|_____________|______________________|
| | | | | D | DS | CS,SS,ES | | BX + SI + D | | | | BX + DI + D | | ||______________________|_____________|______________________|
| | | | | BP + SI + D | SS | CS,DS,ES | | BP + DI + D | | | |______________________|_____________|______________________|
| | | | | SI + D | DS | | | DI + D | | ||______________________|_____________|______________________||
| | || BP + D | SS | CS,DS,ES ||______________________|_____________|______________________||
| | || BX + D | DS | CS,DS,ES ||______________________|_____________|______________________|
Utilizarea altui segment decit cel implicit va fi indicat printr-un prefix,
astfel:
Exemplu: MOV BX,ES:758,
care incarca in registrul BX cuvintul de la adresa ES:758.3. Formatul instructiunilor
Formatul instructiunilor:
aeticheta:i Mnemonica operanzi a;comentariui, unde:
- a i arata ca elementele incluse sint optionale (eticheta si comentariul) ;-
mnemonica este numele simbolic al instructiunii; - cimpul operanzi poate contine
doi operanzi, unul sau nici unul, infunctie de tipul instructiunii ; identifica
datele asupra carora actioneazainstructiunea, modul de adresare si alte informatii
auxiliare. - tipuri de operanzi:
- registru; - locatie de memorie, adresa acesteia aflindu-se fie intr-unregistru
fie in memorie;- imediat;
Codul obiect asociat unei instructiuni a microprocesorului 8086 are 1..6octeti,
la care se mai pot adauga 1..2 octeti pentru prefixe speciale(modificare explicita
registru segment, repetare instructiune).
Exemplu:
Echivalentul in cod obiect pentru instructiunea MOV BETA aBXiaDIi,ALeste urmatorul:
|------------------------------------------------------------||1 0 0 0 1 0 |0|0
|1 0 | 0 0 0 | 0 0 1 |ADRESA DEPLASARE BETA| |COD OPERATIE|D|W |MOD | REG |
R/M | LOW | HIGH | |------------------------------------------------------------|
Se considera ca formatul obiect al instructiunilor e reprezentat pe osecventa
de octeti dispusi consecutiv astfel:
- Octetul 1: contine codificarea codului operatiei. Tot in acestoctet mai e
prezenta informatia referitoare la natura operanzilor. - Octetul 2:contine informatii
despre operanzi. - Octetii 3-6:sint optionali, cu informatii despre:
- deplasarea operanzilor; - moduri de adresare; - operanzi imediati (constante);
OCTETUL 1
COD OPERATIE: tipul instructiunii si implicit modul in care vor fi alocatesemnificatii
celorlalte cimpuri ;
D: indicator al destinatiei datelor:
D=0: destinatia e data de MOD si R/M ; D=1: destinatia e data de REG ;
W: indicator al tipului de transfer:
W=0 : operatie la nivel de octet ; W=1 : operatie la nivel de cuvint ;
OCTETUL 2
R/M = indica registrul care contine operandul sau specifica modul decalcul al
EA ; REG = registrul utilizat; MOD = contine informatii asupra deplasarii si
semnificatia cimpului R/M; DISP = deplasare, pe 8 sau 16 biti;
Registrele de baza si index specificate de R/M pentru operanzi in memorie(MOD
diferit de 11):
R/M Adresa operand REG W=0 W=1 ------------------------- ------------------------
000 (BX)+(SI)+DISP 000 AL AX 001 (BX)+(DI)+DISP 001 CL CX 010 (BP)+(SI)+DISP
010 DL DX 011 (BP)+(DI)+DISP 011 BL BX 100 (SI)+DISP 100 AH SP 101 (DI)+DISP
101 CH BP 110 (BP)+DISP 110 DH SI 111 (BX)+DISP 111 BH DI
In cazul instructiunilor speciale, gen prefix de segment, registrele sintcodificate
pe 2 biti astfel: |0|0|1|r|1|1|0|, unde r codifica registrul de segment, astfel:
rREG. SEGMENT ------------------ 00 ES 01 CS 10 SS 11 DSMod = specifica modul
de calcul al deplasarii:
MOD 00-DISP absenta(*)-cu o exceptie!; 01-DISP8 (pe 8 biti) cu semn extins la
16 biti; 10-DISP16; 11-cimpul R/M este tratat drept cimp indicator de registre;
Observatii: - daca MOD=00 si R/M=110 octetii 3 si 4 contin adresa operandului.
- conventie Intel: in cazul dispunerii opeanzilor pe 16 biti in sir deocteti
pozitia lor va fi: |octet low|octet high|.
Intrebari si exercitii:
1. Care este dimensiunea maxima a unui segment de memorie? Dar dimensiuneamaxima
de memorie ce poate fi "vazuta" de 8086?2. Scrieti in TD o secventa
de instructiuni care sa incarce continutulregistrului AX in memorie la adresa
DS:400. Verificati cu TD.
3. Considerati ca segmentele procesorului 8086 se pot suprapune in memorie?Argumentati.
4. Analizati cu TD efectul urmatoarelor instructiuni de transfer:
MOVAX,100 MOVAX,a100i MOVAX,DS:a100i MOV AX,CS:a100iSpecificati tipul de adresare.
5. Microprocesorul 8086 contine in DS 0A010h . Se intentioneazaadresarea locatiei
de la adresa absoluta 0AA000h . Ce deplasare trebuieadaugata continutului lui
DS ?
6.Registrul CS contine 500Fh. Un program in limbaj masina incepe la adresa 0100Bh
in cadrul segmentului de cod. Care esteadresa absoluta a acestui inceput de
program ?