Sunteți pe pagina 1din 5

Lucrarea 10 PREFIXUL SEGMENT PROGRAM AL PROGRAMELOR EXECUTABILE

ncarcarea sistemului de operare Odata cu pornirea calculatorului, procesorul executa un program aflat n memoria ROM-BIOS pentru testarea resurselor hardware. Apoi se ruleaza un program ncarcator aflat la nceputul discului sistem DOS. Acest program are rolul de a ncarca sistemul de operare n memoria calculatorului. Incarcatorul testeaza existenta fisierelor sistem IO.SYS si MSDOS.SYS si da controlul primului dintre ele. Primul fisier IO.SYS contine doua module: modulul BIOS , care grupeaza rutinele de baza pentru operatiile de intrare/iesire, si modulul SYSINIT, care are rolul de a efectua n continuare ncarcarea sistemului. Al doilea fisier sistem MSDOS.SYS contine nucleul sistemului de operare DOS (DOS Kernel). n continuare modulul SYSINIT deschide fisierul CONFIG.SYS, care contine diferite comenzi pentru configurarea sistemului, dupa care ncarca si executa fisierul COMMAND.COM, ce are rolul de a executa comenzile standard DOS introduse de la tastatura. Dupa ncarcarea sistemului de operare, memoria calculatorului arata astfel: 00000 h Tabela Vectori ntrerupere 00400 h Zona BIOS Zona rezidenta DOS - Kernel Drivere Buffere DOS COMMAND.COM Zona tranzitorie Zona de procese tranzitorii TPA

ROM

ROM-BIOS FFFFF h (1 M)

Figura 1. Memoria dupa ncarcarea sistemului de operare

Incarcarea programelor executabile Un program executabil este ncarcat n memorie dupa zona ocupata de programul COMMAND.COM si de alte programe rezidente, si anume n zona corespunzatoare proceselor tranzitorii (temporare). Din punctul de vedere al proceselor care ruleaza, memoria sistem este mpartita n doua: o zona rezidenta, care contine vectorii de ntrerupere, bufferele si partea rezidenta a SO, si alta numita zona proceselor tranzitorii (TPA-Transient Program Area) care contine programele executabile ncarcate temporar, precum si informatii de context (fig.1). Alocarea memoriei pentru programe se face de catre SO n momentul ncarcarii programului spre executie, dar si n timpul rularii programului, daca acesta foloseste apeluri de functii DOS pentru alocari de memorie.

Prefixul segment al programului PSP nainte ca sistemul de operare sa ncarce un program spre executie, el creeaza mai nti o zona speciala de 256 octeti (100h) numita PSP, adica Prefix Segment Program, imediat dupa aceasta zona fiind memorat programul executabil. PSP contine diferite informatii necesare sistemului de operare cu privire la programul curent, oferind totodata o modalitate de a accesa resursele sistemului (tastatura, imprimanta, etc.) din cadrul programului. De asemenea, PSP ofera o modalitate de revenire n sistemul de operare dupa terminarea executiei programului. Tabela PSP are urmatoarea structura:

Adresa 00-01 h 02-03h 04-09h 0A-0Dh 0E-11h 12-15h 16-17h 2 2 6 4 4 4 2

Numar octeti

Continut

Codul instructiunii INT 20h (CD20 h) pentru iesire din program Dimensiunea memoriei alocate pentru program, n numar de paragrafe Call far la dispecerul de functii DOS (de la offsetul 05h) Adresa rutinei de ncheiere a programului (INT 22h) (de tip far, offset:segment) Adresa ntreruperii de tratare CTRL-Break (INT 23h) Adresa ntreruperii de eroare critica (INT 24h) Rezervat

18-2Bh 2C-2Dh 2E-31h 32-33h 34-37h 38-4Fh 50-51h 52-5Bh 5C-6Bh 6C-7Fh 80-FFh

20 2 4 2 4 24 2 10 16 16 128

Tabela de handlere de fisiere Adresa de segment a contextului de program Rezervat Lungimea tabelei de handlere fisiere Pointer de tip far la tabela de handlere Rezervat Apel la functia INT 21h (INT 21h si RETF) Rezervat Zona 1 parametrii FCB Zona 2 parametri FCB Linia de comanda - Bufferul DTA

Tabela de handlere de fisiere Handlerele sunt numere ntregi care identifica n mod unic fisierele disc si dispozitivele periferice atasate sistemului (tastatura, ecran, imprimanta, etc.). Tabela de handlere de fisiere se afla memorata n interiorul PSP, ncepnd cu adresa 18h, si are o lungime de 20 de octeti. Fiecare octet se refera la o intrare ntr-o tabela sistem care defineste driverul sau dispozitivul respectiv. Initial, tabela contine valorile: 01 01 01 00 02 FF FF FF ..... FF

Asocierea acestor valori cu dispozitivele logice si fizice este urmatoarea: Handler 0 1 2 3 4 5 ... Continut 01 01 01 00 02 FFh ... Dispozitiv logic Consola Consola Consola Auxiliar Imprimanta Neatribuit ... Dispozitiv fizic Intrare standard - Tastatura Iesire standard - Ecranul Eroare standard - Ecranul Portul serial COM1 Portul paralel LPT1 Neatribuit ...

n cadrul PSP, cuvntul de la offsetul 32h contine lungimea acestei tabele (20 sau 14h), iar cuvntul de la offsetul 34h contine adresa ei n forma IP:CS, unde IP=18h (offsetul n PSP) si CS este adresa de segment pentru PSP. Adresa de segment a contextului program Aceasta adresa se gaseste n PSP la offsetul 2Ch. Fiecare program ncarcat pentru executie are un anumit context (environment), pe care sistemul de operare l memoreaza tot la ncarcarea progamului. Dimensiunea implicita este de 160 octeti (A0h). Aceasta zona contine informatii echivalente unor comenzi sistem, cum ar fi COMSPEC (specificarea interpretorului de comenzi), PATH (directoarele si subdirectoarele active), PROMPT (specificarea prompterului de comenzi), etc. De asemenea, tot aici se gaseste si calea completa a fisierului care contine programul executabil curent.

Zonele FCB (File Control Block) Zonele formatate FCB reprezinta alte modalitati de a accesa fisiere, pe lnga operatiile orientate pe handlere. n locatiile PSP 5C-6Bh (16 octeti) ncarcatorul de program nscrie primul parametru FCB, care va contine numele primului fisier specificat ca parametru n linia de comanda, primul octet indicnd unitatea de disc (01-A, 02-B, 03-C, 04-D etc.) urmnd numele fisierului (8 caractere) si extensia (3 caractere). Exemplu: pentru comanda TASM C:PROGR1.ASM se memoreaza: 03 P R O G R 1 20 20 A S M

n continuare, la locatiile PSP 6C-7Fh, ncarcatorul de program nscrie al doilea parametru FCB, care va contine numele celui de-al doilea fisier specificat ca parametru n linia de comanda. Exemplu: pentru comanda COPY C:PROGR1.ASM A:PROGR2.ASM, se memoreaza: 01 P R O G R 2 20 20 A S M

Linia de comanda - Bufferul DTA (Disk Transfer Area) Zona DTA este o zona folosita de unele operatii de acces la disc. ncarcatorul de programe initializeaza bufferul DTA cu ntregul text introdus n linia de comanda dupa numele comenzii sau programului executabil. Pentru comenzile exemplificate anterior se memoreaza C:PROGR1.ASM, pentru exemplul 1, respectiv pentru

exemplul 2 : C:PROGR1.ASM A:PROGR2.ASM. Primul octet din acest buffer (de la adresa 80h) contine numarul de caractere ce urmeaza imediat dupa numele programului, iar n continuare sunt memorate caracterele din linia de comanda.

Accesul la PSP Determinarea adresei PSP poate fi utila de exemplu pentru a realiza prelucrarea fisierelor specificate dupa o anumita comanda sau pentru extragerea datelor din linia de comanda. Imediat dupa ncarcarea unui program de tip EXE, registrele DS si ES indica chiar adresa de segment a PSP. Deci daca avem nevoie de adresa PSP fie salvam continutul initial al acesor registre, fie putem apela functia DOS 51h, care furnizeaza adresa de segment pentru PSP n registrul BX. La un program COM, prefixul PSP este chiar n fata codului program, iar toate registrele segment contin aceeasi valoare (de exemplu la adresa relativa 80h, n segmentul curent se afla bufferul DTA). ncheierea executiei programelor ncheierea executiei unui program, cu eliberarea spatiului alocat, se poate realiza fie executnd instructiunea INT 20h, punnd n CS adresa prefixului de program, fie apelnd direct functia DOS 4Ch. Pentru programele rezidente (care ramn n memorie), se apeleaza ntreruperea INT 27h sau functia DOS 31h, care mentine ocupat spatiul de memorie alocat programului. Daca se utilizeaza ntreruperea 27h, atunci registrul CS va trebui sa contina adresa de segment a prefixului de program PSP, iar DX cantitatea de memorie ocupata de program, inclusiv PSP.

Bibliografie: 1. Gh. Musca, Programare n limbaj de asamblare, Editura Teora, Bucuresti, 1999. 2. V. Lungu, Limbajul de asamblare, Editura Teora, Bucuresti, 2000

S-ar putea să vă placă și