Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

Documente similare
Limbaje de Programare Curs 6 – Functii de intrare-iesire

1. ARHITECTURA MICROPROCESOARELOR 1.1. Microprocesorul. Noțiuni generale Progresele tehnologice și electronice, înregistrate în ultimele decenii, au d

Slide 1

-

Microsoft Word - 4-Interfete paralele.doc

PROCESOARE NUMERICE DE SEMNAL

Microsoft Word - PCLP2_Curs_4_2019.doc

Slide 1

Microsoft Word - Programa_Evaluare_Nationala_2011_Matematica.doc

Programarea şi utilizarea calculatoarelor

LUMINIŢA SCRIPCARIU

SSC-Impartire

Microsoft Word - Curs1.docx

E_d_Informatica_sp_SN_2014_bar_10_LRO

Slide 1

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Slide 1

proiectarea bazelor de date

Microsoft Word - Notiuni de arhitectura calculatoarelor.doc

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Microsoft Word - CarteC.doc

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Microsoft Word - O problema cu bits.doc

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Microsoft Word - CarteC.doc

Controlerul LCD

Microsoft Word - PI-L7r.doc

Lab6LCD

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

De la BIT la procesor

Mnemonica

Microsoft Word - Evaluare_initiala_Matematica_Cls07_Model_Test.doc

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

4. Creşterea vitezei de execuţie a algoritmilor intensiv computaţio-nali cu ajutorul coprocesoarelor ataşate, bazate pe structuri logice reconfigurabi

Microsoft Word - 1-Introducere.doc

Limbaje de Programare Curs 8 – Fisiere

L4. TEOREMELE ALGEBREI BINARE. FUNCȚII LOGICE ELEMENTARE. OPERAȚII LOGICE PE BIT. SINTEZA FUNCȚIILOR LOGICE DIN TABELE DE ADEVĂR 1. Obiective Prin par

Secţiunea 7-8 începători Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 ID 100 puncte Calculatoarele trebuie să se recunoască în rețeau

L7

Microsoft Word - intro_msp430.doc

Microsoft Word - Lucrarea_10_t.doc

tehnologii web

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

E_d_Informatica_sp_MI_2015_bar_02_LRO

Slide 1

1

Spatii vectoriale

LOGICAL DESIGN OF DIGITAL COMPUTERS

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Instructiuni licenta - 2

Slide 1

PowerPoint Presentation

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

CABINET MINISTRU

SUBPROGRAME

Microsoft Word - TIC5

carteInvataturaEd_2.0_lectia5.pdf

Limbaje Formale, Automate si Compilatoare

PROCESOARE NUMERICE DE SEMNAL

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic Programare în limbaj de asamblare 42. Utilizare Debug şi TurboDebug

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

Subiectul 1

Calcul Numeric

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Laborator 3

Lucrarea 10

Laborator 04: Apeluri de funcții

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Facultatea de Automatică și Calculatoare

Informatică aplicată TEST GRILA TEST GRILĂ - REZOLVAT 1.Structura de principiu a unui sistem de calcul contine urmatoarele componente principale: A. u

PowerPoint Presentation

Microsoft Word - Fisa-Informatica-CH-2014.doc

Tablouri (continuare)

L4. TEOREMELE ALGEBREI BINARE. FUNCȚII LOGICE ELEMENTARE. OPERAȚII LOGICE PE BIT. SINTEZA FUNCȚIILOR LOGICE DIN TABELE DE ADEVĂR 1. Obiective Prin par

CL2009R0976RO bi_cp 1..1

Curs 10 Aplicaţii ale calculului diferenţial. Puncte de extrem 10.1 Diferenţiale de ordin superior S¼a trecem acum la de nirea diferenţialelor de ordi

Implementarea calculatorului didactic DLX (Cursul 3)

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

1

Microsoft Word - Programa_Bac_2011_C_Limba_engleza.doc

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

INSTITUTUL DE DEZVOLTARE A SOCIETĂŢII INFORMAŢIONLE

Cartelele telefonice

Diapositive 1

EXCEL FĂRĂ SECRETE Grafice şi diagrame

Microsoft Word - IA2-Lisp-stud.doc

Examenul de bacalaureat 2012

PowerPoint-Präsentation

Microsoft Word - Prelegere 1 - Bratu C. - Microcontrolerul.doc

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Limbaje de Programare Curs 5 – Siruri de caractere

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Microsoft Word - lab-fr_3

PowerPoint-Präsentation

Slide 1

Microsoft Word - D_ MT1_II_001.doc

Web Social FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 2. Dezvoltarea blogurilor prin intermediul WordPress.com PREZE

Transcriere:

174 12 Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este aceasta văzută de programatorul în limbaj de nivel înalt. Ele permit programatorului să construiască şi să utilizeze structuri complexe de date, în timp ce echipamentul poate trata doar matrice lineare cu elemente de dimensiune fixă. Pentru accesul la un element al unei structuri complexe de date trebuie evaluată adresa de memorie ce corespunde începutului zonei de memorie în care se păstrează acel element. De regulă, această operańie se efectuează prin mai multe instrucńiuni, utilizând mai multe moduri de adresare. Cu cât calculele efectuate în cadrul modului de adresare sunt mai complexe, cu atât numărul mediu de instrucńiuni, cerut de accesul la un element al unei structuri complexe de date, este mai mic. 12.1 Elemente de bază privind modurile de adresare Modurile de adresare utilizate de diferite microprocesoare sunt foarte variate. Ele prezintă însă o caracteristică generală: fiecare mod se obńine ca o combinańie între un număr relativ mic de obiecte şi funcńii (operańii) de bază. Se consideră că un obiect sau funcńie sunt fundamentale dacă, în absenńa acelui obiect sau funcńie unitatea de adresare nu este capabilă să genereze nici un mod de adresare. În consecinńă, obiectele fundamentale sunt registre şi deplasamente sau offset - uri conńinute în instrucńiune iar funcńiile fundamentale sunt adunarea, deplasarea şi adresarea indirectă. OperaŃia de deplasare ar putea fi înlocuită cu adunări sau scăderi, însă timpul consumat pentru adresare ar fi prea mare, aşa încât este considerată funcńie fundamentală. Adunarea include şi operańiile de incrementare şi decrementare, cazuri particulare de adunări. Registre. Sunt situate în unitatea centrală de prelucrare, în unitatea aritmetică şi în cea de gestiune a memoriei. Principalele roluri ale registrelor în ceea ce priveşte modurile de adresare sunt: registru operand: conńinutul registrului este chiar operandul la care se face referire;

registru adresă : conńinutul registrului este adresa operandului la care se face referire (operand în memorie); registru de bază : registrul conńine o adresă care, pentru obńinerea adresei complete a operandului, va fi utilizată împreună cu conńinutul unui alt registru sau cu un deplasament; Offset -uri. Sunt conńinute în instrucńiune (câmp imediat) şi sunt utilizate împreună cu conńinutul unui registru pentru calculul adresei unui operand din memorie. Câmpul imediat este un câmp opńional al unei instrucńiuni şi acesta poate fi: chiar operandul utilizat de instrucńiune (operand imediat); adresa completă a operandului (adresă imediată); un deplasament (offset) care va fi implicat în adresare. Adunarea. Toate modurile de adresare, cu excepńia celor mai simple, necesită adunarea a două sau mai multe valori pentru obńinerea adresei; operańiile de incrementare / decrementare sunt considerate cazuri particulare de adunare. Adresarea indirectă. Este o funcńie al cărei argument este dat de rezultatele unor calcule iar valoarea este adresa operandului din memorie. Modurile complexe de adresare pot folosi de mai multe ori adresarea indirectă pentru generarea adresei finale a operandului. Deplasarea. Este mutarea cu una, două sau mai multe pozińii binare, spre stânga, a valorii binare a unui parametru de adresare. Se utilizează în cadrul operańiei de indexare, care la rândul său se foloseşte în adresarea tablourilor. Indexarea produce deplasamentul (offset-ul) unui element din tablou pe baza valorilor indicilor săi. Fie a[i], i =, 1, 2,..., n, un tablou unidimensional format din elemente de lungime w (în octeńi); atunci adresa relativă a elementului a[i] fańă de baza tabloului a[] va fi offset(a[i]) = i * w. Cum lungimea unui element este de regulă 1, 2, 4 sau 8 octeńi, deplasarea se face respectiv cu, 1, 2 sau 3 pozińii binare, ceea ce este echivalent cu înmulńirea cu 1, 2, 4 sau 8 a valorii lui i. OperaŃia de deplasare se face mult mai rapid decât înmulńirea, ceea ce o recomandă pentru includerea în funcńiile de bază pentru adresare. 12.1.1. Formatul instrucńiunilor 175 InstrucŃiunile procesorului Intel 886 sunt ificate pe un număr de octeńi cuprins între 1 şi 6. Formatul sau structura instrucńiunii arată rolul fiecărui octet şi al câmpurilor de bińi conńinute în fiecare octet.

176 Primul octet conńine ul operańiei (pe 6 bińi), adică tipul prelucrărilor ce vor fi efectuate la execuńia instrucńiunii ( operańie aritmetică, logică, transfer de date, salt etc.). Al doilea octet conńine informańii privind adresarea memoriei, registrele în care se află operanzii, lungimea acestora, lungimea deplasamentului. octet 1 D W mod reg R/M octet 2 octet 3 deplasament - L deplasament - H octet 4 octet 5 data - L data - H octet 6 depl / data depl / data depl / data depl.l depl.l depl.h depl.h Fig.1 Formatul instrucńiunilor la Intel 886 Variante de instrucńiuni cu: 1, 2, 3, 4, 5, 6 octeńi data = operand imediat deplasament = adresă directă data data L data H OcteŃii 3, 4, 5 şi 6 pot avea semnificańia de deplasament pe 8 sau 16 bińi, date pe 8 sau 16 bińi sau deplasament şi date, conform figurii 1. Pe lângă formatul propriu-zis, mai poate exista un prefix de segment sau un prefix de repetare. La instrucńiunile cu doi operanzi, un operand este în mod obligatoriu într-un registru, precizat de câmpul REG iar celălalt operand este în registru sau în memorie, variantele fiind determinate de câmpurile R/M şi MOD. SemnificaŃia câmpurilor: D (destination) = destinańie; ifică sensul operańiei: D = câmpul REG indică operandul destinańie; D = 1 câmpul REG indică operandul sursă. De exemplu, urile instrucńiunilor add [cx], ax add ax, [cx] diferă numai prin câmpul D (aceeaşi operańie, aceiaşi operanzi dar diferă sensul de transfer).

W (word) = cuvânt; ifică lungimea operanzilor (octet sau cuvânt): W = operańie la nivel de octet; W = 1 operańie la nivel de cuvânt. REG - indică registrul care conńine unul din operanzi. Dimensiunea registrului specificat depinde de bitul W. REG W = W = 1 AL AX 1 CL CX 1 DL DX 1 1 BL 1 AH SP 1 1 CH 1 1 DH 1 1 1 BH R/M (register / memory) - câmp registru / memorie; dă informańii despre al doilea operand fiind dependent de câmpul MOD. Dacă MOD = 11, atunci R/M indică registrul care conńine al doilea operand iar în celelalte cazuri R/M indică registrul implicat în formarea adresei efective pentru al doilea operand. MOD 11 1 1 1 R/M W = W = 1 177 AL AX () + () () + () + d8 () + () + d16 1 CL CX () + () () + () + d8 () + () + d16 1 DL DX () + () () + () + d8 () + () + d16 1 1 BL () + () () + () + d8 () + () + d16 1 AH SP () () + d8 () + d16 1 1 CH () () + d8 () + d16 1 1 DH () + d8 () + d16 1 1 1 BH () () + d8 () + d16 În tabelul de mai sus, d8 şi d16 reprezintă deplasament pe 8 bińi, respectiv pe 16 bińi; acestea sunt specificate explicit în instrucńiuni. 12.2 Modurile de adresare a memoriei InstrucŃiunile microprocesorului 886 pot avea unul sau doi operanzi care pot fi conńinuńi în registre sau în memorie. Când există doi operanzi, unul este în mod obligatoriu într-un registru (nu pot fi ambii operanzi în memorie).

178 Dacă ambii operanzi sunt în registre, nu este necesară adresarea memoriei. Modurile de adresare specifică modul în care se calculează adresa operandului din memorie. Se utilizează denumirea de adresă de segment (AS) pentru adresa de început a segmentului de memorie în care se află operandul şi adresă efectivă (AE), pentru deplasamentul (offsetul) operandului în cadrul segmentului. Adresa de segment este furnizată de unul din cele 4 registre de segment. Adresă efectivă 8 sau 16 bińi Deplasament Adresă efectivă 19 CS 4 SS DS ES 19 Adresare imediată În acest mod de adresare, operandul este conńinut în instrucńiune. Nu este necesar accesul la memoria externă, deoarece tońi octeńii instrucńiunii sunt încărcańi în procesor la extragerea ei din memorie, din segmentul de. Exemplu: mov ax, 7FF add bx, 44C Adresarea directă Adresa fizică Fig. 2 Schema generală a modurilor de adresare la Intel 886

179 Adresa efectivă a operandului se obńine din câmpul deplasament al instrucńiunii care poate fi pe un octet sau pe doi octeńi; este un deplasament în interiorul segmentului curent de date..data DEP dw 12H.e mov bx, DEP ; la asamblare DEP se va înlocui cu offset-ul în ; cadrul segmentului de date; în final bx=12h. add cx, [2] ; deplasament explicit în instrucńiune Acest mod de adresare utilizează implicit registrul segment DS. Cod instrucńiune Mod R/M Deplasament (8 sau 16 bińi) Adresa efectivă (16 bińi) Fig.3 Adresarea directă: adresa este conńinută în instrucńiune Adresarea indirectă (prin intermediul registrelor) Adresa efectivă a operandului este dată de conńinutul registrelor,, sau. Se utilizează ca registru segment implicit SS cu şi DS în celelalte cazuri. Cod instr. Mod R/M Adresa efectivă Fig.4 Adresarea indirectă: adresa efectivă este conńinută într-un registru de bază sau index Exemple: mov cx, [bx] ;pune în cx cuvântul cu adresa în bx mov [di], cx ;pune cx în memorie, la adresa din di add byte ptr [si], 7 ;adună 7 la octetul cu adresa în si În primele două instrucńiuni operandul din memorie este considerat de 16 bińi datorită registrului de 16 bińi implicat în transfer. În instrucńiunea a treia, operandul este octet; dacă s-ar fi scris : add [si], 7

18 asamblorul nu ar şti dacă operandul din memorie este pe 8 sau pe 16 bińi şi se generează un mesaj de eroare la asamblare. Considerând operandul pe 8 bińi se poate obńine un rezultat diferit (decât cu operand pe 16 bińi), în cazul în care prin adunarea cu 7 se depăşeşte valoarea 255 sau FFH. Adresarea indirectă cu deplasament (bazată sau indexată) Adresa efectivă se obńine prin adunarea la unul din registrele de bază (, ) sau index (, ), un deplasament constant pe 8 sau 16 bińi. Registrul de segment implicit este DS (dacă se folosesc, sau ) şi SS dacă se foloseşte pentru adresare. Cod instr. Mod R/M Deplasament - 8 sau 16 b. Adresa efectivă Fig.5 Adresarea indirectă cu deplasament Exemplu:.data TAB dw 1 dup () ;definire tablou de 1 elem..e mov bx, 5 mov ax, TAB [bx] mov cx, bx [TAB] mov dx, [bx +TAB] mov bp, [bx].tab Se utilizează diverse forme de scriere pentru acelaşi efect; în bx este, din punct de vedere al mecanismului de adresare, o adresă de bază iar TAB este un deplasament constant. Pentru programul care accesează elementele tabloului, semnificańia este inversă: TAB este adresa de început a tabloului (deci adresă de bază) iar bx este un indice (deplasament). Un alt mod de acces la elementele tabloului este prin încărcarea în bx a adresei de bază (folosind operatorul offset) şi un indice explicit: mov bx, offset TAB ; adresa de bază este adresa de ; început a tabloului mov ax, 5 [bx] mov ax, bx [5] mov ax, [bx + 5]

181 mov ax, [bx]. 5 ObservaŃie: În textul sursă, toate formele de adresare se scriu cu operatorul de indexare (paranteze drepte). mov cx, [bx] ; adresare indirectă mov cx, [2] ; adresare directă mov cx, [bx + 2] ; adresare bazată Folosirea registrului cu un deplasament nul este o scriere asemănătoare cu adresarea indirectă dar care este ificată intern ca adresare bazată: mov ax, [bx] ; adresare indirectă mov ax, [bp] ; adresare bazată cu deplasament Adresarea bazată şi indexată Adresa efectivă se obńine prin adunarea unui registru de bază ( sau ) cu un registru index ( sau ) şi cu un deplasament de 8 sau 16 bińi. Cod instr. Mod R/M Deplasament - 8 sau 16 b. Adresa efectivă Fig.6 Adresarea bazată şi indexată Registrele segment utilizate implicit sunt: DS (în cazul folosirii lui cu sau ) şi SS (dacă se foloseşte cu sau ); deplasamentul poate fi nul. mov ax, [bx] [si] mov ax, [bx + si + 9] mov ax, [bx + si]. 9 mov ax, [bp] [di] [9] În descrierea modurilor de adresare a fost precizat de fiecare dată registrul segment care participă în mod implicit la formarea adresei fizice. Regula generală este următoarea: în toate modurile de adresare în care nu

182 participă, registrul segment implicit este DS; dacă participă, registrul segment implicit este SS. Regula de mai sus poate fi ignorată dacă se utilizează prefixele de segment în textul sursă (segment explicit): mov bx, ds: [bp + 7] ; registrul segment explicit DS mov ax, cs: [si] [bx + 5] ; registrul segment explicit CS mov cx, ss: [bx] ; registrul segment explicit SS În adresarea memoriei (cu un registru segment implicit sau explicit), controlul asupra datelor ce se află în memorie în segmentul respectiv cade în sarcina programatorului, care trebuie să aibă în vedere permanent "harta memoriei", adică modul de organizare a datelor în memorie.