â–
o rozszerzeniu EXE - służących do modyfikowania programu (a konkretnie wszystkich adresów 32-bitowych zawierających adres początku segmentu oraz offset) w czasie jego ładowania oraz wykorzystania właściwych mechanizmów systemu operacyjnego. Odbywa się to oczywiście automatycznie, praktycznie bez udziału programisty uruchamiającego swój program użytkowy. Informacje te są zawarte w pliku o rozszerzeniu EXE w tzw. nagłówku (ang. program header) umieszczonym przed właściwym programem. W tablicy 8.1 przedstawiono zawartość nagłówka. Informacje nagłówka są wykorzystywane też do modyfikowania niektórych bajtów w specjalnym obszarze w pamięci operacyjnej rezerwowanym przez system operacyjny MS-DOS bezpośrednio przed właściwym programem. Obszar ten, wielkości 256 bajtów (100H), nazywany w skrócie PSP (ang. program segment prefix) zawiera informacje o programie, np. jego parametry. Strukturę bloku PSP przedstawiono w tabl. 8.2.
Tablica 8.1. Nagłówek programu w pliku dyskowym o rozszerzeniu EXE Adres
względny Znaczenie
00H-01II
02H-03H
041I-05H
06H-07H
08H-09II
0A1I-0B1I
0CH-0DH
0EH-0FH
10H-11H
1211-1311
14H-15H
16H-17H
18H-19H
1AH-1BH
1CH-...
Znaki ASCII "MZ" będące wy różnikiem pliku o rozszerzeniu EXE (ang. program file signature)
Liczba bajtów na ostatniej zajętej przez program 512-bajtowej stronie Wielkość pliku EXE w 512-bajtowych stronach, liczona wTaz z nagłówkiem Liczba pozycji w tabeli relokacji (ang. numberof relocation entries)
Rozmiar nagłówka liczony w 16-bajtowych r paragraphs)
Minimalna liczba paragrafów, które po załadowaniu programu mają być zarezcrwowane za końcem programu (ang. minimum allocation of mcmoiy)
Maksymalna liczba paragrafów, które po załadowaniu programu mają być zarezerwowane za końcem programu (ang. maximum allocation memory)
Wartość początkowa rejestru segmentu stosu SS po załadowaniu programu do pamięci Wartość początkowa wskaźnika stosu SS po załadowaniu programu do pamięci Ujemna suma kontrolna wszystkich 16-bitowych słów pliku (ang. load error chcck sum) Wartość początkowa rcjestu wskaźnika rozkazów IP po załadowaniu programu do pamięci Wartość początkowa rejestru segmentu programu CS po załadowaniu programu do pamięci Przemieszczenie tabeli relokacji względem początku pliku
Numer nakładki określony przez program łączący' (0 - oznacza część rezydentną programu) Tabela relokacji
Tablica 8.2. Struktura bloku PSP poprzedzającego program wprowadzany do pamięci operacyjnej Adres
względny Znaczenie
00H-01H
02H-03H
04H
05II-06II
0AII-0DH
0EII-11H
Rozkaz INT 20H - międzysegmentowy skok pod ten adres kończy wykonywanie programu użytkownika (rozdz. 9)
Wskaźnik pierwszego wolnego segmentu w pamięci operacyjnej (program może przykładowo zarezerwować pamięć pod tym adresem funkcją 4811)
Za reze rwowa ny
Międzysegmentowe wywołanie funkcji 00H-24II (rozdz. 9); numer funkcji w rejestrze CI.; w kolejnych wersjach systemu znaczenie może być zmienione
Adres kontynuacji po zakończeniu programu (ang. terminale address); kopia wektora przerwania 22H
Adres obsługi klawiszy Ctrl-Brcak; kopia wektora przerwania 23H
powered by
8.3. Programy pomocnicze
12II-15H
16H-2BI1
2CH-2DH
2EH-4FH
50H-52H
53H-5BH
5CH-6BH
6CH-7FH
80H-FFH
• • •
Adres obsługi po wystąpieniu fatalnego błędu operacji; kopia wektora przerwania 24H Za reze rwowa nc
Adres segmentu obszaru zawierającego "otoczenie programowe"; w obszarze tym znajdują się m.in. takie informacje jak: sposób uaktywnienia procesora poleceń, zmienne zdefiniowane za pomocą SET oraz ścieżka dostępu do plików poza bieżącym katalogiem, zdefiniowana za pomocą PATH =. Ciąg znaków opisujących otoczenie zaczyna się z offsetem równym 0 i może zaw ierać 32 K znaków. Składa się z mniejszych ciągów zakończonych zerowym bajtem; całość kończy się dwoma zerowymi bajtami Zarezerwowane
Rozkazy INT 21H oraz RET (międzysegmentowy); służą do wywołania dowolnej funkcji
00H-57H za pomocą wywołania międzysegmentowego
Zarezerwowane
Blok sterujący pierwszego pliku (FCB1) związany z pierwszą nazwą pliku jeżeli została podana przy wywołaniu programu; format FCB dla pliku jeszcze nie otwartego Blok sterujący drugiego pliku (FCB2) związany z drugą nazwą pliku jeżeli została podana przy wywołaniu programu
Format FCB dla pliku jeszcze nie otwartego; obszar transmisji dyskowych (ang. disk transfer area - DTA). Po uruchomieniu programu używany jako bufor dyskowy aż do ewentualnej zmiany bufora za pomocą funkcji 1AH.
Bezpośrednio po wczytaniu programu w obszarze tym znajdują się. wprowadzone w wierszu (ang. command linę) za poleceniem uruchomienia programu, znaki w kodzie ASCII będące parametrem (ami) polecenia:
80H-8IH - liczba wprowadzonych znaków
82H-... - wprowadzone znaki _
adresu 80H. W PSP znajdują się dwa bloki sterujące FCB1 i FCB2 dla plików dyskowych FCB1 i FCB2 (ang .file control blok). Po załadowaniu programu zawartość rejestru AX informuje, czy istnieje zgodność z aktualnie wybraną stacją dysków a mechanizmami wybranymi w nie otwartych blokach FCB1 i FCB2 struktury PSP:
AL = 00H zgodność FCB1, AH = 00H zgodność FCB2
AL = FFH niezgodność FCB1, AH = FFH niezgodność FCB2
Ponadto rejestry DS i ES zawierają adres początku obszaru PSP, a rejestry CS, IP, SS i SP zawierają wartości przekazane przez program łączący. Strukturę bloku kontrolnego FCB przedstawiono w tabl. 8.3. W momencie otwarcia pliku (funkcja OFH - rozdz. 9), jego blok kontrolny ulega rozszerzeniu, powodując automatycznie zamazanie obszaru drugiego bloku kontrolnego.
Tablica 8.3. Struktura bloku kontrolnego FCB
Adres
*7.g|ędny
7H
6II-(.2H)
1H
Znaczenie
Bajt o zawartości OFFH oznacza początek rozszerzonego bloku sterowania pliku Za reze rwowane Atrybut pliku
00000000 - dostęp bez ograniczeń ???????! - plik może być tylko czytany
?????? 1? - plik ukryły (ang. hidden). nie można go otworzyć za pomocą funkcji OFH (rozdz. 9) ?????!?? - plik systemowy, nie można go otworzyć za pomocą funkcji OFH ????!??? - nazwa logiczna nośnika pamięci (ang. volume ID), umieszczana w katalogu głównym (ang. root)