Registrele de asamblare: tipuri, scop și particularități ale instrucțiunilor

Celulele de procesor, numite și registre de asamblare, datorită nivelului scăzut de limbaj de programare reprezintă un anumit bloc de elemente libere în memorie. Acestea sunt trăsătură caracteristică este un acces super-rapid la memorie. Cel mai adesea registrele sunt folosite în timpul executării comenzilor procesorului și nu sunt disponibile pentru programator. De exemplu, atunci când se preia următorul număr de instrucțiuni dintr-o memorie super-rapidă disponibilă, codul binar al acestuia este introdus în registrul.

Nu este posibilă accesarea directă a registrului. Există, de asemenea, un număr de blocuri de memorie accesibile, dar acestea pot fi accesate numai din shell sistem de operare. Printre acestea se numără registrele segmentului de control, precum și sistemele de descriptori de umbră ale. Doar dezvoltatorii de sisteme de operare folosesc aceste registre în activitatea lor.

Structura registrelor în asamblor

Tipuri de registre

Diferite registre Assembler sunt folosite pentru diferite nevoi în timpul programării. Acestea sunt utilizate în funcție de scopul urmărit. De exemplu, registrul de contor este utilizat pentru a organiza atât buclele simple, cât și cele imbricate. Mai jos sunt enumerate Tipuri de bază Registre de asamblare:

  • Registre de uz general.
  • Registre de indexare.
  • Registre de pointeri.
  • Blocuri de memorie segmentate.
  • Registre de steaguri.

De fapt, toate registrele ocupă 32 de biți de memorie. Adică, pot conține numere de la zero la 4294967295. Unele dintre registre sunt împărțite în mai multe părți de 16 și 8 biți. Acest lucru permite ca o parte a unui bloc de memorie sau întreaga celulă să fie controlată prin scrierea doar a unei părți din date.

Comenzi de gestionare a memoriei

Registrele de asamblare sunt denumite în funcție de funcțiile pe care le îndeplinesc:

  • EACH - Registru de acumulator;
  • EBX - Baza;
  • ECX - Counter - responsabil cu numărarea;
  • EDX - Data - bloc de celule de date;
  • ESI - Indexul sursei - Registrul sursei;
  • EDI - Indexul destinației - registru receptor;
  • ESP - Pointer al stivei;
  • EBP - Pointer de bază.

Particularități ale utilizării registrelor

Merită să rețineți că fiecare dintre aceste registre poate fi utilizat pentru mai mult decât pentru introducerea de date. De exemplu, orice număr zecimal poate fi adăugat la registrul de bază și utilizat ca un contor. Cu toate acestea, nu este de dorit să se utilizeze în acest scop blocuri de memorie care corespund unor pointeri - ESP și EBP, deoarece pot apărea probleme la accesarea celulelor de tip de date abstracte. Registrele Assembler sunt pentru stocarea informațiilor și orice tip de registru poate fi folosit pentru acest lucru.

Codul privind AȘM și prezentarea privind listarea

Registre de uz general

Acest tip de registre este creat pentru salvarea datelor după operațiile de calcul. De fapt, puteți utiliza comanda mov pentru a introduce informații în orice tip și sistem numeric: binar, octal, zecimal sau hexazecimal. Cunoscute și sub numele de registre de date de asamblare. Lista de registre de uz general include

  • EAX (acumulator) registru de acumulare. Constă din trei blocuri de nivel scăzut de 8 biți fiecare: AX, NA, AL. Dacă este necesar, pot fi abordate două blocuri de nivel inferior.
  • EBX (bază) este un bloc de date, care este responsabil pentru baza. La fel ca toate registrele de uz general, este format din două secțiuni de nivel inferior de 8 biți și un registru hexazecimal. Acest lucru permite stocarea mai multor valori numerice într-un singur registru.
  • ECU (contor) - responsabil pentru contor. Se utilizează în timpul executării ciclurilor. Fără ea, comanda loop nu funcționează. Constă din două părți, dintre care una include două blocuri CH și CL pe opt biți.
  • EDX - Date - necesare pentru operațiile de definire precisă a adresei în memoria RAM pentru funcțiile de intrare și ieșire. În plus, datele pot fi plasate în acest registru pentru a fi redirecționate în vederea utilizării în proceduri și șabloane. Lucrul cu registrele în versiunea pe 64 de biți

Registre de pointeri

Pentru a lucra cu stiva în asamblor, dezvoltatorii oferă două tipuri de registre. Pentru a le accesa, trebuie să se utilizeze operațiunea de adiție la pointerul vertexului unui tip abstract cu adâncimea de bit a unui anumit tip de date care a fost plasat în stivă. Toate calculele sunt efectuate manual. Acesta este modul în care o cantitate mare de date este stocată și transmisă către subprograme - proceduri și array-uri. Registrele pointerului de asamblare includ:

Structura procesorului și a registrelor
  • Registrul ESP - un pointer la partea de sus a stivei. Conține întotdeauna adresa primului element care a fost plasat în stivă în memoria cache a procesorului. Dacă este necesar, acesta poate fi completat cu alte date. Include cel mai mic registru SP, format din 16 biți.
  • Registrul EBP (Base Pointer) - este un bloc de celule de memorie necesar pentru a adresa datele conținute în stivă. Și face mult mai ușoară accesarea tuturor datelor și variabilelor dvs. Activează cea mai mică cifră BP.

Registre-index

Blocurile de memorie de indexare sunt necesare pentru indexarea extinsă. Ele sunt, de asemenea, implicate în efectuarea unor operații aritmetice și în procesarea șirurilor de octeți - o secvență de octeți care conține o valoare arbitrară. Două registre sunt incluse în asamblor care sunt responsabile pentru indexarea ESI și EDI. Să le descriem:

  • ESI (indexul sursă) include un index sursă (locul de unde sunt preluate datele) și este necesar pentru anumite acțiuni asupra șirurilor de octeți;
  • EDI (indice de destinație) este necesar pentru a scrie rezultatul unui calcul. De asemenea, utilizat pentru o parte din acțiunile de tip șir. Parțial legat de registrul segmentului ES.

Registre de segment

Sunt primele blocuri în memorie. Acestea se numesc segmente de curent. Software-ul are voie să aloce mai mult de patru blocuri de memorie. Cu toate acestea, este obligatoriu să se scrie adresele de bloc în celulele de memorie dintre registrele de segment. Acest tip de blocuri de memorie este foarte specific, astfel încât nu este posibilă umplerea lor cu un tip separat de date. Ordinea blocurilor de registre în memorie poate varia. Registrele de segment sunt stocate în locații aleatorii în memorie.

  • Registrul de cod CS conține, în mod normal, adresa de început a segmentului de cod software (începutul reprezentării mașinii a codului). Astfel, comenzile sunt sărite din cauza pointerului de comandă IP.
  • Registrul de date conține adresa datelor procesate de program la începutul. Mișcarea datelor este activată de un offset care este scris în registrul EIP.
  • Segmentul de stivă (ESS) este necesar pentru a stoca începutul unui segment al unui tip de date abstract.
  • Segmentul suplimentar este un registru auxiliar care conține o zonă goală pentru scrierea datelor în timpul a unor acțiuni peste șiruri de octeți. Poate conține informații similare cu cazul datelor.

Registrul pointerului de comandă

Comunicarea între blocurile de memorie

Acest tip se referă la tipul de comandă. Cu ajutorul acestui pointer, registrul de asamblare este transmis la listarea. Include date despre decalajul pentru următoarea comandă în raport cu comanda anterioară. Este foarte puțin utilizat în dezvoltarea de software, dar este necesar pentru a vizualiza listarea execuției codului. Este utilizat pentru urmărirea erorilor.

Registrul de indicatori de asamblare

Responsabil pentru starea actuală a procesorului. Constă din 16 biți, dintre care numai 9 pot fi ocupați. Acest bloc de memorie este umplut după o execuție, un salt sau un cod de eroare ca urmare a comenzii anterioare. În plus, unii biți sunt utilizați de către CPU și pot fi inițializați și șterși prin intermediul unui sistem de comenzi specifice. Iată cum este gestionat sistemul de comandă.

Articole pe această temă