Sunteți pe pagina 1din 28

REZOLVARI IOCLA PARTIAL 2010

1. Ce sunt asambloarele? Descrieti etapele procesului de asamblare. Asambloarele sunt programe care translateaza programele sursa, scrise in limbaj de asamblare, in cod masina. Operatia de asamblare se realizeaza in doi pasi: 1. La primul pas se genereaza o tabela de simboluri, ce va contine toate numele simbolice din program, exceptand numele simbolice externe (definite in alte module), instructiuni si directive de asamblare. In aceasta etapa asamblorul contorizeaza instructiunile si datele si asociaza numelor simbolice o pozitie relativa (deplasament) fata de inceputul programului, ca si cum programul ar incepe de la adresa 0. In realitate, programul nu se incarca in memoria RAM de la adresa zero, care este zona folosita de sistyemul de operare, ci adresa de la care se incarca este furnizata de sistemul de operare, in functie de spatiul de memorie disponibil; din acest motiv programul furnizat de asamblor este relocabil. 2. La pasul al doilea se obtine programul obiect, translatand instructiune cu instructiune programul si inlocuind in instructiunile respective numele simbolice cu valorile numerice asociate in tabela de simboluri. Programul executabil se obtine in urma etapei editarii de legaturi, care permite legarea mai multor module relocabile intr-un singur fisier; acest fisier va contine fisierul executabil, rezolvandu-se toate referintele incrucisate care au fost folosite in alte module.

2. Etapele parcurse pentru realizarea unui program n limbaj de asamblare.

3. Operatiile executate n mod repetat de procesor, la care se rezuma functionarea sa. (ciclurile realizate de procesor pentru executia unei instructiuni) 1. Citeste instructiunea pe durata acestui ciclu se transmite adresa instructiunii de executat si se aduce, din memorie, instructiunea in CPU (ciclul Fetch). 2. Decodifica instructiunea. 3. Transmite adresa si citeste un operand din memoriem daca se specifica in instructiune (ciclul Read) 4. Executa instructiunea (ciclul Execution). 5. Transmite adresa si scrie rezultatul in memorie, daca intructiunea o cere (ciclul Write). 4. Descrieti unitatile functionale ale unui procesor (286/386/486/Pentium). Cele patru unitati functionale ale procesorului 286 sunt: unitatea de adresare (AU), unitatea de interfata cu magistrala (BU), unitatea de decodificare instructiuni (IU) si unitatea de executie (EU). Unitatea de adresare(AU Address Unit) determina adresa fizica si contine un sumator de deplasament (offset), care determina deplasamentul in functie de modul de adresare si un sumator de adrese fizice (de 20 sau 24 biti, in functie de modul de lucru); aceasta determina adresa fizica, ca suma intre adresa de segment si offset. De asemenea, unitatea mai realizeaza diferite verificari (in modul protejat), verifica limita si dimensiunea unui segment si furnizeaza adresa de baza a segmentului; aceasta unitate este complet izolata de exterior. Unitatea de interfata cu magistrala (BU Bus Unit) contine circuite driver si latch pentru adrese, o unitate de citire anticipata a instructiunilor (PreFetcher), interfata cu extensia de procesor (extensia de procesor este un alt procesor specializat, cum ar fi procesul(?) de intrare/iesire sau coprocesorul matematic, devenit unitate in virgula mobila - FPU), logica pentru controlul magistralei, o coada de instructiuni (de 6 octeti) si realizeaza transmisia/receptia datelor. Luungimea cozii a fost aleasa astfel incat BU sa tina ocupata unitatea de executie cat mai mult timp posibil. De fapt, aceasta unitate realizeza comunicatia cu exteriorul. Unitatea de citire anticipata (prefetcher) a instructiunilor realizeaza functia de anticipare a programului. Atunci cand BU nu efectueza cicluri de magistrala (citire/scriere operand) pentru executia unei instructiuni, aceasta unitate utilizeaza BU pentru citirea secventiala, in avans a fluxului de instructiuni. BU lanseaza o cerere de citire (din memorie) de instructiune, imediat ce exista 2 octeti liuberi in coada de instructiuni; citirea instructoiunilor se face numai pe 16 biti, intr-un ciclu de acces la memorie. Daca, prin program, se citeste de la o adresa impara, BU citeste octetul de la adresa impara si apoi reia citirea a cate doi octeti de la adresele pare urmatoare. In general, BU contine cel putin un octet in coada de instructiuni, deci EU nu trebuie sa astepte executia instructiunilor. In coada sunt introduse instructiunile de la adresele imediat urmatoare instructiunii curente, reprezentand instructiunile ce urmeaza sa se execute, daca nu se intalneste o instructiune de transfer al controlului de program (salt). Daca, la un moment dat, se transfera controlul la alta locatie de memorie, coada este initializata, BU citeste instructiunea de la noua adresa, o transfera catre EU si incepe imediat citirea instructiunilor urmatoare. Unitatea de decodificare a instructiunilor (IU Instruction Unit) preia octetii din coada de instructiuni si ii translateaza in miocrocod. Instructiunile decodificate (in numar de trei) sunt puse intr-o coada, unde asteapta sa fie prelucrate de catre unitatea de executie (EU). Unitatea lucreaza in paralel cu celelalte unitati si incepe o noua decodificare in momentul in care o locatie din coada devine libera. Unitatea de executie (EU - Execution Unit) executa instructiunile din coada de instructiuni decodificate si comunica cu celelate unitati. Aceasta unitate implementeaza functiile de executie ale tuturor instructiunilor, furnizeaza adrese si date spre AU, respectiv BU, manipuleaza registrele generale si indicatorii de stare. Cu exceptia unor pini de control, EU este complet izolata de exterior. Cand EU este gata pentru executia unei instructiuni, citeste codul acesteia din coada de instructiuni decodificate gestionata de IU si apoi executa instructiunea. Cele doua unitati functioneaza asincron si se sincronizeaza in caz de coada goala sau coada plina. Daca in timpul executiei unei instructiuni EU necesita un acces la memorie sau la circuitele de I/O, se lanseaza o cerere de acces catre BU, care controleaza si efectueaza accesul la adresa furnizata catre AU. Daca o astfel de cerere apare in timp ce BU este intr-un ciclu de magistrala de citire a unei instructiuni, BU termina ciclul curent dupa care raspunde cererii de acces lansata de EU.

5. Structura interna a procesorului 286/386/486. 286

M/IO = separa ciclurile de memorie de cele I/O (1 = mem, halt; 0 = I/O, recunoastere intrerupere) cod/INTA, S1 S0 = semnale de stare a magistralei READY = termina ciclul de magistrala HOLD (bus HOLD request) = permite unui alt modul master (procesor) sa ceara controlul magistralei HLDA (bus HOLD Acnkowledge) PEREQ = Processor Extension operand REQuest PEACK = Processor Extension operand ACKnowledge INTR = INTerrupt Request NMI = Non Maskable Interrupt 386

486

Strucutra bloc a procesorului PENTIUM

6. Unitatile componente ale procesorului 386/486. Interfata cu magistrala (BIU - Bus Interface Unit) realizeaza legatura procesorului cu lumea externa. Orice alta unitate ce necesita date din exterior va solicita acestei unitati sa realizeze operatia respectiva. Pentru a realiza transferul datelor (la memorie sau la porturile de I/E), unitatea va furniza numai adrese fizice, deci adresele operanzilor trebuie, mai intai, sa treaca prin unitatea de segmentare si cea de paginare, daca este necesar. Unitatea de citire anticipata a instructiunilor (IPU - Instruction Prefetch Unit sau Code Prefetch Unit) are rolul de a rnentine plina coada de instructiuni; unitatea de decodificare extrage instructiunile din aceasti coada, de 16 octeti, ori de cate ori se elibereaza octeti din aceasta coada. Unitatea de anticipare lanseaza o cerere catre BIU pentru citirea altor octeti din memorie (cite 4 octeti la un ciclu de citire). Deci BIU este ocupata cu o cerere de la o alta unitate, atunci, dupa servirea unitatii respective, va fi luata in considerare si cererea unitatii de anticipare. Unitatea IPU este anuntata ori de cite ori unitatea de executie prelucreaza o instructiune de salt (CALL, JMP sau intrerupere) astfel incat ea poate incepe citirea instructiunilor de la noua adresa. In aceste situatii coada este reinitializata, pentru a evita ca unitatea de executie sa primeasca instructiuni ce nu sunt in secventa executata in mod curent. Unitatea de decodificare (IDU - Instruction Decode Unit). Aceasta unitate preia octeti individuali din coada de instructiuni si determina numarul de octeti necesari pentru a completa instructiunea urmatoare. O instructiune 80386 poate avea de la 1 la 16 octeti. Dupa extragerea intregii instructiuni din coada, unitatea reformuleaza codul operatiei intr-un format de instructiune intern si plaseaza instructiunea decodificata intr-o coada de instructiuni (decodificate), care este de 3 operatii. Unitatea de decodificare va semnala unitatea BIU daca instructiunea decodificata va necesita o referire la memorie. Aceasta permite operanzilor instructiunilor sa fie obtinuti anterior executiei instructiunilor. Unitatea de executie (EU - Execution Unit). Aceasta este acea parte din CPU (Central Processor Unit) care realizeaza calculele. Ea realizeaza diferite operatii (deplasari, adunari, inmultiri, impirtiri etc.) necesare pentru executia instructiunilor. Setul de registre se afla in aceasta unitate. Unitatea contine, de asemenea, o componenta logica denumita barrel shifter, care poate realiza deplasiri/rotiri multi-bit, intrun singur ciclu de ceas. Aceasta facilitate este utilizata de EU nu numai in instructiunile de deplasare, dar si pentru accelerarea inmultirilor si in generarea adreselor indexate. De asemenea, EU se adreseaza unitatii BIU, cand ea are datele necesare a fi transmise catre memorie sau magistrala de I/E. Unitatea de segmentare (SU - Segmentation Unit) transleaz adresele segmentate n adrese liniare. Timpul de translare a segmentului este aproape n ntregime ascuns de paralelismul arhitecturii procesorului 386. Timpul tipic este deci de 0 impulsuri de ceas, dar dac este necesar timp pentru translarea adresei, acesta este de cel mult 1 impuls de ceas. Unitatea de segmentare conine o memorie (cache) ce pstreaz informaii din tabela de descriptori pentru fiecare dintre cele 6 registre segment. Unitatea de paginare (PU - Paging Unit) primete adresele liniare generate de SU i le convertete n adrese fizice. Dac paginarea nu este activat (deci PU este dezactivat), adresa liniar de la SU devine adres fizic. Cnd paginarea este activat, spaiul de adrese liniar al procesorului 386 este mprit n blocuri de 4096 octei, denumite pagini. Fiecare pagin poate fi mapat (suprapus) la o adres fizic total diferit. Procesorul 386 utilizeaz o tabel de pagini pentru a translata fiecare adres liniar la o adres fizic. Unitatea conine un cache asociativ denumit tampon de translare a adresei liniare n adres fizicTLB (Translation Lookaside Buffer), care conine intrrile (adresele) pentru 32 de pagini, cel mai recent utilizate. Dac o intrare n tabela de pagini nu este gsit n TLB, un ciclu de citire din memorie pe 32 de bii aduce intrarea din memoria RAM. n condiii normale de operare, mai puin de 2% din toate referirile la memorie cer procesorului s caute n afara tabelei TLB o intrare n tabela de pagini. Timpul necesar pentru a realiza translaia este ntre 0 si 5 impulsuri de ceas. Datorit tabelei TLB, ntrzierea tipic este de 0,5 impulsuri de ceas. Unitatea in virgula mobila: dispunde de propria banda de asamblare cu trei niveluri pe langa cele doua benzi intregi ( U si V ). Instructiunile in virgula mobila trec prin banda de asamblare pentru intregi pana la faza EX, dupa care trec (in cel putin un impuls de ceas) prin cele trei niveluri ale benzii de asamblare pentru virgula mobila.

7. mbunatatiri aduse procesoarelor Pentium fata de procesorul 486. memoria cache distinct pentru instruciuni i pentru date (cte 8 Ko pentru fiecare); dou benzi de asamblare pentru numere ntregi (denumite U i V); prezicerea adreselor de salt (numit i predicie dinamic) folosind un tampon care reine aceste adrese de salt (BTB - Branch Target Buffer); unitatea de calcul n virgul mobil organizat ca band de asamblare; magistrala extern pe 64 de bii, deci ntr -un singur acces (impuls de ceas) la memorie se pot transfera cuvinte de 64 de bii; arhitectura intern mbuntit (superscalar) i algoritmii mbuntii (rapizi) pentru execuia instruciunilor FPU (cele n virgul mobil) ntr -un singur impuls de ceas sau dou instruciuni cu numere ntregi ntr-un singur impuls de ceas; folosirea paritii pentru magistrala de date i memoriile cache interne; monitorizarea performanelor; execuie pas cu pas; alte faciliti: modul de administrare al sistemului, extensie pentru mod virtual, suport biprocesor, gestionarea alimentrii; detecia erorilor i a integritii datelor. 8. Descrieti cteva (3-4) concepte noi utilizate la procesoarele Pentium. Band de asamblare (pipeline): mai multe instruciuni main sunt ncrcate secvenial ntr -o linie complex de prelucrare, asemntoare cu memoria FIFO (n locul celulelor de memorie, aici sunt automate secveniale, care efectueaz diferite modificri asupra datelor ce trec prin pipeline) sau cu o band de asamblare. Prin pipeline se sparg (transleaz) instruciunile n micro-operaii ce se execut n uniti separate. Rezultatul este asamblat i se trimite exteriorului. Dac s -au ncrcat date incorecte n structurile secveniale din pipeline (de exemplu la execuia speculativ ultimul salt a fost greit), atunci banda pipeline este golit i rencrcat cu date corecte; deci el conine toate operaiile/rezultatele ce se execut n acel moment n diferite stadii, n funcie de poziia lor n structura secvenial din pipeline. Microinstruciune: instruciunile n cod main sunt sparte n 1-4 microinstruciuni de lungime fix, care se execut cvasiparalel. Timpii lor de execuie sunt cunoscui i astfel elementele de prelucrare din pipeline pot face o planificare corect, n timp, a execuiei. Superscalar: procesoare cu mai multe benzi de asamblare, paralele, care pot executa mai multe instruciuni simultan, ntr-un singur impuls de ceas (Pentium II are dou benzi, U i V); nivelul superscalar reprezint numrul de instruciuni care se pot executa simultan. Se mai utilizeaz i termenul de superband de asamblare, care nseamn band de asamblare cu peste 10 niveluri (etape sau stagii). Executie dinamica: ise sparge codul operatiei in mai multe microoperatii de lungime fixa, care dupa o aranjare corespunzatoare se executa simultan,intru-un singur tact; se combina trei tehnici noi: predictia ramificarii, analiza fluxului de date si executie speculative. 9. Operatiile realizate de procesor pe durata unui ciclu de magistrala, pentru comanda altor dispozitive (memorie, echipamente de I/E). se activeaz pe magistrala de adrese adresa unei locaii de memorie sau a unui port I/O i se memoreaz ntr-un registru de adrese extern; se genereaz semnalul de comand corespunztor pentru citire/scriere date; dispozitivul selectat (memoria sau portul l/O) realizeaz transferul de date i tr ansmite procesorului un semnal de rspuns, pentru a ncheia ciclul. 10. Resursele procesorului (registrele sale, dimensiune, tipul lor, etc.)

11. Descrieti indicatorii din registrul indicatori (stare, control, speciali). Indicatori de stare: OF (Overflow Flag) - este poziionat pe 1 dac rezultatul unei operaii aritmetice depete domeniul de reprezentare (limita superioar/inferioar a acestuia) pentru numerele cu care se lucreaz, adic rezultatul nu poate fi memorat n destinaia stabilit de instruciune (de exemplu, mprirea prin zero sau adunarea/nmulirea a dou numere mari - la limita superioar a domeniului). SF (Sign Flag) - este indicatorul de semn al rezultatului unei operaii i, de fapt, coincide cu primul bit al rezultatului, fiind 1 dac numrul este negativ i 0 pentru pozitiv. ZF (Zero Flag) - este poziionat pe 1 dac rezultatul unei operaii aritmetice sau logice este zero, altfel 0 AF (Auxiliary carry Flag) - este 1 dac n urma execuiei unei instruciuni a aprut un transport din rangul 3 n rangul 4 sau un mprumut dinspre rangul 4 spre rangul 3. Acest indicator este utilizat pentru implementarea aritmeticii pentru numere zecimale codificate binar (BCD Binary Coded Decimal). PF (Parity Flag) - este poziionat pe 1 cnd numrul de uniti din rezultat este par (paritate par) CF (Carry Flag) - se poziioneaz pe 1 dac a aprut un transport sau un mprumut n/din rangul cel mai semnificativ al rezultatului, n urma execuiei unei instruciuni aritmetice. Indicatorii de control: DF (Direction Flag) - este utilizat de instruciunile pe iruri i specific direcia de parcurgere a acestora (0 parcurgere de la adrese mici spre adrese mari;1 invers) IF (Interrupt Flag) - acest indicator controleaz acceptarea semnalelor de ntrerupere extern. Dac IF = 1, este activat sistemul de ntreruperi, adic sunt acceptate semnale de ntrerupere extern (mascabile, pe linia INTR), altfel acestea sunt ignorate. Indicatorul nu are influen asupra semnalului de ntrerupere nemascabil - NMI. TF (Trace Flag) - este utilizat pentru controlul execuiei instruciunilor n regim pas cu pas (instruciune cu instruciune), n scopul depanrii programelor. Dac indicatorul este 1, dup execuia fiecrei instruciuni se va genera un semnal de ntrerupere intern (pe nivelul 1). Evident, execuia secvenei de tratare a acestor ntreruperi se va face cu indicatorul TF = 0. Indicatori speciali: IOPL (Input/Output Privilege Level) - acest indicator ocup doi bii i definete dreptul de a utiliza instruciuni de intrare/ieire (I/O). Aceste instruciuni, precum i instruciunile ce opereaz asupra lui IF, sunt denumite instruciuni sensibile la IOPL, deoarece ele nu pot fi executate dect dac CPL <=IOPL - procedura care execut aceste instruciuni trebuie s se execute la un privilegiu cel puin egal cu cel specificat de IOPL. NT (Nested Task) - este automat poziionat pe 1 sau O de operaiile de comutare de task; execuia unei instruciuni IRET, cu NT=1, realizeaz o comutare de task. La procesorul 386/486 acest registru (EF) are 32 bii, dintre care ultimii 16 sunt identici cu acetia, dar n plus mai sunt utilizai nc doi bii (16 i 17) care au urmtoarea semnificaie: RF (Resume Flag) - acest indicator dezactiveaz temporar excepiile de depanare (debug), astfel nct s se poat reporni o instruciune dup o excepie de depanare, fr a se genera imediat o alt excepie de depanare; adic nu se execut o instruciune de breakpoint, dac este returnat controlul de excepie de depanare direct la o astfel de instruciune. VM (Virtual 8086 Mode) - acest bit arat c se execut un program 8086, dac este poziionat pe 1.

12. Organizarea memoriei (modalitatea de memorare a datelor, instructiunilor, referirea la memorieadresa logica). Memoria este organizat ca seturi de segmente de lungime variabil. Fiecare segment este o secven continu, liniar de pn la 64 Koctei (2^16). Adresa fizic de nceput a unui segment este multiplu de 16. Fiecare segment este alctuit din locaii succesive de memorie i este o unitate independent i adresabil separat. Fiecrui segment i se asociaz o adres de baz, care este adresa de start, n spaiul memoriei. Segmentele, n modul real, pot fi adiacente, disjuncte sau suprapuse total sau parial. O locaie de memorie poate fi coninut n mai multe segmente. Unei locaii de memorie i se asociaz o adres fizic, de 20 sau 24 bii, care identific n mod unic locaia, i o adres logic (de fapt cu acestea lucreaz programatorul) care nu este unic. Adresa logic se compune dintr-un selector (adic adresa de baz a segmentului) i un deplasament fa de nceputul segmentului; practic aceeai adres fizic poate fi referit de mai multe adrese logice: modificnd n mod corespunztor deplasamentul, pentru o alt adres de baz a segmentului se poate accesa aceeai locaie de memorie, ca n figura. Din punct de vedere fizic, memoria este organizat sub forma a dou blocur i: blocul superior (high) este conectat la magistrala de date pe liniile D 15-D8, iar blocul inferior (low) conectat la liniile D 7-D0. Ambele blocuri sunt selectate n paralel, pe liniile de adres A19(A23)-A1; pentru accesul selectiv la octetul inferior, la cel superior sau la ambii octei simultan, deci la un cuvnt, se activeaz n mod corespunztor liniile A 1 i BHE\. Pentru procesoarele 386/486 poate fi considerat nc un bloc de memorie, conectat la liniile de date D31-D16, pentru a se putea citi i cuvinte de 32 bii. Pentru citirea/scrierea datelor de 16 sau 32 bii, memorate la adrese ce nu sunt multiplu de 2 sau 4, vor fi necesare dou cicluri de magistral, n loc de unul, dac datele sunt aliniate n memorie. Convenia de memorare a datelor multiplu de octei, 16, 32, 64 sau 80 bii, este: se ncepe cu octetul mai puin semnificativ la prima adres (cea mai mic) i se depun n continuare octeii urmtori, n ordinea crescnd a semnificaiei, terminnd cu octetul cel mai semnificativ la adresele urmtoare. O clas special de date este cea pe dublu cuvnt (32 bii), denumite i pointeri sau referine, utilizate pentru a adresa date i cod. i acestea se memoreaz dup aceeai regul: la adresa mai mic se afl deplasamentul (offset), iar la adresele urmtoare se afl adresa de segment a pointerului. 13.Generarea adreselor fizice n modul real de adresare. In acest mod, 80286 execut setul de instructiuni 8086. Memoria fizic este o reea continua de 1Mo, adresabil prin pinii A0A19 i BHE (A20-A23 pot fi ignorai). In acest mod, procesorul genereaz o adres de 20 bii, direct dintr -o adres de segment de baz de 20 bii i un offset de 16 bii, ca n figura . Poriunea selectorului unui pointer este interpretat ca primii 16 bii dintr -o adres de segment de 20 bii (ultimii patru sunt ntotdeauna zero). Adresele de segment sunt ntotdeauna multiplii de 16. n modul real de adresare toate segmentele au dimensiunea de 64 Ko. In modul real sunt rezervate dou zone de memorie, i anume: zona de iniializare a sistemului (FFFF0-FFFFFH) si zona tabelei de ntreruperi (00000H-003FFH).

14. Generarea adreselor fizice n modul protejat de adresare virtuala. Modul protejat utilizeaz pointeri de 32 bii, constnd dintr-un selector de 16 bii i un offset de 16 bii. Selectorul specific un index ntr-o tabel rezident n memorie, n loc de primii 16 bii ai adresei reale de memorie. Adresa de baz de 24 bii a segmentului dorit se obine de la tabelele din memorie. Deplasamentul se adun la adresa de baz a segmentului pentru a forma adresa fizic, ca n figura.

15. Modul de transformare a adresei logice n adresa fizica.

Din figura se observa cum procesorul converteste campurile DIR, PAGE si OFFSET ale unei adrese liniare de adresa fizica , prin consulaterea a doua tabele de pagini : campul DIR e un index intr-un director de pagini campul PAGE este un index intro tabela de pagini , determinata de directorul de pagina campul OFFSET este utilizat pentru a realiza o adresare in pagina determinata de tabelele de pagina 16. Formatul unui selector. Modul de calcul al spatiului virtual de memorie gestionat de procesor.

RPL - (Requested Privilege Level) - nivelul de privilegiu dorit; TI - (Table Indicator) - acest bit face selecia ntre tabela de descriptor global/local. Ceilali bii (15-3) selecteaz intrarea respectiv din tabel. Deci biii RPL, din cmpul 1+0, nu sunt implicai, de fapt, n selectarea i specificarea segmentelor. Ceilali 14 bii rmai din componena selectorului desemneaz n mod unic un segment particular. Spaiul de adres virtual al unui program va fi format din cel mult 2^14 segmente distincte, ntruc t dimensiunea maxim a unui segment este de 64 Koctei (2^16), rezult c spaiul virtual de adres al unui program poate ajunge la 1 Goctet (2^14*2<6 = 230) de locaii adresabile individual. La 386/486, ntruct dimensiunea unui segment este de 32 de bii, se ajunge la un spaiu total de adres virtual de 64 Toctei (2^14*2^32 = 2^46).

17. Structura unui descriptor de segment (cmpurile continute de acesta). P-(Present), dac este 1, segmentul este mapat n memoria fizic altfel nu este mapat n memoria fizic, iar baza i limita nu sunt utilizate; DPL - (Descriptor Privilege Level) este atributul de privilegiu, utilizat n teste de privilegiu; S- (Segment Descriptor) specific tipul de segment definit de descriptor (1 este descriptor de segment de cod sau date; 0 descriptor de sistem) Type - specific tipul segmentului: de cod sau de date; cei trei bii au urmtoarea semnificaie: (3) Executable = 0 => un descriptor de segment de date i, n acest caz (2) Expansion Direction (ED) (0 => segmentul se extinde spre adrese mari (date; offset<=limita); 1 => segmentul se extinde spre adrese mici (stiv; offset > limita)) (1) Writeable (0 => nu se poate scrie n acel segment) (3) Executable = 1 => un descriptor de cod i atunci semnificaia biilor urmtori este: (2) Conforming (1 => acest segment poate fi executat numai cnd CPL >= DPL) (1) Readable (0 => segmentul nu poate fi citit, adic este numai executabil, altfel el poate fi citit) A - (Accessed) (0 => segmentul nu a fost adresat; 1 => selectorul de segment a fost ncrcat n registrul segment, sau utilizat de instruciuni de test selector) 18. Niveluri de privilegiu. Obiecte recunoscute de procesor ce contin niveluri de privilegiu. Mecanismele de protecie ale procesorului 286 se bazeaz pe noiunea de ierarhie de ncredere (sau de privilegiu). Exist patru niveluri de privilegiu, mergnd de la 0 - cel mai privilegiat, pn la 3 cel mai puin privilegiat. Urmtoarele obiecte, recunoscute de procesor, conin niveluri de privilegiu: descriptorii de segment conin un cmp DPL - Descriptor Privilege Level, adic descriptor de nivel de privilegiu; selectoarele de segment conin un cmp RPL - Requestors Privilege Level, adic nivelul de privilegiu al procedurii creia i aparine selectorul; un registru intern al procesorului memoreaz CPL - Current Privilege Level, care este egal cu DPL al segmentului pe care l execut procesorul. Instruciunile pot ncrca un registru segment de date (i deci utiliza segmentul int) numai dac nivelul DPL al segmentului int este, numeric, mai mare sau egal cu maximul dintre nivelurile CPL i RPL ale selectorului. Deci, procesorul preia nivelurile CPL i RPL i creeaz EPL = max(CPL,RPL), denumit nivel efectiv de privilegiu, adic nivelul cel mai puin privilegiat din tre cele dou; apoi acesta (EPL) se compar cu DPL. Domeniul adresabil al unui task depinde de valoarea lui CPL, i anume pot fi adresate segmentele de date de la acelai privilegiu sau segmente mai puin privilegiate (adic nivelul de privilegiu asocia t segmentului adresat trebuie s fie, numeric, mai mare sau cel puin egal cu cel al taskului curent), n acest fel, se poate preveni ca o procedur de aplicaie s citeasc sau s modifice tabelele sistemului de operare.

19. Ce este si ce contine TSS? Un TSS este un segment special de memorie, pe care procesorul il utilizeaza pentru a support multitasking. Aceasta contine o copie a tuturor registrelor ce trebuie salvate, pentru a reface starea unui task; el mai contine valori associate taskului, dar nu sunt memorate in registrele CPU. TSS contine 3 selectori de segment de stiva aditionali (SS0, SS1, SS2) si 3 pointeri de stiva corespunzatori (ESP0, ESP1, ESP2). 20. Organizarea spatiului de intrare / iesire. Procesorul are dou spaii de adrese fizice distincte: memoria i I/O (intrri/ieiri). Dispozitivele periferice (consola, ecranul, tastatura, imprimanta etc.) sunt controlate i comandate de procesor, n general, prin operaii de citire/scriere la anumite locaii, diferite de spaiul de memorie. Acest spaiu este denumit spaiu de l/O i accesul la locaiile respective se face cu instruciuni specifice (In, Out). Locaiile din acest spaiu sunt denumite registre dispozitiv sau porturi de l/O. In general, n acest spaiu sunt plasate perifericele, dei procesorul poate permite maparea (suprapunerea) n memorie a perifericelor. Spaiul de I/O const din 64 Koctei i poate fi mprit n 64 Kporturi de 8 bii, 32 Kporturi de 16 bii sau, la 386/486,16 Kporturi de 32 bii. Pentru a accesa acest spaiu nu se utilizeaz registre segment i, deci, nici mecanismul de segmentare sau pagin. Pinul M/IO specific spaiul de memorie adresat (fizic sau I/O), deci dac se adreseaz o locaie de memorie sau un port de I/O. Instruciunile I/O, IN i respectiv OUT pot furniza adresa direct n instruciune, ca o constant de 8 bii (pentru porturile din spaiul 0 -255) sau indirect prin registrul DX (pentru tot spaiul de 64 K). 21. Avantajele utilizarii segmentarii si paginarii In locul maparii intregului spatiu logic de adrese ca o unitate, mecanisme mai avansate de translatie a adresei mapeaza pagini de dimensiune fixa, mai mici, ale spatiului de adrese logice, in pagini de memorie fizica. Astfel, un program mare nu trebuie sa fie realocat intr-o zona (portiune) continua de memorie, care poate fi greu gasita intr-un cadru cu programe multiple, decat, mai degraba, in mai multe sectiuni de memorie, mai mici, care sunt mai usor de gasit, disponibile. Un alt avantaj este ca utilizatorul nu trebuie sa cheltuiasca memeorie suplimentara pentru a rula o aplicatie, eliminarea constrangerilor datorate memoriei pentru programele ce lucreaza cu zone mari de memorie. Segmemntarea furnizeaza o metoda pentru implementarea memoriei virtual si un mecansim de realizare a unor sisteme de operare sigure, prin niveluri de privilegiu si limitare de segment, care ajuta programatorii in depanarea unor erori. 22. Memoria cache (descriei organizarea de principiu a acesteia). Performana unui calculator este determinat, n principal, de trei elemente: procesorul, memoria i placa de baz. Memoria cache are rolul de a scurta acest drum al informaiei. Ea stocheaz datele astfel nct procesorul le poate accesa mult mai rapid. Memoria cache memoreaz instruciuni i date, recent accesate, astfel nct ele sunt furnizate transparent i mai rapid dect memoria principal. Cahe-ul este organizat pe linii. Aceste linii sunt organizate ca seturi, fiecare set este mapat pe un grup separat de adrese de memorie, i care sunt de obicei ntre 16 i 64 linii pe set. Programele tipice acceseaz aceleai locaii de memorie, n mod repetat, sau acceseaz locaii adiacente de memorie. Numele tehnic dat acestui fenomen este localizare temporal i respectiv spaial a referinei.

23. Concepte utilizate de memoria cache pentru actualizarea informaiei. Paginarea este utilizat pentru a implementa MV bazat pe blocuri de dimensiune fix, pagini. Asemntor segmentrii, paginarea translateaz adresele virtuale n adrese fizice, prin maparea (suprapunerea) blocurilor de lungime fix, de memorie, n locaiile de memorie fizic, denumite cadru pagin. Segmentarea i paginarea sunt similare: un nume i un offset sunt translatate ntr -o adres. Avantajul esenial al paginrii fa de segmentare este reprezentat de dimensiunea fix a paginrii. Deoarece MV utilizeaz discul se pot alege dimensiuni de pagin care se potrivesc cu dimensiunea sectorului de pe disc. De asemenea paginarea evit problema fragmentrii memoriei, specific segmentrii. Ori de cte ori o pagin este scoas din memorie, alt pagin se potrivete exact n spaiul eliberat; (apare alt tip denumit fragmentare intern). Alt avantaj: alocarea pentru un obiect mare nu trebuie s fie fcut ntr -un spaiu continuu de memorie. Pagina poate conine poriuni din mai multe segmente, sau invers.

24. Sistemul de ntreruperi. Tipuri de ntreruperi.

O ntrerupere transfer execuia la o nou adres de program. Vechea adres (CS:IP) a programului i starea mainii (registrul de indicatori) sunt salvate n stiv pentru a permite refacerea programului ntrerupt. Structura stivei dup apariia unei ntreruperi este urmtoarea (fig) . Intreruperile sunt mprite n trei clase: iniiate de hardware, instruciunile de ntrerupere INT i excepii dejnstruciune. ntreruperile iniiate hardware apar ca rspuns la un semnal extern i sunt clasificate ca nemascabile i mascabile. Programele pot determina o ntrerupere prin execuia instruciunii INT. Excepiile de instruciune apar cnd o condiie neobinuit, care mpiedic execuia ulterioar a instruciunii, este detectat n timp ce ncearc s execute o instruciune. Adresa returnat de o excepie va referi ntotdeauna instruciunea ce a cauzat excepia i include orice prefix de instruciune. Prioritatile intreruperilor: Ordin Intrerupere 0 Instruciunea INT sau excepie 1 Intrerupere Single Step 2 Intrerupere nemascabil (NMI) 3 Depire segment extensie de procesor 4 Intrerupere mascabil (INTR) Dac apar mai multe ntreruperi simultan, ele sunt servite n ordinea din tabel. Dac alte ntreruperi rmn active, ele sunt prelucrate nainte de prima instruciune din rutina de tr atare a ntreruperii. Ultima ntrerupere prelucrat va fi prima servit.

25. ntreruperile externe. Intreruperile externe, care pot fi transmise de dispozitive externe, sunt primite de procesor pe dou linii: NMI i INTR. Linia INTR este controlat de PIC (Programmable Interrupt Controller); rolul su este de a accepta cereri de ntrerupere de la dispozitivele externe, de a determina care cerere este cea mai prioritar i de a activa linia INTR, dac dispozitivul care a cerut ntreruperea este mai prioritar dect cel curent n servire. Cnd linia INTR devine activ, procesorul execut diferite aciuni, n funcie de starea indicatorului de validare a ntreruperilor (IF); oricum, nu se execut nici o aciune pn nu se termin execuia instruciunii curente, pe durata creia a aprut ntreruperea. Dac IF=0, deci ntreruperile mascabile sunt dezactivate procesorul ignor semnalul INTR. ntreruperile se activeaz cu instruciunea TI (SeT Interrupt enable flag), deci IF=1 i se dezactiveaz cu instruciunea CLI (CLear Interrupt enable flag). Ele pot fi, de asemenea, mascate selectiv prin transmiterea de comenzi corespunztoare ctre PIC. Instruciunile de activare a ntreruperilor se vor lansa dup sfritul instruciunii urmtoare, pentru a nu ncrca excesiv stiva, ntreruperea este recunoscut prin executarea a dou cicluri de magistral de recunoatere a ntreruperii (INTA\); pe durata acestor dou cicluri se activeaz semnalul LOCK \, pentru a indica altor procesoare c nu pot obine magistrala. Primul ciclu este utilizat de procesor pentru a transmite ctre PIC c se onoreaz cererea, iar n timpul celui de-al doilea ciclu, PIC rspunde plasnd un octet pe magistrala de date, care conine tipul ntreruperii (32+255), asociat cu servirea cererii de ntrerupere. Tipul este asignat la iniializarea procesorului, prin program. Procesorul utilizeaz acest cod pentru a apela o procedur de tratare a ntreruperii. O cerere extern de ntrerupere poate veni i pe linia NMI, care e comandat pe frontul semnalului (INTR e comandat pe nivel) i este utilizat pentru evenimente deosebite (cdere tensiune, repornire). ntreruperile nemascabile, NMI, nu pot fi dezactivate i au prioritate fa de cele mascabile, INTR. 26. ntreruperile interne. Intreruperile interne sunt evenimente sincrone i sunt rspunsuri ale procesorului la anumite evenimente detectate n timpul execuiei unei instruciuni, ntreruperile externe (mascabile i nemascabile) sunt evenimente asincrone. Deosebirea major ntre aceste dou tipuri de ntreruperi este originea lor: o ntrerupere intern este ntotdeauna reproductibil prin reexecuia programului i datelor ce au cauzat ntreruperea, n timp ce o ntrerupere extern este, n general, independent de execuia curent a taskului. Intreruperile interne sunt de dou tipuri. Un tip de ntrerupere este denumit excepie, deoarece ntreruperea apare numai dac exist o anumit condiie de eroare, care nu permite execuia corespunztoare a instruciunii; cellalt tip de ntrerupere genereaz ntrerupere or i de cte ori instruciunea INTn este executat. Aceste instruciuni sunt utilizate fie n scopul de a testa rutinele utilizatorului pentru tratarea ntreruperilor externe, fie n scopul de a apela rutine DOS. Pentru apelul rutinelor DOS se utilizeaz acest mecanism i nu mecanismul de apel de procedur din dou motive: fie nu se cunosc aceste adrese, fie c ele se modific de la o versiune la alta. Exemple de excepii sunt: eroare de mprire, depire detectat de instruciunea INTO, depire limite detectat de instruciunea BOUND, depire segment (overrun), cod de operaie invalid, eroare de extensie de procesor etc. In modul protejat sunt detectate mult mai multe condiii de eroare, care rezult ntr-o ntrerupere intern, n acest mod de adresare virtual, tabela de vectori de ntrerupere nu are adrese fizice fixe i deci nu poate fi adresat direct. De aceea, programele care, n modul real de adresare, manipuleaz direct tabela de vectori de ntrerupere, nu vor lucra n modul protejat. Cellalt tip de ntrerupere genereaz ntrerupere ori de cte ori instruciunea (INT?) este executat. Aceste ntreruperi, instruciunile INT, sunt utilizate, de obicei, pentru testarea procedurilor de tratare a ntreruperilor sau pentru a apela servicii DOS. Intreruperile interne au urmtoarele caracteristici: codul ntreruperii este coninut n instruciune sau este predefinit; nu se execut cicluri de recunoatere ntrerupere; nu pot fi dezactivate, cu excepia ntreruperii single step; sunt prioritare fa de cele externe.

27. ntreruperile : single step (pas cu pas) si breakpoint. Intreruperea single step. Aceast ntrerupere, de tipul 1, este generat n mod automat dup execuia fiecrei instruciuni, dac indicatorul TF este 1. Ea mai este denumit i excepie de depanare deoarece permite execuia unui program instruciune cu instruciune (adic pas cu pas). Procesorul salveaz n stiv registrul de indicatori i adresa urmtoarei instruciuni de executat i face indicatorii TF i IF zero, astfel ca la intrarea n procedura de tratare a ntreruperii single step, procesorul nu mai este n modul pas cu pas; se evit astfel recursivitatea infinit. Procedura va permite vizualizarea programului ntrerupt (registre, indicatori, variabile memorie etc.); la sfritul procedurii se vor reface indicatorii din stiv, astfel c programul poate reveni n modul de execuie pas cu pas. Procesorul nu dispune de instruciuni directe pentru modificarea acestui indicator (TF); el poate fi modificat numai prin modificarea imaginii sale din stiv (utiliznd instruciunile PUSHF, POPF). Intreruperea de breakpoint (suspendare). Aceast instruciune, INT 3, este singura instruciune de ntrerupere care are lungimea de un octet (toate celelalte ocup cte doi octei, primul fiind codul instruciunii, iar cel de-al doilea tipul ntreruperii). Ea este folosit la implementarea de programe de depanare, deoarece necesit un singur octet de cod i poate substitui foarte uor orice octet de cod de instruciune. Ea permite n acest mod suspendarea programului i executarea rutinei de tratare ntreruperii de pe acest nivel. Instruciunea permite n plus i inserarea de noi instruciuni n program, fr a fi recompilate sau reasamblate. Aceasta se poate face salvnd primul octet de i nstruciune i nlocuindu-l cu instruciunea INT 3. Procedura de tratare a ntreruperii de breakpoint va conine noile instruciuni, plus codul pentru refacerea octetului de instruciune salvat (nlocuit anterior de INT 3) i va decrementa adresa de reveni re, salvat n stiv (mai exact IP) nainte de revenire, astfel ca instruciunea nlocuit s fie executat dup instruciunile inserate. Metoda aceasta de depanare a unui program este mai complicat dect utilizarea registrelor de depanare, deoarece neces it crearea unui alias pentru segmentul de cod, salvarea octetului instruciunii originale, nlocuirea lui cu INT 3 i refacerea octetului la terminarea ntreruperii. 28. Tabela vectorilor de ntrerupere. Aceast tabel reprezint legtura dintre codul ntreruperii i procedura definit pentru a servi ntreruperea asociat cu acel cod. Civa dintre vectorii cei mai prioritari sunt rezervai de INTEL pentru funcii dedicate. Utilizatorul nu poate folosi nici unul dintre primii 32 de vectori, n modul real, aceast tabel ocup 1 Koctet de memorie (pentru fiecare tip de ntrerupere dintre cele 256 posibile este rezervat un pointer, adic un dublu cuvnt) care conine adresa procedurilor de tratare a ntreruperilor. Adresa este memorat astfel: cuvntul cel mai semnificativ conine adresa de baz a segmentului, iar cuvntul mai puin semnificativ conine deplasamentul; ele sunt memorate la adrese succesive n ordinea: cuvntul mai puin semnificativ (deplasamentul) i apoi cuvntul mai semnificativ (selectorul de segment).
Funcia excepie eroare mprire ntrerupere Single Step ntrerupere NMl ntrerupere de breakpoint excepie depire detectat de INTO excepie depire domeniu instr. BOUND excepie cod instr. invalid excepie extensia procesor nu este disponibil limit tabel ntr. prea mic ntr. depire seg. extensie procesor excepie depire segment ntr. eroare extensie procesor ntreruperi rezervate ntreruperi def. de utilizator Numr ntrerupere 0 1 2 3 4 5 6 7 8 9 13 16 10-12, 14, 15, 17-31 32-255 Instruciuni legate de intr. DIV, IDIV toate toate INT 3 INTO BOUND orice cod nedefinit ESC sau WAIT LIDT ESC toate instr. cu referire la mem ESC sau WAIT Returneaz adr. instr. excepie da nu da da da da da da -

29. Structura procedurilor de tratare a ntreruperilor. Procesorul servete ntreruperile numai ntre sfritul unei instruciuni i nceputul urmtoarei. Dac se utilizeaz un prefix de repetare a unei instruciuni pe iruri, ntreruperile i excepiile pot aprea ntre repetri. Cnd o procedur de tratare a ntreruperii este executat, indicatorii i registrele CS i IP sunt pui n stiv, iar TF i IF sunt teri. Procedura poate reactiva semnalele de ntrerupere externe cu instruciunea TI, permind astfel s fie ntrerupt de o cerere, pe linia INTR, mai prioritar dect cea curent servit. Procedura de ntrerupere poate fi totui ntrerupt de o cerere NMI, chiar dac sistemul de ntreruperi nu este activat. Ca orice procedur, procedurile de tratare a ntreruperilor trebuie s salveze registr ele nainte de a le actualiza i s le refac nainte de terminare. De obicei, pe durata seciunilor critice, adic cea de salvare i refacere a strii programului ntrerupt, ntreruperile sunt dezactivate urmnd a fi reactivate dup aceste seciuni. Dac ntreruperile sunt dezactivate un timp prea ndelungat, ntr-o procedur, cererile de ntrerupere pe linia INTR pot fi pierdute. Procedura de tratare a ntreruperii se termin cu instruciunea l RET (Interrupt RETurn); se presupune c stiva este adus n aceleai condiii ca la apelul procedurii. Procedurile de ntrerupere software pot fi avantajoase n sisteme care realoc dinamic programe n timpul execuiei. De exemplu, n figura se arat cum sunt prelucrate ntreruperile simultane (eroare la mprire, ntreruperea single step este activ i apare pe durata execuiei instruciunii de mprire, cerere de ntrerupere pe linia INTR). 30. Operatiile realizate de procesor la aparitia unei ntreruperi.

31. Formate de instructiuni. Instruciunile procesorului 80286 au o lungime variabila i pot avea de la 1 pn la 6 octei.

Primul format codul operaiei este reprezentat pe 1 octet Al doilea format codul operaiei este reprezentat pe 2 octei Semnificaia biilor: d direction specific direcia rezultatului operaiei d = 0 r/m_r/m [Op] reg (registru) 1 reg_reg [Op] r/m (registru sau memorie) w word bit indic tipul operanzilor: w = 0, operand de tip octet; w = 1, operand de tip cuvnt (2 octei) mod modul de lucru = 11 r/m se refer la un registru = 00 cmpul de = 01 deplasament de tip octet = 10 deplasamentul are 16 bii 32. Sursele (segment si offset) utilizate la calculul adresei fizice

33. Moduri de adresare (enumerare, exemple de instructiuni); exemple de adresare bazata indexata Exist n principal ase moduri de adresare: direct, adresa efectiv (AE) a operandului este reprezentat de deplasamentul coninut n instruciune; indirect, AE este ntr-unul dintre registrele de baz sau index; bazat, AE este suma dintre deplasament i coninutul unui registru de baz (BX sau BP); indexat, AE este suma dintre deplasament i coninutul unui registru index (SI sau DI); bazat i indexat, AE este suma dintre coninutul a dou registre: unul de baz i unul index; bazat i indexat cu deplasament, AE se obine ca sum ntre un registru de baz, un registru index i un deplasament; Mai pot fi puse n eviden i modurile de adresare: imediat, operandul este coninut n instruciune; la registre, operandul se afl ntr -un registru; adresarea irurilor; adresarea porturilor de I/O. exemple: mov ax, aw[bx][si]; mov ax, depl[bp][di]; 34. Tipuri de prefixe. Pentru adresarea ntr-un alt segment dect cel implicit, se va preceda instructiunea respectiva cu un prefix de segment (override) care va specifica, n mod explicit, registrul segment utilizat. n ceea ce priveste formatul instructiunilor, la procesoarele 386/486 el este asemanator:

n plus fata de formatul anterior, poate fi prezent n instructiune octetul SIB (Scale * Index + Base), care specifica registrul index utilizat (acesta poate fi oricare dintre registrele EAX, 120 Programare n limbaj de asamblare EBX, ECX, EDX, EBP, ESI sau EDI, deci nu poate fi utilizat ca registru index ESP), factorul de scalare cu care se nmulteste registrul index (acesta poate avea una dintre valorile 1,2, 4, 8) si registrul de baza (oricare dintre registrele EAX EDI) utilizat pentru calculul adresei efective. Daca n cazul procesorului 286 o instructiune nu poate fi precedata dect de prefixe de segment (care specifica registrul de segment utilizat pentru determinarea adresei fizice) sau prefixe de instructiune (de repetare sau de blocare a accesului altui procesor la magistrala sa), instructiunile procesorului 386/486 pot fi precedate de urmatoarele prefixe (de cte un octet fiecare): [prefix instructiune [ prefix dimensiune adresa [ prefix dimensiune operand | prefix segment] 35. Identificatori n limbajul de asamblare (standard si definiti de utilizator). Identificatorii sunt secvene de lungime 1-^31 caractere alfanumerice i speciale: ? _ @ $. ntr -un identificator nu este permis spaiul liber. Un identificator trebuie s nceap cu o liter sau cu unul dintre caracterele speciale. Dac identificatorul ncepe cu punct (.), atunci el are semnificaia de comand adresat asamblorului. Asamblorul nu deosebete literele mari de cele mici. Identificatorii sunt i ei de dou tipuri: standard (sau predefinii) i definii de utilizator. Identificatorii standard, denumii i cuvinte cheie, sunt folosii pentru denumirea unor funcii i argumente stabilite la definirea limbajului i fac parte din vocabularul limbajului. Astfel de identificatori sunt: nume de instruciuni: MOV, ADD, SUB, INT etc.; nume de resurse: AX, BX,.., CS, DS,.., AH, AL etc.; nume de operatori: MOD, OFFSET, SEG, PTR, TYPE etc.; pseudoinstruciuni pentru asamblor: ASSUME, MODEL etc. Identificatorii definii de utilizator vor fi folosii pentru: nume de variabile, adrese de instruciuni, operanzi; nume de proceduri, segmente, macroinstruciuni.

36. Tipuri de constante si reprezentarea lor. Constantele pot fi numerice sau iruri de caractere, formate pe baza anumitor reguli i crora li se asociaz o valoare. Constantele numerice pot fi: ntregi, reale sau zecimale (codificate binar). Constantele ntregi reprezint numere ntregi; ele pot fi utilizate, n funcie de context, pentru: date, adrese sau operanzi imediai. Constantele pot fi reprezentate n binar, octal, zecimal sau hexazecimal; reprezentarea n una dintre aceste baze se specific printr-una din literele B, Q, D sau H, care urmeaz constanta: -binar: 0110101OB; -octal: 152Q; -zecimal: 106D sau 106; - hexazecimal: 6aH; Pentru a evita confuzia ntre constantele hexazecimale i identificatori, o constant hexazecimal trebuie s nceap ntotdeauna cu o cifr (de exemplu: OabcdH, pentru a nu fi confundat cu identificatorul abcdH). Constantele zecimale pot fi urmate sau nu de litera D, deoarece se consider implicit baza 10. Exist o directiv de asamblare care permite stabilirea reprezentrii ntr-o baz implicit a constantelor: .RADIX < expresie > unde < expresie > trebuie s aib o valoare ntreag (2, 8,10 sau 16) i este evaluat n zecimal, lat de exemplu ce valori se ncarc n registrul AX dup utilizarea acestei directive (am folosit constante pentru expresia bazei): .RADIX 2 (AX) = 0004H mov AX,100; .RADIX 8 mov AX,100; .RADIX 10 mov AX,100; .RADIX 16 mov AX,100; (AX) = 0100H (AX) = 0040H (AX) = 0064H Constantele ntregi pot fi reprezentate n memorie pe 8,16, 32 sau 64 de bii. Constantele real e sunt reprezentate n virgul mobil, prin mantis i exponent, n general sub forma: [] ntreg, fracie [ E exponent ] Asamblorul codific aceste constante reale n reprezentarea cu virgul mobil pe 32, 64 sau 80 de bii, dup tipul constantei: dd (define double word), pe 32 de bii, real simpl precizie; dq (define quadruple word), 64 de bii, real dubl precizie; dt (define ten bytes), 80 de bii, real temporar; Codificarea n virgul mobil difer de la un asamblor la altul, de la un compilator la altul, dar formatul cel mai rspndit este cel IEEE: exponent mantis Sm- semnul mantisei (1 bit); exponent- este exponentul numrului deplasat cu o anumit valoare, n funcie de tipul reprezentrii: 7fH, pentru formatul pe 32 bii; 3ffH, pentru formatul pe 64 bii; 3fffH, pentru formatul pe 80 bii; Exponentul pentru cele trei formate se reprezint pe 8,11 i respectiv 15 bii; mantisa este normalizat, adic: 1.00...O <= mantisa <=1.11...1 i se reprezint, pentru cele trei formate, pe 23, 52 i respectiv 64 de bii; de remarcat c pentru primele dou formate nu se reprezint prima cifr, deci prima unitate din faa virgulei, care este presupus implicit, cu ajustarea corespunztoare a exponentului. Pentru cel de-al treilea format se reprezint i prima unitate, cea din faa virgulei (punctului zecimal). Exponentul din reprezentarea intern este deplasat (biased), pentru a simplifica operaiile de comparare cu numere reale; n acest mod, procesorul lucreaz numai cu valori pozitive pentru exponent. D e exemplu, pentru valori reale n simpl precizie (32 de bii), exponentul este n intervalul [1,254], n loc de [-127, +126] ct arfi fost domeniul exponentului pentru o reprezentare cu semn. Exponentul minim (0) este utilizat doar pentru reprezentarea va lorii 0.0 i pentru valori nenormalizate, iar cel maxim (255) este utilizat pentru a reprezenta o condiie de eroare (NaN - Not a Number), adic o codificare cu exponent pentru 11 ...11 nu reprezint o valoare numeric. Numerele negative difer de numerele pozitive numai prin bitul de semn al mantisei. S considerm, de exemplu reprezentarea ctorva numere; pentru simplitatea reprezentrii am ales valori care se reprezint exact. Pentru o declaraie de forma

Valorile sunt memorate n ordinea invers scrierii lor, adic la adresa cea mai mic, octetul cel mai puin semnificativ, iar la adresa cea mai mare (ultima), octetul cel mai semnificativ. Un alt tip de constante l reprezint constantele zecimale codificate binar (BCD); ele pot fi de dou tipuri, i a nume: zecimal mpachetat; - zecimal nempachetat (denumit i format ASCII). Primul format se caracterizeaz prin faptul c fiecare dintre cele dou tetrade ale unui octet conine o cifr zecimal, deci valoarea unui astfel de octet este cuprins n inter valul 0-99; cel de-al doilea format conine numai o singur cifr, pe tetrada mai puin semnificativ, cealalt fiind O, ca n reprezentarea urmtoare:

Aceste constante pot fi reprezentate i pe 80 de bii utiliznd o declaraie de tipul: dt 12345678 pentru care se pot introduce maxim 18 cifre, deoarece octetul cel mai semnificativ conine pe primul bit semnul numrului, restul acestui octet (7 bii) fiind nefolosit. Memorarea se face dup aceeai regul, adic ncepnd cu octetul cel mai puin semnificativ i terminnd cu octetul cel mai semnificativ. Formatul zecimal nempachetat mai este denumit i format ASCII, deoarece exist o coresponden direct ntre formatul BCD nempachetat i cel ASCII (singura diferen la acest format fa de cel BCD este c prima tetrada conine valoarea 3, bineneles, pentru cifre). Memorarea acestui numr se face, conform regulii cunoscute, ncepnd cu octetul cel mai puin semnificativ, la adresa adr si terminnd cu octetul cel mai semnificativ, la adresa adr + 9. De exemplu, pentru o declaraie de forma: dt 12345678 reprezentarea intern va fi: 00 00 00 00 00 00 12 34 56 78. Constantele exprimate prin iruri de caractere constau dintr -o succesiune de caractere incluse ntre apostrofuri (Exemplu) sau ntre ghilimele (ir caractere). Dac n interiorul unui ir de caractere, un subir trebuie s apar ntre apostrofuri sau ghilimele, atunci aceste caractere se dubleaz: 1 Dec1918sau1 Dec1918

37. Tipuri de propozitii n limbaj de asamblare; sintaxa unei instructiuni. O propoziie este o succesiune de cuvinte i caractere din alfabetul limbajulu i de asamblare, construit dup anumite reguli sintactice, avnd lungimea maxim de 128 de caractere i care poate fi: instruciune; pseudoinstruciune. O instruciune reprezint o propoziie care este tradus n cod main. O pseudoinstruciune este o propoziie care nu se traduce n cod main, ea reprezentnd o directiv pentru asamblor, pentru coordonarea modului de lucru al asamblorului: definiri de constante; rezervri de zone de memorie; controlul procesului de asamblare; Instruciuni n limbaj de asamblare Sintaxa general a unei instruciuni este: [ eticheta: ] [ mnemonica [ operanzi ] ] [ ; < comentarii > ] unde eticheta - este un cmp care conine un nume simbolic format din maximum 31 de caractere alfanumerice i caracterele speciale _, ?, @, $. Primul caracter este o liter sau un caracter special. Fiecare etichet are asociat o valoare numeric ce reprezint adresa relativ n cadrul segmentului (sau grupului de segmente) din care face parte; mnemonica- reprezint numele instruciunii sau al pseudoinstruciunii; operanzi - este un cmp a crui existen i format depinde de tipul instruciunii. Dac instruciunea are doi operanzi, cei doi sunt denumii destinaie i surs; ei apar n instruciune n aceast ordine. Operanzii pot fi i expresii care conin registre, constante, identificatori i operatori (aritmetici, de indexare, logici, de deplasare, relaionali, de tip sau de conversie). 38. Declararea datelor n limbaj de asamblare, exemple. Declararea datelor se realizeaz cu ajutorul unor pseudoinstruciuni care asigur: alocarea de memorie pentru date, specificarea tipului datelor i iniializarea datelor. Datele pot fi specificate prin nume, expresii sau iruri de caractere, care se evalueaz n procesul de asamblare la constante. Operaia de alocare i iniializare a datelor are loc n procesul de asamblare; datele sunt nscrise n fiierul obiect, de unde vor fi preluate la execuie. Sintaxa este urmtoarea: [ nume_variabila ]tip[ lista_expresii ] [;comentarii] sau [ nume_variabila ]tip[numar] DUP ([ lista_expresii ]) unde nume_varibila este un identificator, construit dup regulile specificate anterior; tip este mnemonica pseudoinstruciunii, care implicit specific tipul datelor: db - define byte; definete date de tip octet ntregi, cu sau fr semn; dw - define word; cuvnt de 16 bii ce definete date ntregi, cu sau fr semn; dd - define double; dublu cuvnt, de 32 de bii ce poate defini un pointer sau o valoare ntreag sau real, cu sau fr semn; dq - define quadruple; cuvnt de 64 bii ce poate defini o valoare real sau ntreag; df - define float; real pe 6 octei; dp - define pointer; referin specific pentru 386, reprezentat pe 6 octei (segmentul pe 2 octei, iar deplasamentul pe 4 octei); dt - define ten bytes; dat de 10 octei de tip rea! sau zecimal mpachetat; nume_structur - numele unei structuri utilizate pentru definirea unor date cu aceast structur; list_expresii sunt expresii separate prin virgule, evaluate la constante, reprezentnd valorile cu care vor fi iniializate datele definite. Dac apare simbolul ?, nseamn c datele respective nu se iniializeaz. Construcia este recursiv. Evaluarea expresiilor se face la asamblare. numr reprezint o expresie ce reprezint factorul de multiplicare al listei de expresii care urmeaz dup operatorul DUP. Exemple: adb -100 ; se pot defini valori in intervalul [-128, +127] ; sau [O, 255]

lit db abcde ; se vor memora codurile ASCII ale caracterelor din ; lista: 61 h, 62h, 63h, 64h, 65h aw dw -1000 ; domeniul de valori: [-32768, 32767] sau [O, 65535] AB dw AB ; va depune la adresa AB: 42h, 41 h adrAB dw AB ; se va depune deplasamentul etichetei AB, ; stabilit la asamblare off_AB dw offset AB ; deplasamentul etichetei AB, stabilit la localizare seg_AB dw seg AB ; adresa segment de la localizare rez dw ? ; coninut nedefinit v1 dd 1.0 ; valoare reala definita pe 32 bii v2 dd 1A2B3C4Dh ; valoare intreaga pe 32 bii adr_v1 dd v1 ; pointer pentru referirea lui v1 Pentru a multiplica definirea unor date se utilizeaz operatorul DUP, alturi de db, dw etc. Sintaxa este urmtoarea: < numr > DUP (expresie pt. valoarea iniiala) n acest fel se definete o structur format dintr -un <numr> de elemente, iar un element poate fi: expresie numeric, semnul ? dac nu se specific valoarea iniial, o list de elemente sau ali operatori DUP. Exemple: db 100 dup (0) ; multiplicarea valorilor iniiale db2 dup (O, 3 dup (1)), 10, 25, 100) dw 100 dup (5 dup (4), 7) db 10 dup (mesaj , Odh, Oah) 39. Operatorii SEG, OFFSET, TYPE. SEG < expresie >. Acest operator furnizeaz adresa de segment a unei adrese exprimat printr -o expresie, care poate fi: variabil, operand memorie, etichet, numele unui segment s au numele unui grup de segmente. Exemplu: beta dw mov bx, seg beta mov ds,bx OFFSET < expresie >. Operatorul furnizeaz deplasamentul n cadrul segmentului pentru o expresie de tip: variabil (simpl sau structurat), operand memorie, etichet. Aplicat une i variabile sau etichete, operatorul furnizeaz deplasamentul varia bilei sau etichetei. Valoarea este cunoscut n momentul editrii legturilor, cnd se face alinierea final a segmentului, deoarece deplasamentele de la asamblare se pot modifica la localizare, dac segmentul este combinat cu pri ale aceluiai segment, definite n alte module sau dac nu este aliniat la un paragraf. Exemplu: el poate fi utilizat n adresarea indirect a variabilelor ir dw mov bx, offset ir ; adresa de nceput a irului mov si, O ; se iniializeaz indexul primului ; element din ir add ax, [bx] [si] ; se insumeaza elementele Dac se utilizeaz directiva group, operatorul OFFSET nu va returna deplasamentul unei variabile din grup, ci va returna deplasamentul variabilei din segmentul su. Pentru a returna deplasamentul variabilei din grup ul respectiv, trebuie utilizat prefixul grupului respectiv. Exemplu: dgrup group datai, data2 datai segment datai ends data2 segment val db dw val; deplasamentul in cadrul segmentului ; furnizat de asamblor dw dgrup:val ; deplasamentului in grup Limbajul de asamblare 135 dd val; deplasamentul in segment + adresa, segment dddr gup:val; deplasamentul grup + adresa segment

dataSends mov bx, offset val; deplasamentul in segment mov bx, offset grup:val; deplasamentul in grup

Observaie:
offset [bx] este echivalent cu [bx] offset depl[bx] este echivalent cu [depl+bx] TYPE < expresie >. Furnizeaz un numr ntreg ce reprezint tipul expresiei asupra creia se aplic; are un singur argument, care poate fi o variabil sau etichet. Dac expresia este o variabil (simpl sau structurat) operatorul returneaz numrul de octei pe care se reprezint componentele variabilei simple sau numrul de octei ai variabilei structurate. Valorile returnate de operator, n funcie de tipul variabilei sunt: byte- 1; word- 2; dword- 4; qword- 8; pword- 6; fword- 6; tbyte- 10; ~ ~~ structura - numrul de octei ai structurii; Se utilizeaz, de obicei, n calcule asupra vectorilor sau structurilor, pentru a determina adresa urmtorului element. Dac argumentul este de tip etichet, operatorul, n funcie de tipul etichetei, returneaz valorile: near- ffffH; far- fffeH;

Exemple:
var dw mov bx, type var ; (BX) = 2 vectorddIO dup (?) mov si, type vector ; (SI) = 4 num_BCD dt 13245768, mov bx.type num_BCD; (BX) = 10 40. Operatorii LENGTH, SIZE si PTR. LENGTH < expresie >. Acest operator furnizeaz o valoare ntreag ce reprezint numrul de elemente ale unei variabile (declarat utiliznd operatorul DUP). Dac variabila a fost declarat prin utilizarea operatorului DUP imbricat (unul inclus ntr-altul), atunci operatorul LENGTH va returna o valoare asociat operatorului exterior. Dac variabila nu a fost declarat utiliznd operatorul DUP, atunci operatorul LENGTH va returna valoarea 1. Exemple: n1 db 50 dup (?); n2 dw 150 dup (O, 1, ?); n3 dd 200 dup (10, 20, 15 dup (?)); mes db1Exemplu de mesaj:; length n1 = 50; length n2 = 150; length n3 = 200; length raes = 1; SIZE < expresie >. Furnizeaz o valoare ce reprezint numrul de octei ocupai de o variabil i este n relaie cu LENGTH i TYPE prin identitatea:

SIZE = LENGTH * TYPE


Dac o variabil a fost declarat utiliznd operatorul DUP imbricat, SIZE furnizeaz, conform relaiei anterioare, numai valoarea operatorului DUP exterior. Pentru declaraiile anterioare, acest operator va furniza urmtoarele valori: size n1 = 50; size n2 = 300; size n3 = 800; size mes = 1;

PTR < expresie >. Acest operator realizeaz conversia de tip pentru o variabil, operand din memorie sau etichet, fie pentru a specifica tipul adresrii, fie pentru a permite adresarea unor date cu un alt tip dect cel cu care au fost declarate. Sintaxa acestui operator este: tip PTR < expresie > unde tip poate fi: BYTE, WORD, DWORD, QWORD, PWORD, FWORD, TBYTE sau nume de structur pentru operanzi din memorie i variabile, sau NEAR, FAR, PROC, unknown (las la latitudinea asamblorului determinarea tipului FAR sau NEAR utilizat) pentru etichete de instruciuni, nume de proceduri. De fapt, acest operator asociaz urmtoarele atribute expresiei: tip expresie variabila sau eticheta expresie numeric atribute asociate segment SEG <expr> nedefinit offset OFFSET <EXPR> <expresie> type tip tip

Exemple: a) Explicitarea tipului referinei la memorie, pentru referine anonime:

inc byte ptr [bx] inc word ptr [si] mov byte ptr [bx],99 mov word ptr [di],100 and word ptr [bp],100h

b)

Specificarea tipului de salt (intersegment sau intrasegment):

jmp dword ptr [bx] }mp near ptr etich ; pentru etich declarata in alt modul, ; daca aceasta eticheta este in acelai segment sau grup ; de segmente cu instruciunea de salt

c)

Referirea unor variabile cu un alt tip dect cel cu care au fost declarate:

aw dw OabcH, 12abH ab db OaH, 12H mov al, byte ptr aw mov ax, word ptr ab Limbajul de asamblare 137 d)Crearea unei variabile anonime la un offset dat dintr-un segment: mov al,ds: byte ptr 5 ; refera octetul de la ds:5 mov bx,datai: word ptr 3000H ; refera cuvntul de la deplasamentul 3000H din

; segmentul datai
Aceste dou declaraii sunt echivalente cu urmtoarele dou: mov al,ds:[5] mov bx,datai:[3000]

41.Operatorii SHORT, WIDTH, MASK. SHORT. Acest operator accepta un argument de tip eticheta (un offset adresabil prin registrul segment CS).Se utilizeaza in instructiuni de salt conditionat, neconditionat si in instructiuni de apel de procedura, cand codul tinta are un deplasament autorelativ de un octet cu semn (adica tinta saltului este in intervalul 128 ->127 fata de instructiunea de salt). In mod normal, instructiunea de salt va codifica deplasamentul la instructiunea tinta ca un numar intreg pe 16 biti. Utilizand acest operator, cu conditia ca tinta sa fie in intervalul [-128,+127], asamblorul va codifica deplasamentul tintei pe un singur octet, reducand codul generat cu un octet: jmp SHORT etich. De fapt asamblorul genereaza in mod automat un deplasament pe 8 biti, daca deplasamentul auto relativ al tintei este in intervalul [-128,+127], dar pt referinte externe va genera un deplasament pe 16 biti. Daca referinta este in intervalul mentionat, utilizand operatorul Short se va genera un deplasament de un octet, scurtand codul generat pt instructiunea de salt cu un octet. WIDTH si MASK. Acesti operatori unt folositi pt a returna numarul de biti sau o masca de biti pt inregistrare, care reprezinta un tip de date structurat. Operatorul WIDTH returneaza numatul de biti ai unei inregistrari sau al unui camp al unei inregistrari, dupa cum argumentul sau este numele inregistrarii sau numele unui camp al inregistrarii. Operatorul MASK are ca argument numele unui camp al unei inregistrari si returneaza o masca de biti, definiti ca fiind 1 pt pozitiile campului respectiv si 0 pt celelalte pozitii. Exemplu: model record A:3,B:1,C:4,D:5,E:3 numarul ;reprezinta numerele asociate campurilor respective, impreuna cu

; de biti pt fiecare camp mov cx, mask C ; (CX)=000 0 1111 00000 000=0f00H mov cl, width D ; (CL)=5, dimensiunea campului D mov cl, C ;(CX)=8, pozitia campului C 42. Directivele ORG, EQU si simbolul contor program $. Directiva EQU. Aceasta directiva permite asignarea unei valori la un simbol, in momentul asamblarii. Sintaxa este: <nume> EQU <expresie> unde expresia poate fi: constanta, orice expresie corecta in limbaj de asamblare, simbol definit anterior, sir de caractere cu diferite semnificatii (referinta indexata, operator prefix de segment si operanzii sai, nume de instructiuni). Diferenta dintre EQU si = este ca numele simbolice ce folosesc EQU nu isi pot modifica valoarea pe durata asamblarii programului. Directiva ORG. Contorul de locatii poate fi initializat prin aceasta directiva cu o anumita valoare pozitiva astfel: ORG <expresie> unde expresia este evaluata modulo(64K) si nu poate contine referinte ulterioare. Nu poate fi asignata la o eticheta, adica o declaratie de forma: start: ORG 100 H, sua pentru date. Simbolul contor program $ (contor locatie). Reprezinta adresa curenta a contorului de program, adica adresa relativa in cadrul segmentului curent al instructiunii sau a datelor de asamblat. La inceputul fiecarui segment, contorul de locatii este initializat la 0 si e actualizat de asamblor pe masura asamblarii programului. Exemple: lista dw 11, 22, 33, 0aah lung_lista equ ($ linie-lista)/2 mesaj db mesaj $ lung_mesaj equ $ - mesaj

43. Definirea completa a segmentelor. Se utilizeaza o declaratie de forma: nume_seg SEGMENT [tip_aliniere][tip_combinare][tip_utilizare][clasa_seg] . .<corpul segmentului> . nume_seg ENDS unde nume_seg este numele asociat segmentului, care trebuie sa fie unic si caruia i se asociaza o adresa de segment (de 16 biti), corespunzatoare pozitiei in memoria segmentului, in faza de executie a programului. Initializarea unui registru segment( DS,ES,SS) cu un segment declarat revine utilizatorului, care o va face in mod explicit in cadrul programului, utilizand pt aceasta numele segmentului respectiv: mov ax,<nume_segment> mov ds, ax ; in mod asemanator pt ES sau SS ;instructiuni sau date

44.Definirea simplificata a segmentelor.

.MODEL tip_model
Prin aceasta directiva se specifica dimensiunea si modul de dispunere a segmentelor in memoria RAM. Modelele de implementare, tip_model, sunt urmatoarele: - tiny pt care LP + LD + LS < un segment (64K) - small pt LP < un segment (64K), LD + LS < un segment - medium pt LP > un segment (64K), LD + LS < un segment - compact - pt LP < un segment (64K), LD + LS > un segment - large pt LP > un segment (64K), LD + LS >un segment - huge la fel cu modelul anterior, cu diferenta ca referintele sunt normalizate. Abrevierile utilizate sunt: LP, LD si LS; ele reprezinta lungimea programului (codului), dimensiunea memoriei pt date si respectiv pt stiva. 45.Simboluri predefinite utilizate n definirea simplificat a segmentelor. .MODEL tip_model -> directive ce specifica dimensiunea si modul de dispunere a segementelor in RAM, modele de implementare tip_model: tiny (pt care LP+LD+LS<1 segm 64K), small (pt LP<1 segm, LD+LS<1 segm), medium (pt LP>1segm, LD+LS<1 segm), compact (pt LP<1segm, LD+LS>1 segm), large (pt LP>1 segm, LD+LS>1 segm), huge (la fel ca large numai ca referintele sunt normalizate). .STACK [dimensiune] -> aloca o zona de memorie, de dimensiune specificata, pt segmental de stiva, daca nu e specificata, aceasta va fi implicit de 1Ko. .CODE [nume] -> precede processor de cod, incarcarea acestui registru se va face automat de catre DOS prin executie, care are sarcina amplasarii segmentelor de memorie, se poate asocial nume de max 6 char pt modelele medium, large si huge. .DATA -> processor de date pentru care utilizatorul trebuie sa initializeze, in mod explicit, registrul DS, cu adresa segmentului de date @DATA .DATA? -> pentru date neinitializate, referinte de tip NEAR .FARDATA [nume] -> date initializate sau nu, referinte de tip FAR .FARDATA? [nume] -> date neinitializate, referinte de tip FAR .CONST -> segm cu date de tip read-only, care pot fi rezidente si in ROM .data, .const, .data?, .stack pot fi grupate in DGROUP @CODE -> numele segm de cod @DATA?, @DATA -> numele segmentului de date (ne)initializate @FARDATA?. @FARDATA -> numele segmentului de date (ne)initializate, de tip FAR @CURSEG -> numele segm current executat @FILENAME -> numele de baza al fisierului sursa current @CODESIZE -> 0 pt tiny, small, compact si 1 pt medium, large, huge @DATASIZE -> 0 pt small, medium, 1 pt compact, large si 2 pt huge @CPU -> returneaza o val pe 16 biti care determina directivele processor active (0-8086,1-186,2-286,3-386, 4-486, 5-Pentium, 6-rezervat, 7-instructiuni specific modulului protejat) @WORDSIZE -> returneaza o val pe 16 biti care determina tipul de utilizare al segmentului @MODEL -> returneaza 1-tiny, 2-small, 3-compact, 4-medium, 5-large, 6-huge, 7-flat

.SEQ si .ALPHA -> utilizate pt dispunerea segmentelor in ordine secventiala, resp alfabetica .STARTUP -> genereaza instructiuni pt initializarea registrelor segment .EXIT -> poate fi utilizata pt generarea fct de iesire si revenire in DOS ALIGN -> alinierea instructiunii care urmeaza incepand de la o adresa anumita EVEN -> avanseaza contorul de locatii astfel incat urmatoarea instructiune sa fie aliniata la o adresa para .CREF -> genereaza tabela cu referinte incrucisate .tip_procesor (286,386,486 ) -> utilizarea instructiunilor pt un anumit tip de processor COMMENT -> permite comentarea pe mai multe linii 46.Asocierea segm cu registrele segm. Pseudoinstr. ASSUME. Deoarece intr-un program pot exista mai multe segmente de diferite tipuri, asamblorul trebuie informat in leg cu cele 4 segm logice curente, lucru realizat cu pseudoinstr ASSUME: ASSUME<reg_segment>:<segment> <reg_segment> - unul din registrii CS,DS,ES sau SS; <segment> - numele unui segm/grup de segm ce va fi adresat de registrul segm processor sau de operatorul SEG si numele unei variabile/etichete din segm processor : assume cs: code, ds: dgrup, es: SEG var_a, ss: SEG varf_stiva Pt anularea asocierii: - una din formulele: assume <reg_seg>: NOTHING ; anuleaza ; asocierea reg_seg la orice segm assume NOTHING ; anuleaza asocierile facute, ; pt toate registrele 47.Initializarea registrelor segment. Registrele CS:IP initializate pt executie de sist de operare la incarcarea programului executabil in memorie a I ele sa contina adresa primei instr ce trebuie executata din program: END [adresa_de _start] <adresa_de_start> - expresie ce specifica prima instr executabila si care va processor continutul registrului IP. Adresa de start este processo (poate lipsi pt unele module de program ce cont date sau processor). CS initializat de SO, cu prima adresa de segment disponibila; IP initializat cu deplasamentul primei instr executabile in cadrul segm. Pt SS:SP initializare facuta de: - utilizator, dc se folosesc processor complete de segmentare si nu se specifica tipul si clasa segm de stiva; - automat (SP initializat cu dimens segm de stiva declarata in processor .stack sau rezervata in declararea processo a segm de stiva). DS, ES etc initializate explicit si intotdeauna de programator. 48. Prefix segment.Referinte anonime. Dc o referinta la o variabila nu este acoperita de o processor ASSUME, asamblorul poate fi informat explicit asupra registrului segment al variabilei prin codificarea unui prefix de segment de forma: reg_seg: instructiune (referinta) in fata variabilei respective. Initializarea e facuta de utilizator. Dezavantaje: - e valabila doar pt o instructiune (prefixul de segment trebuie precizat pt fiecare referinta la o variabila) e foarte usor sa se greseasca pt ca se refera la un registru de segment si nu la un nume de segment. Variabilele referite astfel: [bx], [bp], word ptr [si], byte ptr [di], [bx].camp, sunt denumite referinte anonime, pt ca nu este precizat numele variabilei din care sa se poata det processor caruia ii apartin. In astfel de situatii registrele de segment utilizate pt adresare sunt det in mod implicit pe baza unor reguli.

49.Reguli pt det registrului segment implicit. Se refera la cazurile in care in instr. nu apar referiri explicite la registrele de segm sau nu apar nume de variabile din care sa reiasa registrul de segm care trebuie utilizat. Registrele de segm utilizate implicit sunt: pt registrele de baza: SS pt BP, DS pt. BX; pt.registrele index: DS pt ambele processo index (DI, SI). Dc instr. foloseste si un registru de baza si unul index, atunci se foloseste regula coresp. registrului de baza. Instr. care lucreaza cu stiva (push,pop,call,ret,int,iret) utilizeaza SS:SP si nu pot fi prefixate. Instr. pe siruri utilizeaza pt sirul destinatie registrul segm ES. Referintele anonime ce nu fol. registrul segm DS pt sirul sursa necesita specificarea explicita a reg. de segm utilizat si tipul operanzilor: movs es:byte ptr [di],ss:[si] movs word proces:[di],ss:[si] 50.Definirea si utilizarea grupurilor de segmente.

<nume_grup> GROUP <lista_nume_segmente>


<nume_grup> - numele grupului de segm pt det adresei de sgm utilizata pt referirea in cadrul grupului de sgm. Utilizat pt.: a processor un registru de segment, intr-o pseudoinstr. ASSUME: assume ds:dgrup mov ax,dgrup mov ds,ax ca prefix de operand, pt a specifica utilizarea valorii de baza a grupului sau deplasamentul in cadrul acestuia: mov ax,offset dgrup:var1 ; deplasamentul in grup dd dgrup:var2 ; adresa in cadrul grupului <lista_nume_segmente> - nume de segmente sau expresii de forma: SEG nume_variabila, SEG nume_eticheta 51. Setul de instructiuni; setul de instructiuni de baza. Setul de instructiuni e impartit in 3 subseturi processo: setul instructiunilor de baza, setul extins de instructiuni (instr pt I/O din processor, BOUND, I/O pe bloc), setul de instructiuni pentru controlul de proces (controlul mecanismelor de administrare, protectia memoriei process). 8086(88) instruct. de baza 80186 set extins de instruct. 80286 instruct. control proces 80386 instruct. pe 32 biti 80486 instruct. in process proces PENTIUM instruct. MMX (date/64 biti) Setul de instr.de baza: instr. de transfer de date, aritmetice, operare pe bit (logice,deplasare, rotire), operare pe siruri, transfer al controlului de program, pt controlul de processor. 52. Instruciuni de conversie (extensie de semn). Realizeaza extensia de semn a acumulatorului (AL,AX,EAX) in extensia sa (AH,DX, EDX). Nu se modifica niciun indicator. Sunt folosite pentru a furniza un deimpartit de lungime duble inainte de a efectua o impartire cu semn CBW (Convert Byte to Word) -> extensie de semn a lui AL in AH CWDE (Convert Word to Double Word Extended) -> extensie AX in EAX CWD (Convert Word to Double Word) -> extensie AX in DX CDQ (Convert Double Word to Quad Word) -> extensia EAX in EDX MOVSX (move with sign extension) <dest>, <sursa> MOVZX (Move with zero extension) <dest>, <sursa>

53. Instruciuni de transfer cu stiva. Accesul la datele (parametrii) din stiv, cu descrcarea sau fr descrcarea stivei. Utilizate pentru salvarea / refacerea adresei de revenire pentru apel/ntreruperi; administrarea stivei pentru astfel de operaii este fcut, n mod automat, de ctre procesor , salvarea / refacerea coninutului unor resurse (registre, memorie etc.) la intrarea ntr-o procedur, respectiv la ieirea din aceasta , pentru transferul parametrilor de intrare / ieire ntre o procedur i programul apelant, precum i pentru alocarea dinamic de memorie. PUSH <sursa> - depune n vrful stivei <sursa>. (SP) (SP) 2, ((SP)+1:(SP)) (sursa) Operandul surs poate fi registru, memorie de 16 bii, sau o dat imediat. Dac data imediat este octet, ea este extins, cu semn, la o valoare de tip cuvnt. POP <dest> - extrage din vrful stivei i duce la dest. (dest) ((SP)+1:(SP)), (SP) (SP) + 2 PUSHA -> permite salvarea registrelor: AX, CX, DX, BX, SP, BP, SI, DI POPA -> care reface aceleai registre, bineneles n ordinea invers. La procesorul 386/486 salvarea i refacerea se face cu instruciunile: PUSHAD, POPAD pentru registrele de 32 bii (EAX, ECX, ..., EDI), n aceeai ordine. Pentru ambele tipuri de instruciuni de refacere n bloc a registrelor, registrul SP (respectiv ESP) nu va prelua din stiv valoarea salvat anterior execuiei instruciunii POPA/POPAD. n final coninutul registrului SP (ESP) va crete cu 16 (32). 54. Instruciunea de transfer octet de la un cod la altul (xlat). XLAT - instruciune de transfer dintr-o tabel de octei, sau de transfer de octet, de la un cod la altul: (AL) ((BX) + (AL)) Coninutul acumulatorului este nlocuit de un octet dintr -o tabel. Adresa de nceput a tabelei se afl, n prealabil, n BX. Coninutul registrului AL este considerat ca adres relativ n aceast tabel de conversie (translaie). Valoarea corespunztoare din tabel (de tip octet) este mutat n AL. Referirea la o adres, n instruciunea XLAT, este necesar pentru a permite asamblorului s determine registrul segment care va fi utilizat la execuia instruciunii (registrul BX conine numai adresa relativ n cadrul segmentului din care face parte tabela de conversie): XLAT [adr_tabela], XLAT [[rs:] adr_tabela] sau XLATB 55. Codurile furnizate de tastatur. pentru caracterele obinuite din setul ASCII de baz (0127): cod de scanare + codul ASCII (0127); setul ASCII extins (128255), ALT + taste numerice: cod scanare + codul ASCII (extins) ; pentru tastele speciale (funcionale, de deplasare, CTRL, insert, delete etc.), se transmite: cod scanare +0; Pentru utilizarea funciilor tastaturii se poate apela INT 16h, cu urmtoarele funcii (aceast valoare se ncarc n AH): 0, citire caracter (AL=cod ASCII, AH=cod scanare); 1, test caracter disponibil, i returneaz n ZF=0, dac este caracter disponibil n AX, 2, citirea strii tastelor de tip shift, care este returnat n AL (acesta este memorat i la adresa 40h:17h).

ZF=1, dac nu este caracter disponibil;

56. Modalitatea de modificare a indicatorului TF (exemplificare).

Instruciuni de transfer adrese


LEA <dest_reg>,<sursa_mem> (Load Effective Address) La procesoarele 386/486 destinaia i/sau sursa pot fi i de 32 bii. Pot apare, ns situaiile:

LEA <reg_16>,<mem_32> LEA <reg_32>,<mem_16>


LDS <dest_reg_16>,<sursa_mem_32> (Load pointer using DS) LES <dest_reg_16>,<sursa_mem_32> (Load pointer using ES) Exemple: sir db . . . . . . . / adr_sir dd sir/ lds si,adr_sir / octeti db 20 dup (?) / ptr_oct dw offset octeti/ dw seg octeti/ les ptr ptr_oct

di,

dword/

Instruciuni de transfer indicatori


LAHF (Load AH from Flags) (AH) (SF, ZF, *, AF, *, PF, *, CF) SAHF (Store AH into Flags) (SF, ZF, *, AF, *, PF, *, CF) (AH) PUSHF (PUSH Flags) (SP) (SP) 2, ((SP)+1:(SP)) Indicatori (flags) POPF Indicatori ((SP)+1:(SP)) , (SP) (SP) + 2 57.Formatul datelor aritmetice. 4 tipuri de numere: binare: fara semn si cu semn zecimale: neimpachetate si impachetate (ambele fara semn) Nr binare pot fi de 8 sau 16 biti (32 biti la 386). Nr zecimale memorate in octeti: 2 cifre/octet la formatul zecimal impachetat, o cifra/octet cel neimpachetat. Intervale: -nr binare fara sgn: 0..255 octet, 0..65535 cuvant, 0..2^32-1 cuvant dublu; -cele cu sgn in cod complementar (fata de 2). Pt nr fara sgn, depasirea e detectata de indicatorul CF, pt nr cu sgn depasirea e detectata de OF. Pt a det depasirea instructiuni de salt conditionat pt CF/OF dupa operatia respectiva. 58.Interpretarea datelor i a indicatorilor pentru operaii cu numere cu i fr semn. Sunt definite operaiile de nmulire i mprire, specifice tipului de date binar cu semn, iar operaiile de adunare i scdere sunt realizate cu instruciunile pentru numere binare fr semn. Dac pentru numere fr semn depirea este detectat de indicatorul CF, pentru numere cu semn aceasta este detectat de indicatorul OF. Pentru determinarea depirii se pot utiliza instruciunile de salt condiionat, pentru CF sau OF, dup operaia respectiv. 59. Modalitatea de operare pentru numere zecimal mpachetate. Operaiile aritmetice cu numere zecimal nempachetat se realizeaz n dou etape. Operaiile de adunare, scdere i nmulire, de la numere binare fr semn, furnizeaz un rezultat int ermediar n AL, care apoi n a doua etap este ajustat la o valoare corect, de numr zecimal nempachetat. mprirea se face n mod asemntor, cu excepia ajustrii care este realizat prima, asupra operandului numrtor, n registrul AL, i apoi se realizeaz mprirea binar fr semn; dac rezultatul nu este corect mai poate urma o a treia etap de ajustare final. 60. Modalitatea de operare pentru numere zecimal nempachetate. Operaiile de adunare i scdere pt. nr. zec. mpach. se realizeaz n dou etape, la fel ca la numerele zecimal nempachetate: instr. respectiv (+, -), va furniza un rezultat n AL; corecia rezultatului din AL la formatul zec. mpachetat. Nu exist instruciuni de ajustare pentru operaiile de nmulire sau mprire cu astf el de numere (zec. mpachetat).

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