Rezerwacja pamięci
Dyrektywy rezerwacji pamięci w obszarze pamięci danych są używane do rezerwacji przestrzeni jednostkami o rozmiarze jednego bajta, słowa (2 bajty), bitu lub ich wielokrotności. Rezerwacja przestrzeni rozpoczyna się w punkcie wskazywanym przez bieżącą wartość licznika położenia w obecnie aktywnym segmencie.
DBIT
Implementacja: ASEM-51, Keil
Dyrektywa DBIT
rezerwuje przestrzeń w segmencie danych adresowanych bitowo. Jej format jest następujący:
etykieta: DBIT wyrażenie
- etykieta jest symbolem, który określa adres w rezerwowanej pamięci. Etykieta jest symbolem typu
BIT
i pobiera bieżącą wartość adresu oraz klasę pamięci aktywnego segmentu. Etykieta ta może być użyta wszędzie tam, gdzie dopuszczalne jest użycie segmentu tego typu. - wyrażenie jest liczbą rezerwowanych jednostek, każda o rozmiarze jednego bita. wyrażenie nie może zawierać odniesień w przód, symboli relokowalnych lub symboli zdefiniowanych poza bieżącym plikiem źródłowym.
Dyrektywa DBIT
rezerwuje przestrzeń w segmencie adresowanym bitowo rozpoczynając od bieżącego adresu reprezentowanego przez licznik położenia tego segmentu. Następnie licznik położenia jest zwiększany o wartość wynikająca z obliczonego wyrażenia. Obszar pamięci umożliwiający adresowanie bitowe jest ograniczony, dlatego suma licznika położenia oraz wartości wyrażenia nie może przekroczyć rozmiaru tego obszaru. Jeśli jednak wystąpi taka sytuacja, to jest to sygnalizowane komunikatem błędu asemblacji.
Bardzo często dyrektywa DBIT
występuje w połączeniu z dyrektywą BSEG AT adres
, co pokazano przy jej omawianiu, a powtórzono poniżej.
BSEG AT 20h UP_FLAG: DBIT 1 ;rezerwuje fragment pamięci o rozmiarze 1 bita.. ;..zajmując komórkę pamięci o adresie 20h DN_FLAG: DBIT 2 ;rezerwuje fragment pamięci o rozmiarze 2 bitów.. ;..zajmując komórki pamięci o adresach 21h i 22h
Asemblery analizują kod źródłowy co najmniej dwukrotnie. W pierwszym przejściu, zbierane są wszystkie symbole oraz określana jest długość każdej instrukcji. W drugim przejściu, obliczane są wyrażenia z doniesieniami w tył oraz tworzony jest kod obiektów. Z tego powodu wyrażenia używane w dyrektywie DBIT nie mogą zawierać odniesień w tył. |
DS
Implementacja: ASEM-51, Keil
Dyrektywa DS
rezerwuje określoną liczbę bajtów w przestrzeni pamięci danych. Jej format ma następującą postać:
etykieta: DS wyrażenie
- etykieta jest symbolem, który określa adres rezerwowanej pamięci. Pobiera ona bieżącą wartość adresu i klasę pamięci aktywnego segmentu. Etykieta może być użyta tam, gdzie użycie adresu z segmentu tego typu jest dopuszczalne.
- wyrażenie jest liczbą rezerwowanych jednostek, każda o rozmiarze jednego bajta. Wyrażenie nie może zawierać odniesień w przód, symboli relokowalnych lub symboli zdefiniowanych poza bieżącym plikiem źródłowym.
Dyrektywa DS
rezerwuje przestrzeń w bieżącym segmencie rozpoczynając od bieżącego adresu. Różnicą w stosunku do dyrektywy DBIT
jest tylko podstawowa jednostka rezerwacji, którą dla tej dyrektywy jest bajt. Tutaj również suma licznika położenia i wartości wyrażenia nie może przekroczyć granicznego rozmiaru dostępnej przestrzeni adresowej w danym segmencie.
Również ta dyrektywa występuje często z dyrektywami dotyczącymi deklaracji segmentów absolutnych lub relokowalnych.
DSEG AT 30h WYNIK: DS 4 ;rezerwacja 4 bajtów od adresu 30h w wewnętrznej pamięci.. ;..danych adresowanej bezpośrednio LICZBA: DS 2 ;rezerwacja kolejnych 2 bajtów od adresu 34h DS 20 ;rezerwacja kolejnych 20 bajtów od adresu 36h XDATA AT 2000h TIME: DS 8 ;rezerwacja 8 bajtów od adresu 2000h w zewnętrznej.. ;..pamięci danych
W przypadku przykładu związanego z segmentem DSEG
, od adresu określonego etykietą WYNIK
zostaną zarezerwowane 4 bajty pamięci, a od adresu określonego etykietą LICZBA
kolejne 2 bajty. Etykieta WYNIK
jest właściwie tożsama z adresem 30H, gdyż wskazuje na pierwszą rezerwację tuż za dyrektywą DSEG
określającą adres na wartość 30H. Z kolei etykieta LICZBA
jest tożsama z adresem 34H. Zatem można jej używać w rozkazach, w których dopuszczalne jest podanie jako jednego z operandów adresu w wewnętrznej pamięci danych. Poniżej podno kilka przykładów.
MOV A,LICZBA ;zapis do akumulatora wartości z komórki pamięci.. ;..wskazywanej etykietą LICZBA, czyli komórki o adresie 30h ;Rozkaz ten jest równoważny następującemu rozkazowi: MOV A,30H MOV R1,LICZBA+1 ;zapis do rejestru R1 wartości z komórki pamięci.. ;..o adresie o 1 większym niż komórka wskazywana.. ;..przez etykietę LICZBA. Rozkaz ten jest równoważny.. ;..następującemu rozkazowi: MOV R1,31H