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ć wczeniej 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š wartoci numeryczne lub symbole rejestrów do wyspecyfikowanych nazw symbolicznych. Symbole zdefiniowane za pomocš dyrektywy EQU
nie mogš być wczeniej 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
, jeli symbol został wczeniej 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 wczeniej 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 okrela póniej właciwy 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 okrelonej 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 porednio 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