curs assembly 2

17
C2 1 Structura procesoarelor din familia INTEL Structura procesorului 286 Funcţionarea (ciclul) procesorului: • 1.Citeşte instrucţiunea - pe durata acestui ciclu se transmite adresa instrucţiunii de executat şi se aduce, din memorie, instrucţiunea în CPU (ciclul Fetch); • 2. Decodifică instrucţiunea (şi în paralel citeşte un posibil operand de 16 biţi); • 3. Transmite adresa şi citeşte un operand sursă, din memorie, dacă se specifică în instrucţiune, şi citeşte valoarea registrului destinaţie (ciclul Read);

Upload: nex

Post on 15-Feb-2016

223 views

Category:

Documents


0 download

DESCRIPTION

assembly curs 2

TRANSCRIPT

Page 1: curs Assembly 2

C2 1

Structura procesoarelor din familia INTEL

• Structura procesorului 286• Funcţionarea (ciclul) procesorului:

• 1.Citeşte instrucţiunea - pe durata acestui ciclu se transmite adresa instrucţiunii de executat şi se aduce, din memorie, instrucţiunea în CPU (ciclul Fetch);

• 2. Decodifică instrucţiunea (şi în paralel citeşte un posibil operand de 16 biţi);

• 3. Transmite adresa şi citeşte un operand sursă, din memorie, dacă se specifică în instrucţiune, şi citeşte valoarea registrului destinaţie (ciclul Read);

• 4. Execută instrucţiunea (ciclul Execution);• 5. Transmite adresa şi scrie rezultatul în memorie, dacă

instrucţiunea cere (ciclul Write);

Page 2: curs Assembly 2

C2 2

E x e c uţ i a s e c v e n ţ i a l ă a f a z e l o r u n e i i n s t r u c ţ i u n i

Execuţia paralelă a fazelor unei instrucţiuni

Din punct de vedere al vitezei de execuţie sunt evidente trei lucruri: instrucţiunile mai lungi -> mai mult timp pentru execuţie; instrucţiunile care nu fac referire la memorie se vor executa mai rapid; instrucţiunile ce utilizează moduri de adresare complexe se vor executa

mai lent;

Page 3: curs Assembly 2

C2 3

Page 4: curs Assembly 2

C2 4

• D15 ÷ D0 = magistrala, bidirecţională, de date; ea este folosită ca intrare pentru date de la memorie, porturi de I/O, cicluri de recunoaştere întrerupere şi folosită ca ieşire pentru datele transmise la memorie sau porturi de I/O;

• A23 ÷ A0 = magistrala de adrese (de ieşire), care furnizează adresa fizică de memorie sau adresa unui port de I/O;

• BHE\ = acest semnal indică un transfer de date pe octetul superior (Bus High Enable), al magistralei de date (D15 ÷ D8). Acest semnal, de ieşire, împreună cu linia de adresă A0 determină tipul de transfer realizat pe magistrală: octet superior (D15 ÷ D8), octet inferior (D7 ÷ D0) sau cuvânt (D15 ÷ D0);

• M/IO\ = acest semnal, de ieşire, separă accesele la memorie de cele din spaţiul I/O (Memory / Input-Output); dacă este 1 pe durata lui TS se execută un ciclu de memorie sau halt; dacă este 0 se execută un ciclu I/O sau recunoaştere întrerupere.

Page 5: curs Assembly 2

C2 5

• S1\, S0\ = stare magistrală, care indică iniţierea unui ciclu, şi împreună cu M/IO\ şi COD/INTA\ definesc tipul ciclului: halt, recunoaştere întrerupere, citire/scriere de date în memorie, citire/scriere date de la porturi I/O, citire instrucţiune din memorie (fetch), nu este ciclu magistrală, şi unele rezervate.

• COD/INTA\ = semnal (Code/ INTerrupt Acknowledge), de ieşire, utilizat pentru separarea ciclurilor fetch de ciclurile de citire date din memorie, respectiv cicluri de recunoaştere întrerupere de cicluri I/O, în combinaţie cu celelalte semnale (S1\, S0\, M/IO\).

• LOCK\ = semnalul 'bus LOCK' specifică unui alt modul master de pe magistrala sistemului că nu poate prelua controlul magistralei. Semnalul este activat de prefixul instrucţiune cu acelaşi nume, LOCK, sau automat de hard- ul procesorului 286 pe durata execuţiei unei instrucţiuni XCHG cu memoria, pe durata recunoaşterii unei întreruperi sau pe durata unui acces la tabela de descriptori de segment.

Page 6: curs Assembly 2

C2 6

• READY\ = semnalul de intrare 'bus READY' termină un ciclu de magistrală; ciclurile de magistrală sunt extinse fără limită până când semnalul READY\ devine activ (LOW).

• HOLD, HLDA = cele două semnale 'bus HOLD request' şi 'bus HOLD Acknowledge', primul de intrare, iar cel de-al doilea de ieşire permit controlul magistralei; semnalul HOLD permite unui alt modul master (procesor) să ceară controlul asupra magistralei locale; când controlul este recunoscut (cedat), procesorul 286 trece magistrala sa (date, adrese, stări) în starea de mare impedanţă, şi activează semnalul de răspuns HLDA, intrând în starea 'hold' (magistrala suspendată). Magistrala este preluată de celalalt master (procesor) până când semnalul HOLD devine inactiv (LOW), iar procesorul 286 dezactivează linia HLDA, recâştigând controlul asupra magistralei locale.

Page 7: curs Assembly 2

C2 7

• INTR = activarea acestui semnal, de intrare, (HIGH) va cere procesorului 286 să-şi suspende execuţia programului curent şi să servească o cerere externă ('INTerrupt Request'). Întreruperile pot fi mascate (anulate), când IF = 0. Când 286 răspunde la o cerere de întrerupere, el realizează 2 cicluri magistrală de recunoaştere întrerupere, pentru a citi un vector de întrerupere, de 8 biţi, care identifică sursa întreruperii. Pentru a asigura întreruperea programului, INTR trebuie să rămână activ până este completat primul ciclu de recunoaştere întrerupere, pe durata căruia se transmite semnalul de recunoaştere a întreruperii INTA\.

• NMI = semnalul de intrare 'Non Maskable Interrupt', activ (HIGH), reprezintă tot o cerere de întrerupere externă, dar nemascabilă, deci nu are nici o semnificaţie starea indicatorului IF pentru acest semnal. Pentru această întrerupere nu se realizează cicluri de recunoaştere întrerupere, şi se generează un vector de întrerupere intern, cu valoarea 2.

Page 8: curs Assembly 2

C2 8

• PEREQ, = 'Processor Extension operand REQuest', intrare şi • PEACK\, = 'Processor Extension operand ACKnowledge', de

ieşire, extind facilităţile de protecţie şi administrare a memoriei virtuale, ale procesorului 286, şi pentru extensii procesor (80287);

• BUSY\, = semnal intrare, 'processor extension BUSY' şi• ERROR\, = 'processor extension ERROR', indică condiţia de

operare a unei extensii procesor pentru procesorul 286;

Page 9: curs Assembly 2

C2 9

• Pe durata unui ciclu de magistrală se realizează operaţiile: se activează pe magistrala de adrese, adresa unei locaţii de

memorie, sau a unui port I/O, şi se memorează într-un registru de adrese, extern;

se generează semnalul de comandă corespunzător, pentru citire/scriere date;

dispozitivul selectat (memoria sau portul I/O) realizează transferul de date, şi transmite procesorului un semnal de răspuns, pentru a încheia ciclul.

• Controllerul de magistrală (82288) decodifică semnalele de stare (S1\, S0\, M/IO\, COD/INTA\ şi READY\) pentru a genera comenzi de citire /scriere (MRDC\, MWTC\, IORC, IOWC) şi semnale pentru comanda latch-urilor de adrese şi transmisie/recepţie date (ALE, DEN, DT/R\).

Page 10: curs Assembly 2

C2 10

Page 11: curs Assembly 2

C2 11

• La procesorul 386/486 acest registru (EFLAGS) are 32 biţi, dintre care ultimii 16 sunt identici cu aceştia, dar în plus mai sunt utilizaţi încă doi biţi (16 şi 17) care au următoarea semnificaţie:

• RF (Resume Flag) - acest indicator dezactivează, temporar, excepţiile de depanare (debug), astfel încât să se poată restarta o instrucţiune după o excepţie de depanare, fără a se genera, imediat, o altă excepţie de depanare; adică nu se execută o instrucţiune de breakpoint, dacă este returnat controlul de excepţia de depanare direct la o astfel de instrucţiune.

• VM (Virtual 8086 Mode) - acest bit indică faptul că se execută un program 8086, dacă este poziţionat pe 1. Bitul VM furnizează modul V86, in modul protejat de operare

Page 12: curs Assembly 2

C2 12

Page 13: curs Assembly 2

C2 13

Page 14: curs Assembly 2

C2 14

• Nivelurile de privilegiu• Mecanismele de protecţie ale procesorului 286 se bazează pe

noţiunea de 'ierarhie de încredere' (sau de privilegiu). Există patru niveluri de privilegiu:0 - cel mai privilegiat, 3 - cel mai puţin privilegiat. Următoarele obiecte, recunoscute de procesor, conţin niveluri de privilegiu:

- descriptorii de segment conţin un câmp DPL - Descriptor Privilege Level, adică descriptor de nivel de privilegiu;

- selectoarele de segment conţin un câmp RPL - Requestor's Privilege Level, adică nivelul de privilegiu al procedurii căreia aparţine selectorul;

- un registru intern al procesorului memorează CPL - Current Privilege Level, care este egal cu DPL al segmentului pe care îl executa procesorul.

Page 15: curs Assembly 2

C2 15

Page 16: curs Assembly 2

C2 16

Accesul între nivelele de privilegiu (protecţie)

Page 17: curs Assembly 2

C2 17

Segmente de stare task (TSS)• Un TSS este un segment special de memorie, pe care procesorul îl

utilizează pentru a suporta mutitasking. Acesta conţine o copie a tuturor registrelor ce trebuie salvate, pentru a reface starea unui task; el mai conţine valori ce sunt asociate task-ului, dar nu sunt memorate în registrele CPU. TSS conţine trei selectori de segment de stivă, adiţionali, (SS0, SS1, SS2), şi trei pointeri de stivă corespunzători (ESP0, ESP1, ESP2).

• Când un apel sau întrerupere, printr-o poartă determină o modificare în privilegiu, noile SS:ESP, sunt încărcate din TSS. Registrul de task (TR) conţine selectorul TSS activ, curent.

• Când apare o comutare de task, toate registrele task-ului curent executat sunt salvate în TSS-ul activ. Registrul task se încarcă, apoi, cu selectorul unui nou TSS, şi fiecare registru general este încărcat cu valorile respective, din noul TSS.

• TSS mai conţine ‘legătura înapoi’ (back link) care reprezintă selectorul TSS-ul executat anterior.