56 4. Język asemblerowy mikroprocesorów 8086/8088
433. Połączenia międzymodułowe
Osiągnięcia współczesnej inżynierii programowania narzucają modułową konstrukcję programów. Szczególnie duże programy są dzielone na wiele modułów kodowanych, tłumaczonych i uruchamianych niezależnie, czasem prz.cz różnych programistów. Występujące zależności między modułami oraz cechy i inne właściwości poszczególnych modułów są definiowane odpowienimi dyrektywami: NAME, PUBLIC, EXTRN, END, oraz INCLUDE.
Dyrektywa NAME
Dyrektywa pozwala przypisać nazwę modułowi przekazywaną następnie programowi łączącemu. Składnia jest następująca i
N.AME nazwa modułu
Nazwa modułu może zawierać do sześciu znaków i może być taka sama jak symbole stosowane w programie źródłowym do innych celów. Dyrektywa NAME nie może być poprzedzona nazwą symboliczną i w danym module może być użyta tylko raz. Jeżeli dyrektywa NAME nie występuje w programie lub też została błędnie zapisana, to asembler przyjmuje automatycznie nazwę modułu jako sześć pierwszych znaków tekstu występującego w dyrektywie T1TLE, uzupełnionych o rozszerzenie OBJ. Jeżeli dyrektywa TITLE także nie występuje, to za nazwę modułu zostaje przyjęta nazw pliku dyskowego z programem źródłowym, uzupełniona o rozszerzenie OBJ.
Dyrektywa PUBLIC
Dyrektywa PUBLIC pozwala na określenie wewnętrznych, symbolicznych nazw globalnych, tzn. takich, które są zdefiniowane wewnątrz danego modułu i są dostępne dla innych modułów. Informacja ta jest niezbędna w momencie łączenia przez odpowiedni program łączący kilku modułów w jedną całość. Składnia dyrektywy jest następująca >
PUBLIC nazwa Å‚ I,nazwa_2, ..J
Dyrektywa nic może być poprzedzona nazwą. Wyspecyfikowane nazwy mogą być etykietami, nazwami zmiennych, mogą być również zdefiniowane dyrektywami EQU, = . W tym ostatnim przypadku nie mogą być dłuższe niż dwa bajty.
Dyrektywa EXTRN
Dyrektywa EXTRN służy do deklarowania asemblerowi zewnętrznych, symbolicznych nazw globalnych, tzn. takich, które są używane w danym module, ale są zdefiniowane w innym module. Brak deklaracji nazw zewnętrznych jest sygnalizowany komunikatem asemblera o błędzie polegającym na niezdefiniowaniu nazw symbolicznych używanych w programie. Adres odpowiadający zadeklarowanej nazwie zewnętrznej zostanie uzupełniony w czasie łączenia modułów przez program łączący. Składnia dyrektywy jest następująca
EXTRN nazwalrtypl [, nazwa_2:typ_2, ...1
4.3. Dyrektywy i pseudoinstrukcje
Dyrektywa nie może być poprzedzona nazwą. Musi zostać podany typ nazwy - BYTE, WORD, DWORD, NEAR, FAR lub ABS. Typ ABS dotyczy stałych numerycznych lub nazw zdefiniowanych dyrektywą EQU. Typ w dyrektywie musi być zgodny z typem w definicji nazwy. Dyrektywa może znajdować się wewnątrz segmentu (nazwa będąca argumentem musi być wtedy zdefiniowana w tym segmencie) lub poza segmentem (gdy nazwy są zdefiniowane w różnych segmentach). Nazwa deklarowana jako zewnętrzna (EXRTN) nie może występować równocześnie jako wewnętrzna (PUBLIC).
Przykład
EXTRN ZMIENNAiWORD, PODPROGRAMiFAR
•••
PROGRAM SEGMENT PARA
• ••
MOV ZMIENNA,BX ; ZMIENNA zdefiniowana w innym module CALL PODPROGRAM ; PODPROGRAM jest zdefiniowany
; w innym module â–²
Dyrektywa END
Dyrektywa END wskazuje koniec programu źródłowego i powoduje zatrzymanie asemblacji. W związku z tym, w programie może znajdować się tylko jedna dyrektywa END, a ponadto musi to być ostatni wiersz programu. Składnia dyrektywy jest następująca
END [etykieta]
Jeżeli występuje etykieta, to określa ona adres startowy programu. Moduł jest traktowany wtedy jako program główny. Jeżeli cały program składa się z wielu łączonych modułów, to tylko jeden z nich może być zakończony dyrektywą END z etykietą. Dla programów uruchamianych pod kontrolą systemu operacyjnego MS-DOS, jest to jedyny sposób zdefiniowania adresu, od którego należy rozpocząć wykonywanie programu.
Dy^ek tywal NCLU DE
Dyrektywa INCLUDE pozwala dołączyć do tłumaczonego programu inny plik z programem źródłowym. Dołączanie rozpoczyna się od miejsca umieszczenia yrektywy INCLUDE. Po dołączeniu pliku asembler analizuje kolejne instrukcje programu umieszczone po dyrektywie. INCLUDE jest stosowana w przypadku powtarzasz?^*1 sekwenci* rozkazów wykorzystywanych w różnych modułach i programach. • k ac*n*a dyrektywy jest następująca
INCLUDE nazwapliku
^•3-4. Definiowanie danych i rezerwacja pamięci
y rozdziale tym omówiono dyrektywy: DB, DW, DD, DO, DT oraz RECORD, STRUĆ
1 -Radix.