Definiowanie symboli
Dyrektywy definiujące symbole umożliwiają tworzenie symboli, które mogą być używane do reprezentacji rejestrów, liczb i adresów. Symbole definiowane przez te dyrektywy nie mogą być wcześniej zdefiniowane i nie mogą być później redefiniowane. Wyjątkiem od tych reguł jest dyrektywa SET
.
EQU, SET
Implementacja: ASEM-51, Keil
Dyrektywy EQU
i SET
przyporządkowują wartości numeryczne lub symbole rejestrów do wyspecyfikowanych nazw symbolicznych. Symbole zdefiniowane za pomocą dyrektywy EQU
nie mogą być wcześniej zdefiniowane, a także nie mogą być później redefiniowane. Redefinicję symbolu umożliwia tylko dyrektywa SET
. Instrukcje związane z tymi dyrektywami maja następujący format:
symbol EQU wyrażenie symbol EQU rejestr symbol SET wyrażenie symbol SET rejestr
- symbol jest definiowaną nazwą symboliczną. wyrażenie lub rejestr wyspecyfikowany w dyrektywach
EQU
lubSET
będzie wstawiany przy każdym wystąpieniu tego symbolu w bieżącym programie asemblerowym. - wyrażenie jest wyrażeniem numerycznym, które nie zawiera odniesień w przód lub jest prostym wyrażeniem relokowalnym.
- rejestr może być jedną z nazw rejestrów mikrokontrolera, np.: A, R0 lub SBUF.
Symbole zdefiniowane za pomocą dyrektywy EQU
lub SET
mogą być użyte w operandach, wyrażeniach lub adresach. Natomiast symbole, które są zdefiniowane na podstawie nazw rejestrów, mogą być użyte wszędzie tam, gdzie dopuszczalne jest użycie rejestrów.
Nie można użyć dyrektywy SET
, jeśli symbol został wcześniej zdefiniowany za pomocą dyrektywy EQU
i odwrotnie.
Poniżej przedstawiono kilka przykładów użycia dyrektyw EQU
i SET
. Jak można zauważyć, zdefiniowane wcześniej symbole mogą być później użyte do zdefiniowania innych symboli.
GRANICA EQU 1200 ROZMIAR EQU GRANICA - 200 + 'A' SERIAL EQU SBUF ACCU EQU A LICZNIK1 EQU R5 WARTOSC SET 100 WARTOSC SET WARTOSC / 2 LICZNIK2 SET R1 TEMP SET LICZNIK2 TEMP SET WARTOSC * WARTOSC
Nie należy definiować nowych symboli dla symboli specjalnych AR0 do AR7, gdyż adres rejestru Rn odpowiadający symbolowi ARn jest obliczany w momencie definiowania symbolu, a nie w miejscu jego użycia. Kiedy dyrektywa USING określa później właściwy bank rejestrów, wartość zdefiniowanego symbolu nie odpowiada adresowi reprezentowanemu aktualnie przez symbol ARn, a zatem generowany kod będzie prawdopodobnie niepoprawny. |
CODE, BIT, DATA, IDATA, XDATA
Implementacja: ASEM-51, Keil
Dyrektywy CODE
, BIT
, DATA
, IDATA
oraz XDATA
przyporządkowują danemu symbolowi adres w określonej klasie pamięci. Symbole zdefiniowane za pomocą tych dyrektyw nie mogą być zmieniane, jak również redefiniowane. Omawiane dyrektywy mają następujący format:
symbol CODE adres_code symbol BIT adres_bit symbol DATA adres_data symbol IDATA adres_idata symbol XDATA adres_xdata
- symbol jest definiowaną nazwą symboliczną. Może być używany w każdym miejscu, gdzie wymagany jest adres w pamięci wyspecyfikowanego typu.
- adres_code może być adresem w pamięci kodu z zakresu 0000H .. FFFFH.
- adres_bit może być adresem bitu w wewnętrznej pamięci danych w przestrzeni o adresach z zakresu 20H .. 2FH adresowanej bitowo lub adresem bitu rejestru SFR adresowanego bitowo.
- adres_data może być adresem rejestru SFR z zakresu adresów 80H .. FFH lub adresem w wewnętrznej pamięci danych z zakresu 0 .. 7FH.
- adres_idata może być adresem w wewnętrznej pamięci danych adresowanej pośrednio z zakresu 00H .. FFH.
- adres_xdata może być adresem w zewnętrznej pamięci danych z zakresu 0 .. FFFFH.
Poniżej przedstawiono kilka przykładów użycia omawianych dyrektyw.
DSEG AT 21h ;segment absolutny adresowany bitowo CTRL: DS 1 ;1-bajtowa zmienna (CTRL) ALARM BIT CTRL.0 ;definicja symbolu dla najmłodszego.. ;..bitu w CTRL LIGHT BIT ALARM+1 ;definicja symbolu dla kolejnego bitu w CTRL LED BIT P1.1 ;definicja symbolu dla bitu 1 portu P1 DN_FLAG BIT 24h.2 ;definicja symbolu reprezentującego bit.. ;..spod adresu 22h EN_FLAG BIT 60h ;definicja symbolu reprezentującego bit.. ;..spod adresu 60h RESET CODE 00H INTVEC_0 CODE RESET + 03H INTVEC_1 CODE RESET + 0BH INTVEC_2 CODE RESET + 1BH SERBUF DATA SBUF ;redefinicja bufora SBUF ARG1 DATA 40h ARG2 DATA ARG1 + 1 WYNIK DATA ARG1 + 2 BUFOR IDATA 60H BUF_LEN EQU 20H BUF_END IDATA BUFOR + BUF_LEN - 1 EXT_DATA SEGMENT XDATA RSEG EXT_DATA TIME: DS 6 ;rezerwacja 6-bajtów w zewnętrznej.. ;..pamięci danych GODZ XDATA TIME + 0 MIN XDATA TIME + 2 SEC XDATA TIME + 4