1. Structura MCB
Sistemul de operare atribuie la cerere programelor (sau chiar sistemuluide operare)
blocuri de memorie, fiecare din acestea avind un bloc de control(MCB= Memory
Block Control), format din 16 octeti, situat inaintea zoneiutilizabile propriu-zise,
avind structura de mai jos.
Adresa relativa Nr. octeti Semnificatie
0 1Identificator bloc, poate avea valorile: - 'M', indica un bloc curent;- 'Z',
identifica ultimul bloc alocat. 1 2Adresa de segment pentru PSP-ul programului
caruia i-a fost atribuit acest bloc; are valoarea 0 pentru blocurile eliberate
; 3 2 Dimensiunea blocului curent, in paragrafe de 16 octeti (fara MCB); 5 11
Neutilizati.
Exista functia 52H care imi intoarce in ES:aBX-2i adresa de segment a MCB.De
aici se pot trasa toate blocurile aferente programelor aflate in memorie(vezi
aplicatia 1)
2. Structura prefixului de program
La incarcarea unui program (COM sau EXE) in memorie pentru executie,DS:0000
si ES:0000 reprezinta adresa de inceput a, asa-numitului, prefix alprogramului
(PSP). PSP-ul are o lungime de 256 de octeti si are aceeasistructura, indiferent
de tipul programului 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 (asa-numitul environment); 2EH 46 Rezervat
pentru DOS; 5CH 16 FCB pentru primul parametru; 6CH 20 FCB pentru al doilea
parametru; 80H 1 Numarul de octeti din linia de apel a programului (fara numele
lui); 81H 127 Linia de apel a programului din care s-au eliminat numele programului
si directivele de redirectare;
3. Variabile de mediu (ENVIRONMENT)
Dos-ul mentine o zona de memorie ce contine un set de siruri ASCIIZ(terminate
cu octetul 00h (nu 30h care este codul ASCII a lui 0) care reprezintainformatii
pentru diverse aplicatii. Forma acestor variabile de mediu este: nume=valoare
Mediul este limitat la o anumita valoare, insa poate fi marit cu comandaSHELL
in CONFIG.SYS sau cu COMMAND /e:nnnn care porneste o copie ainterpretorului
de comenzi furnizind nnnn octeti pentru spatiul variabilelor demediu. De obicei
acest spatiu este ó 32 Ko si incepe la o adresa paragraf(multiplu de
16). La adresa 2Ch in PSP am numarul paragrafului (adica adresa desegment) pentru
variabilele de mediu. Fiecare variabila de mediu se termina cu octetul 0, iar
dupa ultimavariabila de mediu am doi octeti 0. O utilizare tipica a mediului
ar fi programele de tip SHELL care incarcao copie a lui COMMAND.COM. Aceste
programe cauta variabile de mediu numitaCOMSPEC, valoarea ei dƒnd drive-ul,
calea si numele interpretorului. De asemenea exista programe a caror utilizare
este mult facilitata prinspecificarea unor informatii de mediu cu comanda SET.
De exemplu pentrumacroasamblorul MASM si link-editorul LINK pot indica urmatoarele
variabile demediu: PATH - cale cautare fisiere sursa INCLUDE- cale cautare fisiere
includere LIB- cale cautare fisiere obiect si biblioteca MASM- optiuni implicite
la lansarea MASM LINK- optiuni implicite la lansarea LINK TMP- cautare fisiere
temporare pentru LINK, etc..
Radacina mediului - fiecare program primeste o copie statica a mediuluiinitial.
Astfel, schimbarile in variabilele de mediu vor avea efect numai asupraproceselor
"FIU" (daca exista), dar nu vor fi pierdute cind controlul estereturnat
procesului "PARINTE".Gasire cale incarcare - incepind cu DOS 3.0,
dupa terminarea zoneimediului (cei doi octeti 0) sistemul de operare stocheaza
un sir aditional carecontine specificatorul complet al programului incarcat.
Acest lucru poate fifolosit de o aplicatie pentru a gasi fisierele overlay sau
de date. Astfel, dupacei 2 octeti nuli care termina mediul mai am 2 octeti indicind
numarul de siruriaditionale (de obicei un singur sir, adica valoarea 1) si specificatorulfisierului
(tot in format ASCIIZ) utilizat de functia EXEC (4Bh - incarca siexecuta un
program fiu).
Aplicatii:
1. Urmariti programul MEM_BLK.C care afiseaza sirul blocurilor de memorie aleprogramelor
din memorie.
2. Cititi programul AFENV.ASM care afiseaza toate variabilele de mediu.
3. Cititi programul UPCAS.ASM care converteste literele mici in mari pentru
unsir de caractere din linia de comanda sau introduse intr-un buffer (cu functia0ah)
4. Sa se realizeze un program care sa afiseze valoarea unei variabile de mediufurnizata
ca parametru la lansarea programului, sau preluata cu functia 0AH, DOSIndicatie:
parametrul va fi furnizat cu litere mari
5. Sa se afiseze parametrii cu care se lanseaza un program.
6. Sa se realizeze in limbaj de asamblare un program care sa inversezecaracterele
sirului (mari->mici si invers) folosit ca parametru la lansarearespectivului
program.
Indicatie: programele le veti face in format .COM