Lucrarea nr. 2
 

Gestionarea memoriei la procesoarele x86

 
Organizarea memoriei
Modurile de adresare ale lui 8086

Ghid pentru memoriile RAM (En)
Ghid pentru memoriile DRAM (En)
Identificarea memoriilor DRAM (En)
Timpi de acces (En)
Componente DRAM (En)
Circuite DRAM (En)
 

Tema de laborator


 

Organizarea memoriei


Microprocesorul 8086 are posibilitatea să adreseze un spațiu de memorie de 1Mo. Adresarea acestui spațiu de memorie se face cu ajutorul a 20 de linii de adresă.
Pentru 8086 (sau x86 în modul real) memoria este organizată în segmente ce au dimensiunea de 64Ko. Aceste segmente de memorie sunt adresabile pe baza unui registru segment. Un segment poate începe de la orice adresă de memorie care este multiplu de 16. Segmentele se pot suprapune, total sau parțial, pot fi adiacente sau disjuncte. La un moment dat sunt active patru segmente, corespunzătoar celor patru registre segment ale lui 8086. Accesul unei locații de memorie dintr-un segment se face cu ajutorul unei adrese relative în cadrul segmentului, adresă numită deplasament (offset). Acest mod de adresare format din adresă de segment și adresă relativă se numește adresare logică. Deci o adresă logică are următoarea formă generală:

segment : offset
Obs: La programarea în limbaj de asamblare se vor folosi adresele logice.

Adresa fizică a unei locații de memorie (reprezentată pe 20 de biți) se obține din adresa logică adunând adresa de segment înmulțită cu 16 (deplasată la stânga cu 4 biți) cu adresa relativă în cadrul segmentului.
 

adresa_logică = segment : offset
adresa_fizică = segment*16 + offset = segment<<4 + offset
Obs: O aceeași adresă fizică poate fi reprezentată prin mai multe adrese logice, dar o adresă logică are o singură adresă fizică.
 
 

Modurile de adresare ale lui 8086

Adresare imediată - în instrucțiune apare valoarea operandului
mov al, 5
mov bx, offset nume_variabila
mov ax, segment_date
Adresare la nivel de registru - operandul referit se găsește într-un registru.
mov ax, dx
Adresare directă - în instrucțiune apare adresa operandului
mov ax, nume_variabila
mov nume_variabila(2), ax
Adresare cu bază - în instrucțiune apare registrul de bază utilizat. Ca registre de bază se pot folosi registrele BX și BP.
mov bx, offset nume_variabila
mov ax, [bx]
mov cx, [bx+2]
Adresare indexată - în instrucțiune apare registrul index utilizat.
mov si, 5
mov ax, nume_variabila[si]
Adresare cu bază și indexată - în instrucțiune apar registrele de bază și index.
mov ax, nume_variabila[bx][di]
mov cx, nume_variabila[bx+si]
mov dx, nume_variabila[bx+si+5]

 
 

Tema de laborator

Să se implementeze un program în limbaj de asamblare pentru 8086 ce verifică un segment de memorie.
  Exemplu:memcheck.exe