216 8. Uruchamianie programów asemblerowych
Wywołanie programu bibliotekarza A>LIB
powoduje załadowanie programu do pamięci operacyjnej, przedstawienie się i zapytanie o następujące parametry
Library files: Nazwa pliku bibliotecznego, który ma być utworzony, lub istniejący, z którego będziemy korzystać. Standardowo jest przyjmowane rozszerzenie L1B, które w związku z tym może być pomijane.
Operation: Określenie czynności, która ma być wykonana.
Możliwe są następujące opcje
+nazwa_ pliku - dopisanie na końcu pliku bibliotecznego nowego modułu programowego o podanej nazwie,
-nazwa pliku - usunięcie podanego modułu ze pliku bibliotecznego,
*nazwa_ pliku - skopiowanie modułu o podanej nazwie do nowego pliku dyskowego o nazwie nazwa jjliku.OBJ.
Możliwe jest łączenie operacji w jednym poleceniu, np.
-PRZYKŁAD + C:PRZYKLAD
które powoduje zamianę jednego modułu na inny o tej samej nazwie. Polecenia są wykonywane w kolejności występowania na liście. Listę można kontynuować w następnym wierszu pod warunkiem zakończenia poprzedniego znakiem &.
List file: Nazwa pliku (deklaracja urządzenia wyjściowego CON lub PRN), który będzie zawierać listę przechowywanych w pliku bibliotecznym modułów programowych wraz z ich globalnymi nazwami symbolicznymi.
Programy uruchomieniowe (ang. debugger) służą do usuwania błędów logicznych w programie, mówiąc uruchamiania programu. Pozwalają na załadowanie do pamięci operacyjnej uruchamianego programu maszynowego zapisanego w pliku o rozszerzeniu EXE lub COM, testowanie procesu wykonania kolejnych rozkazów lub przy spełnieniu określonych warunków testowania, wykonanie wydzielonego fragmentu programu. Programy te umożliwiają modyfikację programu, danych, ustawianie wartości początkowych rejestrów, zmiennych itp. Wreszcie dają możliwość utworzenia nowego pliku dyskowego zawierającego zawartość zadeklarowanego obszaru pamięci operacyjnej, a w szczególności zmienionej wersji uruchamianego programu.
Spośród wielu - dostępnych dla mikrokomputerów klasy IBM PC/XT/AT -omówimy dwa reprezentatywne i popularne programy uruchomieniowe
DEBŁG - klasyczny program uruchomieniowy dostarczany zazwyczaj wraz z systemem operacyjnym MS-DOS,
ASD - przykład programu uruchomieniowego tzw. pełnoekranowego (ang. advanced fuli screen debugger ) pozwalającego na ciągłą kontrolę informacji (wyprowadzanych na ekran) o stanie: rejestrów, wybranych fragmentów pamięci, stosu i znaczników.
Należy wspomnieć także o tzw. symbolicznych programach uruchomieniowych (debu-ger symboliczny), pozwalających w czasie uruchamiania wykorzystywać zdefiniowane w programie adresy symboliczne (nazwy etykiet, zmiennych) oraz w niektórych przypadkach źródłową postać programu. Przykładem może być program SYMDEB, którego polecenia pokrywają się zasadniczo z poleceniami programu DEBUG. Program SYMDEB dostarczany wraz z makroasemblerem MASM (wersja 5.00) jest programem bardziej rozbudowanym, wykorzystującym m.in. technikę okienek.
8.4.1. Program DEBUG
Program DEBUG jest dostępny jako plik dyskowy o nazwie DEBUG.EXE i może być uruchomiony poleceniem
A>DEBUG
Przy takim wywołaniu program DEBUG zostanie wprowadzony do pamięci operacyjnej, umożliwiając rozpoczęcie wprowadzania zleceń. Zaproszeniem do wprowadzania poleceń jest (kreseczka) - . Pierwszym poleceniem może być wczytanie pliku dyskowego z uruchamianym programem. Program DEBUG możemy wykorzystać również do wprowadzenia krótkiego programu wprost z klawiatury. Polecenie uruchamiania może mieć inną postać
A > DEBUG nazwapliku [parametr l] [parametr_2]
W tym przypadku program uruchomieniowy będzie wprowadzony do pamięci operacyjnej, a następnie zostanie wczytany plik z programami do uruchomienia. Plik ten musi mieć rozszerzenie EXE lub COM. W wywołaniu mogą wystąpić parametry programu. Jeżeli załadowany (przeznaczony do uruchomienia) program jest w pliku o rozszerzeniu EXE, DEBUG wprowadza niezbędne przesunięcie zgodnie z informacją zawartą w nagłówku programu. Po załadowaniu programu, poszczególne rejestry przyjmują wartości zgodnie z tabl. 8.4.
Tabl. 8.4. Zawartość rejestrów po załadowaniu programu.
Program w pliku COM |
Program w pliku EXE | |
ss |
adres pierwszego wolnego segmentu za programem uruchomieniowym |
\ adres początku segmentu stosu |
SP |
adres końca segmentu (= offset szczytu stosu) |
offset szczytu stosu |
CS |
jak SS |
adres początku segmentu programu |
IP |
100H |
offset punktu startu programu określony dyrektywą ENI) |
DS.ES |
jak SS |
adres początku bloku PSP (obliczany tak jak adres początku segmentu) |
BX:CS |
długość wprowadzonego modułu w bajtach |
jak dla COM (włączając nagłówek programu) |
Rejestry nie wymienione w tabeli zostają wyzerowane, natomiast znaczniki przyjmują swój stan wyjściowy (jak p0 zerowaniu systemu). Przed rozpoczęciem testowania należy zanotować stan wymienionych wyżej rejestrów. Łącznie z informacjami