|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Formatul programelor executabile sub DOS. Tipuri de programe: EXE si COM. Programe rezidente in limbaj de asamblare. | ||||||
|
||||||
1. Executia programelor sub sistemul de operare DOS
Formatul programelor executabile sub DOS
Sistemul de operare (SO) DOS poate incarca si lansa in executie douatipuri de
programe: COM si EXE. In cazul formatului EXE, fisierul contineprogramul propriu-zis,
intr-un format relocabil si un antet (header) cuprinzindinformatiile necesare
pentru relocare. Fisierele COM nu sint altceva decit oimagine memorie a codului
si datelor programului. Comparativ, fisierele COM sint mai reduse ca dimensiune
si lansarea lorin executie se face mai rapid, eliminindu-se timpul necesar relocatarii(ajustarii
adreselor absolute) specific programelor EXE. In schimb, programeleEXE permit
realizarea unor programe mai complexe si ruleaza corect si sub SOOS/2.
Structura prefixului de program
La incarcarea unui program in memorie pentru executie DS:0000 si ES:0000reprezinta
adresa de inceput a asa-numitului prefix al programului (PSP). PSP-ulare o lungime
de 256 de octeti si are aceeasi structura, indiferent de tipulprogramului incarcat.
Structura PSP-ului
Adresa relativa Nr. octeti Semnificatie
0 2 Codul instructiunii INT 20H; 2 2 Adresa sfirsitului memoriei exprimata in
multipli de 16 octeti; 4 1 Rezervat; 5 5 Instructiune CALL FAR spre punctul
de intrare in DOS, corespunzator functiilor sistem; 0AH 4 Adresa de revenire
in SO, utilizata de apelurile DOS INT 22H si INT 4CH; 0EH 4 Adresa tratare CTRL-BREAK;
12H 4 Adresa de tratare a erorilor critice 16H 22 Rezervat pentru DOS; 2CH 2
Adresa de segment a unei succesiuni de siruri de caractere ASCIIZ care contin
descrierea unor informatii de sistem (environment) 2EH 46 Rezervat pentru DOS;
5CH 16 FCB pentru primul parametru; 6CH 20 FCB pentru al doilea parametru; 80H
1 Numarul de octeti in linia de apel a programului (fara numele programului);
81H 127 Linia de apel a programului din care s-au eliminat numele programului
si directivele de redirectare; code segment assume cs:code, ds:code org 100Hstart: jmp begin .;; Datele programului data1 db ?data2 db ? ; Codul programuluibegin: . ret;code ends; end startObservatii: 1. Deoarece la initializare in virful stivei se memoreaza valoarea 0, executia unei instructiuni RET are ca efect un salt la primul octet din PSP (instructiunea INT 20H). 2. Pentru obtinerea formatului COM link-editarea se va face cu optiunea /t. Formatul EXE Programele EXE sint alcatuite in principiu din mai multe segmente si potcontine instructiuni ce folosesc adrese absolute (segment:offset) de memorie:salturi far, apeluri de proceduri far, sau cel putin initializari ale unorregistre de segment. Aceste programe fiind incarcate de asemenea la adreseoarecare, SO trebuie sa actualizeze adresele de segment la valorilecorespunzatoare inainte de lansarea programului in executie. Pentru aceasta,fisierele EXE contin pe linga zonele de date si cod, un header special cepermite SO sa efectueze corectiile necesare in codul programului in functie deadresa de memorie la care acesta este incarcat. Programe rezidente Rezidenta presupune existenta simultana in memorie a mai multor programe,intre care se poate comuta in functie de producerea sau nu a unor evenimenteexterne (apasarea unei taste sau combinatie de taste, executia uneiintreruperi). Pentru ca un program care isi termina executia sa ramina rezidenteste necesar ca acesta sa se termine cu apelul functiei DOS 31H, Terminate &Stay Resident (TSR): Parametri de apel: AH = 31H AL = cod terminare program DX = dimensiunea memoriei rezervate programului rezident, in paragrafe (blocuri de 16 octeti), prin rotunjire. Functia nu returneaza nimic. Observatii: 1. Structura programelor executabile in memorie: - PSP(Program Segment Prefix) - de dimensiune 100H octeti, (contine informatii despre programul incarcat: adresa de revenire, informatii din linia de comanda) - Programul propriu-zis. 2. Valoarea din DX trebuie sa fie dimensiunea totala a memoriei care sa ramina rezidenta, deci se va aduna la lungimea segmentului de cod valoarea 100H, necesara PSP-ului (numai la programele .EXE).3. Deoarece sistemul de operare DOS nu este reentrant, prin utilizarea unor functii DOS in programe rezidente pot aparea conflicte. De aceea, activarea programelor TSR ce folosesc functii DOS trebuie sa se faca numai daca nu este in executie o functie DOS. Functia DOS 34H permite obtinerea in ES:BX a adresei unei variabile DOScare indica nivelul de apeluri de functii DOS. Daca variabila are valoarea 0atunci nu exista un apel de functie DOS in executie. De asemenea, variabilapoate avea si valori mai mari decit 1, deoarece exista functii DOS care apeleazaalte functii DOS. Dezavantajul utilizarii acestei variabile consta in faptul cavariabila respectiva are valoarea 1 si in timpul executiei programuluiCOMMAND.COM. De asemenea, poate fi necesar ca activarea unui program rezidentsa se poata face si in timpul in care, de exemplu, COMMAND.COM asteaptaintroducerea unei comenzi de la tastatura. Aceasta problema se poate rezolvafolosind INT 28H, intrerupere ce este apelata periodic de MSDOS ori de cite orieste in perioade de asteptare. INT 28H poate fi utilizata astfel incit intratarea sa sa se faca activarea programului TSR, chiar daca variabila careindica nivelul de apeluri DOS are o valoare mai mare decit unu. Evident,activarea se va face daca programul nu este deja activ. |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|