Lucrarea nr. 10
 

Utilizarea microprocesorului în modul protejat (I)

 
Modul protejat
Structura unui descriptor de segmente
Utilizarea modului protejat la 286
 

Tema de laborator
 
 

Modul protejat

În modul de adresare protejat conținutul registrului segment reprezintă un index într-o tabelă a descriptorilor de segmente; fiecare descriptor de segment conține o serie de informații referitoare la segment, inclusiv adresa de bază a segmentului. Adresa de bază a segmentului se adună cu valoarea adresei efective a deplasamentului în cadrul segmentului rezultând o adresă liniară reprezentată pe 24 de biți (la 286). Adresa fizică poate fi egală cu adresa liniară sau pentru determinarea ei se poate folosi un mecanism opțional de paginare (de la 386 în sus).

Cei 16 biți ai unui registru segment sunt împărțiți în trei zone:


Figura 10.1

Intrarea numărul zero din tabela descriptorilor globali corespunde selectorului nul (0000h).
Fiecare program care rulează în modul protejat poate folosi segmente aflate într-un spațiu de adrese virtuale de forma selector:offset.
 


Structura unui descriptor de segmente (286)

Procesorul 286

Figura 10.2


Limita dimensiunea segmentului
Baza adresa de bază a segmentului
1 - segmentul este prezent în memorie
0 - segmentul nu este prezent în memorie
DPL nivelul de privilegiu al descriptorului
T 1 - descriptorii segmentelor programelor aplicație
0 - pentru descriptorii folosiți de sistem și pentru cei de tip poartă
Tip (pentru T = 1)
Bitul 11 0 - segment de date
1 - segment de cod
Bitul 10 0 - segment de date - crește spre adrese mari
0 - segment de cod - segment obișnuit
1 - segment de date - crește spre adrese mici
1 - segment de cod - segment ‘conform’
Bitul 9 0 - segment de date - nemodificabil
0 - segment de cod - se permite doar execuția
1 - segment de date - modificabil
1 - segment de cod - se permite și citirea
Bitul 8 0 - segmentul nu a fost accesat
1 - segmentul a fost accesat

Tabelul 10.1





Utilizarea modului protejat la 286

Trecerea din modul real în modul protejat

Pentru a trece procesorul în modul protejat se parcurg următoarele etape:

  1. se trece în modul protejat prin setarea bitului 0 din registrul CR0:
      1. lmsw AX
  2. prima instrucțiune din modul protejat trebui să fie jmpfar seg, off pentru a goli coada de instrucțiuni și pentru a încărca în CS un descriptor corect de segment.
      1. jmpfar MACRO seg, off
           db 0eah
           dw offset off
           dw seg
           ENDM
  3. se inițializează registrele segment.


Trecerea din modul protejat în modul real

La procesoarele 286 ieșirea din modul protejat se face prin resetarea procesorului. Pentru aceasta se urmează următorii pași, folosindu-se facilitatea de inițializare și salt FAR indirect prin 0040H:0067h:

    1. încarcă adresa de revenire într-o variabilă BIOS aflată la adresa 0040h:0067h;
    2. stabilește modul de inițializare al sistemului (registrul 0fh din CMOS):
    3. mov al, 0fh
      out 70h, al
      mov al, 5
      out 71h, al
    4. trecerea in modul protejat
    5. executie im mod protejat
    6. reset soft:
    7. mov al, 0feh
      out 64h, al
    8. sterg cele doua controller-e de intreruperi
    9. out 21h, 0
      out 0a1h, 0
    10. activez intreruperile


 


Tema de laborator

Să se implementeze un program ce trece procesorul în modul protejat, afișează un text pe ecran scriind direct în memoria video și apoi se iese din modul protejat.