Structura fișierului

1. Componența dosarului EXE

Fișierul EXE care construiește link-ul este alcătuit din două părți:

- informații de control pentru încărcător.

- modul de pornire real.

Informațiile pentru încărcător, descrise mai jos, sunt localizate la începutul fișierului și formează un așa-numit antet. Imediat urmată de corpul modulului de încărcare. Corpul modulului de pornire începe la limita blocului și reprezintă o copie a imaginii memoriei de sarcini construită de constructor.

Partea standard a antetului are următorul format:

00-01 4D5A - Linker linker, indicând faptul că fișierul este un fișier EXE.

02-03 Lungimea imaginii sarcinii pe modulul 512 (adică numărul de octeți utili în ultimul bloc).

(Constructorii de versiuni înainte de 1.10 pun acest câmp 04, dacă are o astfel de valoare, se recomandă să-l ignorați).

04-05 Lungimea fișierului în blocuri.

08-09 Lungimea antetului în paragrafe de 16 octeți.

Folosit pentru a afla începutul corpului modulului de boot.

0A-0B Cantitatea minimă de memorie care trebuie alocată după sfârșitul imaginii sarcinii.

(în paragrafe de 16 octeți).

0C-0D Cantitatea maximă de memorie care trebuie alocată după sfârșitul imaginii sarcinii.

(în paragrafe de 16 octeți).

10-11 Valoarea SP la intrarea în sarcină.

12-13 Suma de control este zero minus rezultatul adăugării fără transferul tuturor cuvintelor din fișier.

14-15 Valoarea IP (contorul de comandă) la introducerea unei sarcini.

1A-1B Numărul segmentului suprapus.

(0 pentru segmentul rădăcină al programului).

Setarea este după cum urmează:

1. În zona de memorie, după partea rezidentă a programului de descărcare, se construiește prefixul Segmentului de program.

2. Partea standard a antetului este citită în memorie.

Acest segment este numit segmentul de pornire.

4. Modulul de încărcare este citit în segmentul inițial.

5. Tabela de configurare este citită în memoria de lucru.

2. Structura segmentului de program

Prin offset 0000 în segmentul de software, DOS formează Prefixul segmentului de programe (PSP). Programul însuși este încărcat la offset 0100.

Când programul descărcat devine control, se aplică următoarele condiții:

Pentru toate programele:

Lungimea totală a liniilor de mediu <= 32K байт; среда начинается с границы параграфа. После последней строки следует нулевой байт. Среда, передаваемая задаче от COMMAND, содержит, как минимум, параметр COMSPEC= (значение этого параметра - полное имя файла, содержащего используемый COMMAND.COM). Она также содержит значения, установленные командами PATH, PROMPT и SET (См. Главу 10). Передаваемая среда является копией среды родительского процесса. Если задача остается резидентом, то последующие команды PATH, PROMPT и SET не будут воздействовать на ее среду.

- Blocurile de gestionare a fișierelor amplasate la offseturile 5C și 6C din prefixul Segmentului de programe sunt populate în funcție de parametrii liniei de comandă. În acest caz, dacă parametrul corespunzător include numele directorului, numai codul dispozitivului este introdus în FCB, numele fișierului nu este format corect.

- Partea non formatată, începând cu offsetul 81, conține caracterele liniei de comandă după numele comenzii, inclusiv toate spațiile și diviziunea. La decalajul 80, lungimea acestei linii este plasată. Dacă linia de comandă include parametrii de reasignare (acestea sunt indicate de> și <) они не попадают сюда, так как переназначение прозрачно для программ.

- Cuvântul prin offset 6 conține numărul de octeți dintr-un segment dat.

- Registrul AX indică dacă numele dispozitivului sunt specificate corect în parametri:

AL = FF - numele dispozitivului pentru primul parametru nu este setat corect, în caz contrar AL = 00;

AH = FF - numele dispozitivului pentru primul parametru nu este setat corect, altfel AH = 00.

Pentru programele .EXE:

- DS și ES indică începutul prefixului segmentului de programe.

- Registrele CS, IP, SS și SP primesc valorile specificate de linker.

Pentru programele .COM:

- Toate cele patru registre segmentate indică Prefixul segmentului de program.

- Programul alocă toată memoria liberă. Dacă programul execută alte programe cu operația Exec, trebuie să elibereze o anumită memorie din operația Setblock (4A)

- Contorul de comandă IP este setat la 0100H.

- Registrul SP indică sfârșitul segmentului de program. Lungimea segmentului din celula 6 a Prefixului este redusă cu 0100H pentru a elibera spațiu pentru un teanc de această dimensiune.

- Cuvântul zero prefixează partea de sus a stivei Prefixul segmentului de programe are următorul format (toate numerele
hexazecimal):

Referințe:

1. Ghidul Jordan al programatorului calculatoarelor personale

2. Norton Arhitectura computerelor personale ale IBM

3. Înapoi Introducere în programarea sistemului

Articole similare