Directiva Segmantatsii în asamblare

Directiva Segmantatsii în asamblare

Fiecare program cuprinde trei tipuri de segmente:

segment de funcționalitate este ceva mai largă decât programele de divizare pur și simplu în blocuri de cod, date și stivă. Segmentarea face parte dintr-un mecanism mai general asociat cu conceptul de programare modulare. Aceasta implică unificarea înregistrării modulelor obiect produse de compilator, inclusiv diferite limbaje de programare. Acesta vă permite să combinați programe scrise în diferite limbi. Este pentru punerea în aplicare a diferitelor opțiuni ale unei astfel de asocieri și directivele de segmentare proiectate.

Directivele de segmentare simplificate

puteți utiliza liniile directoare simplificate pentru atribuirea de segmente în textul programului:

  • .COD - pentru a indica începutul segmentului de cod;
  • .DATE - pentru a indica începutul segmentului de date;
  • .STACK - pentru a indica începutul segmentului de stivă.

Cu toate acestea, utilizarea directivelor de segmentare simplificate nu poate crea mai mult de trei segmente pentru un singur program.

Directivele standard de segmentare

Împreună cu directivele de segmentare simplificate pot fi, de asemenea, utilizat o directivă SEGMENT standard de. care definește începutul fiecărui segment. sintaxa:

ImyaSegmenta SEGMENT align combina 'clasa' dim
.
CAPETE ImyaSegmenta

SFÂRȘIT directivă definește sfârșitul segmentului.

Un segment atribut de aliniere (tip de aliniere) alinia linkerului care este necesar să se asigure introducerea pe limita specificată a segmentului. Acest lucru este important, deoarece cu alinierea corespunzătoare a accesului la date în procesoarele care sunt compatibile cu i8086 de bază, este mai rapid. Valorile valide pentru acest atribut sunt:

În mod implicit, tipul de aliniere este setat la PARA.
Caracteristica segmente combinarea (tip combinatorial) combină linker spus cum să combine segmente diferite module având același nume. atribut care combină implicit este setat la privat. Combinând valorile atributelor segmentului pot fi:

Caracteristica segment de clasă (clasă de tip) „clasă“ - este un șir citat, care ajută la determinarea segmentului corespunzător programului secvență linker în asamblarea segmentelor de mai multe module. Linker unește împreună în memoria tuturor segmentelor cu același nume al clasei (numele clasei, în general, poate fi orice, dar este mai bine dacă este de a reflecta funcționalitatea segmentului). Un exemplu tipic este utilizarea numelui clasei la asocierea grupului de toate segmentele de cod de program (în general, clasa de „cod“ este folosit pentru acest lucru). Cu mecanism de clasă dactilografiere pot fi grupate sub forma unor segmente inițializate și date neinițializate.

Toate segmentele în sine sunt egale, ca și CAPETE directivele SEGMENT nu conțin nicio informație legată de scopul funcțional al segmentelor. Pentru a le utiliza ca segmente de cod, date sau stivă, trebuie să vă informeze mai întâi compilatorul despre ea, și ei vor folosi o directivă specială ASSUME. Această directivă spune compilatorului că un segment la care registrele segmentului atașat. La rândul său, acest lucru va permite compilatorului să se asocieze în mod corect numele simbolice definite în segmentele. Segmentului de legare la registrele de segment se realizează cu ajutorul operanzi prezentei directive, care trebuie să fie segmentul numele ImyaSegmenta specificat în directivă sursă sau SEGMENT program de cuvinte cheie nimic. În cazul în care operandul este folosit doar nimic de cuvinte cheie. registrele anterioare segment de destinație sunt anulate, și o dată pentru toate cele șase registre segment. Dar cuvântul cheie poate fi folosit în loc de nimic ImyaSegmenta argument. în acest caz, se va rupe în mod selectiv conexiunea între segmentul și denumirea ImyaSegmenta registrul segment corespunzător.
Directiva SEGMENT poate fi folosit cu orice model de memorie. Atunci când se utilizează directiva SEGMENT cu modelul plat este necesar pentru a indica compilatorului că toate registrele segment sunt stabilite în conformitate cu modelul de memorie plat. Acest lucru se poate face folosind directive ASSUME:

ASSUME CS. PLAT. DS: plat. SS. PLAT. ES. PLAT. FS. EROARE. GS. EROARE

Registre FS și programele GS nu sunt utilizate, astfel încât acestea atribut indică eroare.