Extras din curs
2.1. FUNCŢIILE UNUI ASAMBLOR
Pentru a rezolva o problemă care nu este rezolvată de programele curente, un dezvoltator de aplicaţii care a ajuns la concluzia că trebuie să intervină la nivelul maşinii de calcul, are nevoie să scrie o listă de instrucţiuni de maşină (X86, ALPHA, 8051, etc.) pentru implementarea algoritmilor proprii. Acest text listă cu linii de instrucţiuni se va întocmi într-o reprezentare standardizată de fişier sursă, conform cu un limbaj de asamblare al microprocesorului dat.
Asamblorul (figura 2.1), este un program din domeniul utilitarelor de sistem destinate dezvoltatorilor de aplicaţii, dedicat unui limbaj de asamblare pentru un microprocesor dat. Asamblorul prelucrează un text sursă pentru a construi un fişier în cod obiect cu instrucţiuni scrise în codul maşinii. Fişierul obiect, cu modificări minime, este adus în memoria principală a microprocesorului şi este lansat în execuţie.
Figura 2.1 Asamblorul converteşte fişiere sursă în fişiere obiect
Limbajul de asamblare în care este scris fişierul sursă include un set de reguli de manipulare a unui set stabilit de cuvinte, pentru a manevra mnemonici de instrucţiuni maşină, operatori, adrese şi variabile, apeluri de gestiune proprie a programului şi a datelor. Asamblarea este o operaţie univocă, adică, pornind de la acelaşi program sursă, se obţine întotdeauna acelaşi fişier obiect. Deoarece se poate obţine un acelaşi program obiect corect asamblat pornind de la programe sursă diferite, asamblarea nu este biunivocă
Operaţia inversă asamblării este dezasamblarea. Uzual, un dezasamblor atribuie mnemonici instrucţiunilor codului obiect dintr-un fişier obiect şi atribuie etichete operanzilor instrucţiunilor cu referiri la adrese de program, construind un fişier sursă. Sarcina cea mai dificilă la operaţia de dezasamblare constă în decelarea zonelor de date de cele de cod, care de obicei se face interactiv. Dezasamblarea este utilă în depanarea unui program obiect al cărui program sursă nu este disponibil.
Asamblorul îndeplineşte funcţia principală de prelucrare de mnemonici de instrucţiuni, de operanzi şi de etichete de adresare, unele funcţii impuse de structura particulară a maşinii şi alte funcţii de organizare a operaţiei însăşi a asamblării numite directive de asamblare ([9] sau specificaţiile unor asambloare curente).
Directivele de asamblare, numite şi pseudocomenzi, controlează desfăşurarea proprie a activităţii de asamblare. Ele conduc operaţiile pentru asamblare, influenţând alcătuirea programului obiect. De regulă, pseudocomenzile nu produc cod propriu, dar pot modifica generarea de cuvinte de cod obiect, influenţând valorile de operanzi şi de adrese. (de exemplu: CODE, DATA, ORG, END, DBYTE, DWORD.) sau chiar pot genera, condiţionat, cod obiect (la directive de asamblare condiţionată IF, ELSE, ENDIF).
Tabelul 2.1 Exemple de directive de asamblare.
NAME Stabileşte numele modulului obiect
CODE, DATA Alege începutul modulului de cod, date
ORG Stabileşte numărătorul de program la o nouă valoare
END Stabileşte sfârşitul fişierului sursă şi adresa de lansare
DBYTE, DWORD Defineşte conţinutul de memorie pe octet, cuvânt
IF,ELSE,ENDIF Marchează blocurile de asamblare condiţionată
Funcţiile specifice maşinii stabilesc anumite configuraţii de lucru, permise de hardware. Astfel de apeluri de asamblor sunt .8086, .186, .286, .386, .387, care aleg setul permis de instrucţiuni maşină, SMALL, LARGE, HUGE care aleg modelul de memorie, etc. ([9] [10],[11]).
Tabelul 2.2. Exemple de apeluri la funcţii specifice maşinii.
.8086, .8087, .186 Stabileşte setul de instrucţiuni ale 8086/7 sau 80186
.286, .386/7 Stabileşte setul de instrucţiuni ale 80286 sau 80386/7
SMALL Alege modelul de memorie SMALL
LARGE Alege modelul de memorie LARGE
HUGE Alege modelul de memorie HUGE
2.2. FORMATE DE FIŞIERE
Asamblorul este un utilitar de sistem care primeşte un fişier sursă şi scoate un fişier obiect şi un fişier de listare.
Fişierul sursă este o structură de date care reprezintă programul scris în forma standardizată impusă de limbajul ataşat setului de instrucţiuni suportat de maşină. Fişierul sursă conţine o listă de linii cu instrucţiuni de asamblare, care pot fi mnemonici ale instrucţiunilor proprii maşinii, la care se ataşează operanzi, variabile, directive proprii asamblorului, care îşi gestionează propria activitate, etichete, constante, comentarii sau alte instrucţiuni speciale ataşate configuraţiei hardware particulare a maşinii.
Prin prelucrarea fişierului sursă mnemonicile de instrucţiuni sunt transformate în cod maşină, constantele şi de operanzii sunt transformate din reprezentarea simbolică în reprezentarea numerică în cod maşină, ţinând cont şi de alte directive de asamblare, sunt efectuate testări de corectitudine a programului, sunt semnalează erorile. Prelucrarea se încheie prin asamblarea rezultatelor într-un fişier cu codul obiect destinat a fi încărcat prin operaţii minime de poziţionare în memoria operativă a maşinii.
Fişierul obiect are o structură modulară, din bloc de început cu informaţii generale (numele de program sursă, o adresă de început, lungimea programului), blocuri de cod cu instrucţiuni în cod maşină specifică (adresele de încărcare, lungimea de cod şi cuvintele de cod propriu-zise, în cod hexazecimal) şi blocul de încheiere al unui fişier obiect cu adresa de start şi indicatorul de sfârşit de fişier, EOF (End Of File).
Preview document
Conținut arhivă zip
- Asambloare.doc