206 & Uruchamianie programów asemblerowych
Znaczenie poszczególnych kolumn komunikatu jest następujące
1 - numer wiersza programu źródłowego,
2 - offset rozkazu liczony względem zdefiniowanego w programie źródłowym początku segmentu,
3 - wygenerowany przez asembler kod rozkazu maszynowego w kodzie szesnastkowym,
4 - instrukcje programu źródłowego (wg pliku o rozszerzeniu ASM).
Jeżeli wystąpił błąd syntaktyczny, to komunikat zostanie zapisany bezpośrednio po wierszu instrukcji, w której wystąpił błąd. Wydruk programu może ponadto zawierać inne dodatkowe informacje oznaczone następująco
R - adresowa część kodu rozkazu będzie uaktualniona przez program łączący bądź ładujący,
E - symbol zewnętrzny,
U - symbol niezdefiniowany,
= - instrukcja zawiera dyrektywÄ™ EQU lub =,
nn: - instrukcja zawiera przedrostek określający segment,
nn/ - instrukcja zawiera przedrostek REP lub LOCK,
+ - wiersz, który powstał w wyniku rozwinięcia makroinstrukcji,
C - wiersz, który powstał w wyniku dołączenia pliku dyrektywą 1NCLUDE.
Na rysunku 8.2 przedstawiono przykładowe wywołania makroasemblera M ASM oraz komunikaty na ekranie monitora. J
8J.1. Program Å‚Ä…czÄ…cy LINK
Program łączący LINK.EXE tworzy plik z programem maszynowym gotowym do załadowania do pamięci komputera i wykonania. Danymi wejściowymi jest plik lub pliki uzyskane w wyniku procesu asemblacji lub też kompilacji programów napisanych w językach wysokiego poziomu, takich jak Pascal, Fortran itp. Program LINK spełnia następujące funkcje
- łączenia modułów (plików o rozszerzeniu OBJ) uzyskanych niezależnie w czasie asemblacji lub (i) kompilacji,
- przeszukiwania plików bibliotecznych celem znalezienia definicji symboli zewnętrznych,
- rozwiązywania problemów połączeń zewnętrznych,
- wytwarzania listy (w postaci pliku o rozszerzeniu MAP dogodnego do drukowania) zawierającej informacje o błędach i sposobie rozwiązania zewnętrznych połączeń,
- wytwarzania przesuwalnych (relokowalnych) modułów z programem maszynowym przygotowanym do załadowania i wykonania w postaci pliku o rozszerzeniu EXE.
Podobnie jak makroascmbler, program łączący LINK można uruchomić na kilka sposobów, które podano w przykładach.
powered by
8.3. Programy pomocnicze
Przykład
A > LINK[/przełączniki]
W wyniku polecenia system operacyjny ładuje program łączący do pamięci operacyjnej, który po przedstawieniu się żąda wprowadzenia parametrów.
Object modules [.OBJ]:
Nazwa pliku lub nazwy plików oddzielone od siebie spacją lub znakiem +, przeznaczone do łączenia. Rozszerzenie OBJ jest przyjmowane automatycznie i nie trzeba go wprowadzać.
Run File [object.EXE]:
Nazwa tworzonego pliku z programem maszynowym. Potwierdzenie klawiszem Enter spowoduje przyjęcie takiej samej nazwy, jaką ma plik wejściowy, jednak z rozszerzeniem EXE. W poleceniu wywołania programu łączącego, za nazwą pliku można wybrać następujące przełączniki
/M (ang. map) - drukowanie wszystkich symboli globalnych zdefiniowanych w module
wejściowym,
/P (ang. pause) - wstrzymanie pracy programu łączącego przed utworzeniem pliku o rozszerzeniu EXE i wyświetlenie na monitorze komunikatu About to generate .EXE file Change disks < hit ENTER >
Przełącznik pozwala na zmianę dysketki, na którą będzie wyprowadzony plik o rozszerzeniu EXE.
List file [NUL.MAP]:
Nazwa tworzonego przez LINK pliku z listą adresów poszczególnych segmentów programu w modułach wejściowych i odpowiadające im adresy względne w module łado-walnym EXE. Pozostawienie nazwy NUL i potwierdzenie jedynie klawiszem Enter nie tworzy pliku o rozszerzeniu .MAP.
Libraries [.LIB]:
Nazwa pliku (lub plików oddzielonych spacją lub znakiem +) z programami bibliotecznymi. Jeżeli rozszerzenie nazwy jest standardowe (LIB), to nic trzeba go wprowadzać. Jeżeli programy biblioteczne nie są dołączane, wystarczy nacisnąć klawisz Enter. Biblioteki są przeszukiwane w kolejności występowania na liście. ♦
Wywołanie programu LINK z przełącznikiem /HE powoduje wyświetlenie wszystkich dostępnych opcji programu łączącego (zobacz rys. 8.3.d). Wymienimy jedynie funkcje dodatkowych przełączników.
/HI (ang. high) - lokalizacja programu maszynowego tak wysoko w pamięci jak to jest możliwe (przy uwzględnieniu rezydentnej części COMMAND.COM). Brak przełącznika /HI powoduje lokalizację programu na najmniejszych możliwych adresach.
/DS (ang. disallocation) - zdefiniowanie wszystkich danych w grupie (zob. opis dyrektywy GROUP) i ładowanie na największe adresy grupy. W połączeniu z przełącznikiem /HI pozwala to na specyfikację dynamicznej alokacji pamięci. Jest to Istotne, gdy w pamięci wykorzystujemy zmienne wskaźnikowe. Przełącznik stosuje się głównie dla programów napisanych w językach wysokiego poziomu.