Sunteți pe pagina 1din 9

Laborator nr.

9
Prezentare generala a microprocesorului 8086. Registre. Moduri de adresare.
Asignare implicita a registrelor segment. Instructiuni
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 utilizabile pe 8 biti (octet): AH,AL,BH,BL,CH,CL,DH,DL.
- registre segment: CS,DS,ES,SS.

- registru de flag-uri, FR (indicatorii de conditii).

unde:
CF - carry flag, reprezinta indicatorul de transport, devine 1 daca operatia a
produs un transport de iesire din cel mai semnificativ bit al rezultatului. Acest
transport semnifica imprumut in cazul operatiei de scadere.
AF - auxiliary carry, reprezinta indicatorul de transport auxiliar, devine 1 daca
operatia a produs un transport de la bitul al 4-lea (D3) la bitul al 5-lea al rezultatului.
PF - parity flag, reprezinta indicatorul de paritate, devine 1 in urma operatiilor
logice daca rezultatul este par;
OF - overflow, reprezinta indicatorul de depasire, OF=1 indica depasirea,
adica alterarea bitului de semn;
DF - direction flag, indicatorul de directie, semnifica incrementarea/
decrementarea registrelor SI/DI in cazul instructiunilor iterative;
IF - interrupt flag, activeaza/dezactiveaza intreruperile externe;
TF - trap flag, permite executia instructiunilor pas cu pas;

SF - sign flag, indicator de semn, devine 1 daca bitul cel mai semnificativ al
rezultatului este 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 implicita a 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, utilizat si in operatiile de inmultie/
impartire pe 16 biti ;
SI - registru index sursa in operatii cu siruri de caractere;
DI - registru index destinatie operatii cu siruri de caractere;
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 (extra-segment de date);
SS - adresa de baza pentru segmentul de stiva;

Moduri de adresare a informatiilor din memori unui sistem de calcul:


Operatiile cu doi operanzi admit urmatoarele tipuri de perechi de operanzi:
- registru-registru;
- registru-memorie;
- registru-operand imediat;
- memorie-operand imediat;
Operanzii in memorie pot fi adresati astfel:
- direct, cu o adresa relativa in segment de 16 biti;

- indirect, printr-un registru de baza (BX,BP), optional cu o deplasare


de 8 sau 16 biti;

- indirect, printr-un registru de index (SI,DI), optional cu o


deplasare de 8 sau 16 biti; (vezi imaginea anterioar);
- indirect, prin suma continutului registrului de baza, cu cel al
registrului index, optional cu o deplasare de 8 sau 16 biti.

Relatia generala de calcul a adresei offset (deplasament - D) devine:


D = [BX/BP] + [SI/DI] + [D8/D16] ,

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 cazul deplasarilor pe 8 biti, acestea sint considerate ca numere cu
semn si se face extensia semnului pina la 16 biti, dupa care se executa
calculul adresei efective.

Observatii:
1. D reprezinta adresa relativa (offset) in cadrul unui segment, adresa fizica (AF)
fiind:
A = s * 16 + D ,
unde:
s reprezinta continutul registrului segment implicat in instructiune (s*16
similar cu deplasarea la stinga cu o cifra hexa !!).
2. Oricare din cei trei termeni poate lipsi.
3. Registrul segment utilizat implicit depinde de tipul operatiei si de
registrul 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
|
|______________________|_____________|______________________|

De ex:
MOV AX,8[BX][SI] va determina incarcarea in reg. AX a unui cuvint de la
adresa BX+SI+8 relativa la DS
MOV CX,[BP+5][SI] va determina incarcarea in reg. CX a unui cuvint de la
adresa BP+SI+5 relativa la SS
Utilizarea altui segment decit cel implicit va fi indicat printr-un prefix, astfel:
MOV BX,ES:758 care incarca in registrul BX cuvintul de la adresa ES:758.

1. Prezentare Turbo Debugger


Utilitarul Turbo Debugger este un produs al firmei Borland, destinat depanarii
aplicatiilor scrise in mediile de programare Borland, avind si posibibilitate 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 de
asamblare 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 drivere
dedicate;
- depanare aplicatii Microsoft Windows.
Cerinte:
- nu necesita coprocesor matematic;
- accepta programe .EXE compilate cu optiunea "full debugging
information"=ON sau programe .COM impreuna cu fisierul .TDS (fisier ce contine
informatii 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
fara o noua link-editare a acestuia; creeaza un fisier .COM si fisierul .TDS
corespunzator acestuia.
TDUMP.EXE - afiseaza continutul fisierului de intrare ( ex.: modul obiect
sau 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 obtine
informatii 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 limbaj de
asamblare;
- Reluare trasare (Back tracing);
- Executie pas cu pas (Stepping), procedurile si functiile nu se executa pas
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 in programul
de configurare TDINST un editor, acesta va putea fi folosit din meniul local 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+space
pentru =.
- Se revine din meniul curent in cel anterior apasind tasta Esc.
- Partea de jos a ecranului reprezinta linia de stare, contine permanent
informatii 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 face cu 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 fost lansata.
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 noi
variabile cu comanda CTRL-W.
- Breakpoints Window - afiseaza punctele de oprire setate, cu tipul
corespunzator (global sau local) si conditiile in care breakpoint-ul selectat se executa.
- Stack window - afiseaza starea curenta a stivei, prima functie apelata - in
partea inferioara a stivei. Folosind comanda Inspect (CTRL-I) se poate examina codul
sursa al oricarei functii din stiva. CTRL-L (din meniul local) deschide o fereastra ce
afiseaza variabilele globale unui program, variabilele locale ale unei functii, impreuna
cu argumentele lor de apel.
- Log Window - afiseaza o lista de mesaje si informatii generate si
memorate in timpul depanarii: motivele opririi programului, rezultatele breakpointurilor, etc.
- Variables Window - afiseaza variabile globale si locale pentru functia sau
modulul curent.
- File Window - afisare continutul unui fisier in format ASCII sau
hexazecimal.
- 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 Stack
Window;
- continutul registrelor CPU,
- starea indicatorilor de conditie CPU, ultimele doua ferestre CPU
fiind 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 a
flagurilor), permite modificarea acestora.
- NPU Window - afiseaza starea curenta a coprocesorului matematic,
contine 3 ferestre:
- continutul registrelor CPU;
- indicatorii de stare NPU;
- indicatorii de control NPU.

- Execution History Window - afiseaza codul in limbaj de asamblare si in


limbajul sursa, numarul instructiunii curente si starea curenta: trasare sau rulare 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 sint
dinamice, valoarea lor este actualizata permanent pe parcursul executiei programului.
Permite afisare, inspectare, stergere si "inghetare" valoare in Clipboard. Fiecarui
"obiect" introdus in Clipboard Turbo Debugger-ul ii asigneaza un atribut ce il
caracterizeaza, de ex.: String, Module, CPU code sau CPU 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 multor
ferestre de tipul Module, Dump sau File.
-Inspector Window -afiseaza valoarea curenta a datei selectate, inclusiv
pentru 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;

S-ar putea să vă placă și