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
EQUlubSETbę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