Kompilacja



Kod programu umieszczamy w plikach o rozszerzeniu .asm. Wszystkie programy umieszczone w kursie skompilowano przy użyciu pakietu MASM32v10, w którym proces kompilacji został opisany w tej zakładce. Każdy plik o rozszerzeniu .asm przeznaczony do kompilacji umieszczamy w katalogu "../masm32/bin/". Aby zademonstrować proces kompilacji posłużymy się plikiem o nazwie p1.asm. Schemat kompilacji pojedynczego modułu przedstawiony jest na rysunku poniżej:

Nie można wyświetlić obrazu
Rys.1. Schemat przekształceń pojedynczego modułu obiektowego.

Zgodnie z rysunkiem na etap kompilacji pojedynczego modułu (w naszym wypadku jest to plik p1.asm.), przypadają dwa podetapy:

a)Pierwszy tzw. asemblacja bądź tłumaczenie - przekształcenie modułu źródłowego w języku asemblera na moduł obiektowy, wykonujemy przy użyciu pliku ml.exe. W celu asemblacji wybranego modułu wpisujemy następujące polecenie w oknie konsoli, po wcześniejszym przejściu do katalogu "bin":

ml   /c   /coff    p1.asm

Po zostosowanej komendzie, w przypadku braku błędów asemblacji otrzymujemy plik obiektowy p1.obj. Zastosowane tu opcje asemblera ml.exe : /c i /coff oznaczają odpowiednio: asemblację bez konsolidacji i generację modułów obiektowych we wspólnym formacie plików obiektowych (COFF). Druga z tych opcji jest absolutnie niezbędna przy każdej asemblacji.

b)Drugi tzw. konsolidacja bądź łączenie - przekształcenie modułu obiektowego w moduł wykonywalny poprzez dołączenie bibliotek i innych modułów obiektowych wykonujemy przy użyciu konsolidatora link.exe. Komenda wywołująca konsolidację wpisywana w oknie konsoli zależy od typu programu jaki konsolidujemy. W przypadku aplikacji okienkowych - Windows wpisujemy:


link   /subsystem:windows   p1.obj

,w przypadku programów obsługiwanych przez konsolę:

link   /subsystem:console   p1.obj

Zastosowana tu opcja konsolidatora /subsystem: ustala metodę uruchamiania wynikowego pliku .exe.



W przypadku korzystania z plików zasobów (pliki .rc), należy go przed konsolidacją skompilować programem rc.exe, dołączonym do pakietu MASM32, znajdującym się w tym samym katalogu co konsolidator i translator. W wyniku otrzymujemy plik o rozszerzeniu .res. Następnie należy podać nazwę pliku .res. jako parametr podczas konsolidacji. Przykładowo posiadając plik z kodem p1.asm i plik zasobów zasoby.rc proces kompilacji powinien wyglądać następująco:

ml   /c   /coff   p1.asm
rc   zasoby.rc
link   /subsystem:windows   p1.obj   zasoby.res

Możliwe jest także wykonanie asemblacji i konsolidacji automatycznie, bez potrzeby wpisywania odpowiednich komend w oknie konsoli. Umożliwia to np. opcja Assemble & Link (Project->Assemble & Link) lub Console Assemble & Link (Project->Console Assemble & Link) edytora Qeditor dołączonego do pakietu MASM32. W wyniku otrzymujemy gotowy plik .exe.

Nie można wyświetlić obrazu
Rys.2. Automatyczna asemblacja i linkowanie w edytorze qeditor.

Pozostałe parametry asemblera ml.exe i konsolidatora link.exe podawane podczas uruchomienia przedstawiono w tabelach poniżej:

Tabela z parametrami asemblera ml.exe

Parametr asemblera ml.exeOpis
/?Wyświetla ekran pomocy.
/ATTworzony jest plik o rozszerzeniu .com.
/BT<konsolidator>Pozwala na użycie innego programu konsolidatora, który powinien uruchamiać się automatycznie.
/cAsemblacja bez konsolidacji.
/CpZachowanie wielkości znaków identyfikatorów użytkownika. Opcji tej można użyć w celu zwiększenia stopnia kontroli.
/CuWszystkie znaki w identyfikatorach zmieniane są na wielkie.
/coffGeneruje moduły obiektów we wspólnym formacie plików obiektowych(COFF).
/D<nazwa>=[ciąg znaków]Definiuje makroinstrukcję tekstową.
/EPListing preprocesora (kod programu z dołączonymi plikami dyrektyw INCLUDE) wypisywany jest na standardowe wyjście(stdout).
/F<hex>Ustala rozmiar stosu w bajtach. Domyślna wartość to 1MB.
/Fe<plik>Definiuję nazwę wynikowego pliku wykonywalnego. Opcji tej można używać jeżeli pominięta zostanie opcja /c.
/Fl<plik>Generuje plik listingu.
/Fm<plik>Generuje plik .map. Opcji tej można używać jeśli zostanie pominięta opcja /c.
/Fo<plik>Ustala nazwę pliku obiektowego.
/FrGeneruje plik źródłowy .sbr ( bez symboli lokalnych) na potrzeby programu bscmake.exe.
/G<c|d|z> Używana jest konwencja wywołań funkcji Pascala,C lub stdcall.
/H<numer> Ustala maksymalną długość nazw zewnętrznych.
/I<nazwa> Dodaje ścieżkę przechowującą pliki dołączone dyrektywą INCLUDE. Można podać więcej niż dziesięć opcji /I.
/link<opcja> Opcje wiersza poleceń konsolidatora. Opcji tej można używać jeżeli zostanie pominięta opcja /c.
/nologoNie wyświetla komunikatów w przypadku asemblacji zakończonej sukcesem.
/SaW listingu zostaną umieszczone wszystkie możliwe informacje.
/ScDo listingu dodaje informacje czasowe.
/SfGeneruje dodatkowo listing pierwszego przebiegu asemblera.
/Sl<numer>Ustala szerokość wiersza w listingu.
/SnNie generuje w listingu tabeli nazw symbolicznych.
/Sp<numer>Ustala długość strony listingu.
/Ss<numer>Ustala tekst podtytułu listingu.
/St<numer>Ustala tekst tytułu listingu.
/SxDo listingu dołączone są fragmenty kodu związane z kompilacją warunkową.
/Ta<plik>Asemblowane będą pliki o rozszerzeniu innym niż .asm.
/W<numer>Ustala listę zdarzeń występujących w czasie asemblacji, jakie należy traktować jak błędy.
/WXWszystkie ostrzeżenia traktowane są jak błędy.
/XŚcieżka ustalona przez ścieżkę środowiskową INCLUDE jest ignorowana.
/ZdInformacja dla debuggera. Dołączane są tylko numery linii.
/ZfWszystkie nazwy deklarowane są jako PUBLIC.
/ZiDołączana jest pełna informacja debuggera.
/ZmWłącza tryb zgodności z asemblerem 5.01.
/Zp<n>Wprowadza wyrównywanie struktur danych.
/ZsWykonywane jest tylko sprawdzanie składni.



Tabela z parametrami konsolidatora link.exe