MCS-51
Dyrektywy asemblerowe

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 lub SET 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
Uwaga 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