174 17. Narzędzia programowania
gdzie: NOLIST - dyrektywa asemblera wskazująca, że wszystkie elementy występujące po niej nie będą dołączone do zbioru z rozszerzeniem .lst.
LIST - dyrektywa asemblera wskazująca że wszystkie elementy występujące po niej będą dołączone do zbioru z rozszerzeniem .lst.
Poleceniem INCLUDE można do zbioru źródłowego dołączać również inne zbiory, zawierające na przykład fragmenty programów.
Elementy programu mogą być podzielone na segmenty związane z obszarem pamięci, w którym mają być umieszczone. Segmenty mogą być absolutne lub relokowalne. Segmenty relokowalne są to segmenty, których adresy są ustalane na etapie łączenia programów przez linker.
Segmenty absolutne są to segmenty, których adresy są ustalone przez programistę na poziomie asemblera. Można je zadeklarować w dwojaki sposób. Pierwszy sposób polega na podaniu typu segmentu z opcją AT i adresem od którego segment się rozpoczyna:
• CSF.G AT adresabsolutny ;segment w obszarze pamięci programu
• DSEG AT adres absolutny ;segment w obszarze wewnętrznej pa
mięci RAM adresowanej bezpośrednio.
• ISEG AT adres_absolutny ;segment w obszarze wewnętrznej pa
mięci RAM adresowanej pośrednio.
• XSEG AT adres absolutny ;segment w obszarze zewnętrznej pa
mięci RAM
• BSEG AT adres_absolutny ;segment w obszarze pamięci adresowa
nej bitowo.
Opcja AT kończy rezerwację pola poprzednich obszarów absolutnych pamięci i rozpoczyna nowy obszar z bazą wskazaną 'adres absolutny'. Taka postać przywołania segmentu absolutnego umożliwia pozostawienie pamięci dla segmentów relokowalnych poniżej wskazanego adresu. Na przykład:
CSEG AT lOOh ;w obszarze od 0 do lOOh można umieścić
;segmenty relokowalne ..................... ; program
Program zostanie umieszczony od adresu 100 szesnastkowo.
Drugi sposób polega na podaniu typu segmentu i polecenia ORG wraz z adresem określającym początek segmentu. Przy takim zdefiniowaniu segmentu absolutnego, poniżej adresu wskazanego poleceniem ORG nie można umieszczać segmentów relokowalnych. Na przykład:
ORG lOOh ;w obszarze od 0 do lOOh nie można umieścić
;modułów relokowalnych
..................... ;program
W tym przypadku program zostanie również umieszczony od adresu 100
szesnastkowo.
Należy pamiętać, że w przypadku składania segmentów absolutnych sprawdzanie, czy obszary pamięci składanych segmentów nie nachodzą na siebie należy w zasadzie do programisty. Tylko niektóre linkery zgłaszają błąd nakładania się na siebie programów.
W celu umożliwienia łączenia fragmentów programu i optymalizacji zagospodarowania obszarami pamięci moduły programów w zbiorach źródłowych przetwarzanych przez asembler należy podzielić na segmenty relokowalne. Każdy segment jest określony nazwą i deklaracją typu segmentu. Do deklaracji segmentu relokowalnego stosuje się polecenie SEGMENT, na przykład:
Nazwasegmentu SEGMENT typsegmentu
Nazwa segmentu, jeżeli jest związana z tym samym typem segmentu, może powtarzać się w innych modułach łączonych przez linker w jeden wspólny program. Typy segmentów są zdefiniowane w następujący sposób:
• CODĘ - segment umieszczony w pamięci programu
• DATA - segment umieszczony w wewnętrznej pamięci danych adreso
wanej bezpośrednio
• IDATA - segment umieszczony w wewnętrznej pamięci danych adreso
wanej pośrednio
• XDATA - segment umieszczony w zewnętrznej pamięci danych
• BIT - segment umieszczony w wewnętrznej pamięci danych adreso
wanej bitowo
Polecenie SEGMENT jest tylko deklaracją, że w module występuje segment o podanej nazwie i typie, natomiast właściwy segment relokowalny rozpoczyna się od polecenia RSEG:
RSEG Nazwa_segmentu
Linker łączy segmenty w takiej kolejności w jakiej występują polecenia SEGMENT.