MCS-51
Dyrektywy asemblerowe

Konsolidacja (linkowanie) programów

Dyrektywy związane z konsolidacją programów umożliwiają wzajemną komunikację oddzielnie asemblowanych modułów przez ich nazewnictwo i zezwolenie na używanie symboli zdefiniowanych wewnątrz innych modułów.

NAME

Dyrektywa NAME określa nazwę, która będzie użyta dla oznaczenia modułu obiektowego wygenerowanego na podstawie bieżącego programu. Nazwa pliku obiektowego nie jest nazwą modułu obiektowego. Nazwa modułu obiektowego jest wbudowana w plik obiektowy. Dyrektywa NAME ma następujący format:

NAME  nazwa_modułu
  • nazwa_modułu jest nazwą, która będzie użyta do oznaczenia modułu obiektowego. Jej długość nie może przekroczyć 40 znaków. Przy określaniu nazwy modułu należy przestrzegać zasad określonych dla nazw symbolicznych.

W danym pliku programu dyrektywa NAME może być użyta tylko jeden raz. Jeśli omawiana dyrektywa nie zostanie w ogóle użyta, to nazwą modułu obiektowego będzie nazwa pliku źródłowego bez rozszerzenia.

Przykłady:

NAME   MOJ_PROGRAM

PUBLIC

Dyrektywa PUBLIC wylicza symbole, które są zdefiniowane w bieżącym module, a których użycie dopuszcza się w innych modułach. W efekcie umożliwia ona dostęp do danego modułu zewnętrznym modułom. Dyrektywa PUBLIC ma następujący format:

PUBLIC  symbol[,symbol, ...]
  • symbol musi być symbolem, który został zdefiniowany w danym pliku źródłowym. Odniesienia w tył do nazw symboli są dopuszczalne. W dyrektywie PUBLIC mogą być specyfikowane wszystkie nazwy symboliczne, za wyjątkiem symboli rejestrów i segmentów. Przy wprowadzaniu kilku symboli należy rozdzielać je przecinkami.

Jeśli jakiś symbol publiczny ma być użyty w innym pliku źródłowym, to należy użyć w nim dyrektywy EXTRN określającej, że wyspecyfikowany symbol jest zadeklarowany w innym module obiektowym.

Przykłady:

PUBLIC   PUT_CLRF, PUT_STRING, PUT_EOS
PUBLIC   ASCII2BIN, BIN2ASCII

EXTRN

Dyrektywa EXTRN wylicza symbole (związane z danym modułem źródłowym), które są w rzeczywistości zadeklarowane w innym module. Format omawianej dyrektywy jest następujący:

EXTRN  klasa  (symbol[,symbol, ...])
  • klasa jest klasą pamięci (BIT, CODE, DATA, IDATA, XDATA), w której został zdefiniowany symbol.
  • symbol jest nazwą zewnętrznego symbolu.

Dyrektywa EXTRN może występować w dowolnym miejscu programu źródłowego. Przy wprowadzaniu kilku symboli należy rozdzielić je przecinkami i umieścić w nawiasach za informacją o klasie.

Nazwy symboliczne, które są określane w dyrektywie EXTRN, muszą być wcześniej określone jako symbole publiczne przy pomocy dyrektywy PUBLIC w pliku źródłowym, w którym zostały one zadeklarowane.

Linker rozpoznaje wszystkie symbole zewnętrzne w czasie łączenia modułów i weryfikuje, czy klasa symbolu i typ symbolu, określone w dyrektywie EXTRN i PUBLIC, są zgodne.

Przykłady:

EXTRN   PUT_CLRF, PUT_STRING, PUT_EOS
EXTRN   ASCII2BIN, BIN2ASCII