ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Informacje ogólne
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Informacje ogólne
Asembler Asem-51 jest w pełni kompatybilny
ze standardowym zestawem instrukcji
mikrokontrolera 8051,
Program po asemblacji może być zapisany w
dwóch rodzajach plików:
Intel-HEX,który jest wykorzystywany przez
większość programatorów (.hex),
absolutny format OMF-51,który jest wymagany
przez większość symulatorów i debagerów (.bin),
Sprawdza się zarówno w małych jak również
dużych, rozbudowanych projektach.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
najważniejsze cechy
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
najważniejsze cechy
szybki, zwarty, niezawodny, łatwy w użyciu,
uruchamiany z linii komend, plików wsadowych lub z
sieci,
możliwość pracy w systemach: DOS (tryb rzeczywisty i
chroniony), Win32 i Linux,
pięć liczników adresowych obsługujących dostępne
przestrzenie adresowe,
automatyczna optymalizacja rozkazów skoków i wywołań
podprogramów,
możliwość tworzenia makrorozwinięć,
możliwość dołączania plików źródłowych ($INCLUDE),
Możliwość asemblacji warunkowej.
Format pliku źródłowego
Linia pliku źródłowego może przyjąć jedną z trzech
postaci:
symbol:
instruction
arguments
;comment
symbol
instruction
argument
;comment
$control
(argument)
;comment
Pojedyncza linia nie może być dłuższa niż 255 znaków.
Cały tekst zapisany po znaku komentarza (;) jest przy
asemblacji pomijany.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (1)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (1)
Przykład użycia symboli
HERE: MOV A,#0FFH ;definicja etykiety HERE i
załadowanie do akumulatora
wartości 255.
YEAR EQU 2005
;definicja symbolu o wartości
bieżącego roku
$INCLUDE (80C535.MCU)
;dołącz definicje dla
procesora 535.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (2)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (2)
Przykłady
Stała (etykieta stałej) jest identyfikatorem
reprezentującym wartość liczbową. Składa się z ciągu liter i
cyfr rozpoczynającego się od litery. W skład stałej mogą
wejść znaki: 'a'..'z', 'ą'..'ź', '_', '@'. Wielkość liter nie ma
znaczenia. Do deklaracji wartości stałej służą dyrektywy EQU i
BIT. W programie deklaracja danej stałej może wystąpić
tylko raz, ale może być do niej wiele odwołań.
Przykład:
Led1 BIT P3.2
SETB Led1
CLR Led1
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (3)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (3)
Etykiety
Etykieta jest identyfikatorem wyróżniającym rozkaz lub
dyrektywę. Przypisany jest jej adres, do którego przenoszone jest
sterowanie. Gdy użytkownik pragnie skierować wykonywanie programu
w miejsce oznaczone etykietą, posługuje się jej nazwą, zastępującą adres
fizyczny. Etykieta składa się z ciągu liter i cyfr rozpoczynającego się od
litery.Wielkość liter nie ma znaczenia. Etykieta powinna być zakończona
znakiem ':'. W programie dana etykieta może wystąpić tylko raz, ale
może być do niej wiele odwołań.
Przykład:
JC Petla
Add A,R7
Pętla:Jmp $
Cjne A,#99,Petla
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (4)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (4)
Literały
Literały są nazwami stałych.
Asembler dopuszcza całkowite literały arytmetyczne:
dziesiętne (ciągi cyfr dziesiętnych 0..9). Na końcu
literału można postawić znak 'd' lub 'D‘,
szesnastkowe (heksadecymalne; ciągi cyfr 0..F). Na
końcu literału stawiamy znak 'h' lub 'H',
ósemkowe (oktalne; ciągi cyfr 0..7). Na końcu literału
stawiamy znak ‘o’ lub ’O’,
Dwójkowe (binarne; ciągi cyfr 0..1). Na końcu literału
stawiamy znak ‘b’ lub ’B’.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (5)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (5)
Makroinstrukcje
Makroinstrukcja jest uporządkowanym ciągiem
rozkazów realizujących określoną funkcję. Nazwa
makroinstrukcji składa się z ciągu liter i cyfr
rozpoczynającego się od litery. Wielkość liter nie ma
znaczenia. W programie dana makroinstrukcja może
wystąpić tylko raz, ale może być do niej wiele odwołań.
Nazwa MACRO argumenty oddzielone przecinkami
. Zawartość
. Makroinstrukcji
ENDM
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (6)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (6)
Dyrektywy
EQU
(
EQUAL
- równa się)- Służy do deklarowania nazw
stałych.
Składnia:
nazwa
EQU
wyrażenie
Przykład:
Stała EQU 5
Argumentami wyrażenia mogą być liczby, wcześniej
deklarowane stałe lub kody znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (7)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (7)
Dyrektywy
DB
(
DATA BYTE
- dana bajtowa)- Umieszcza w kodzie
programu jedną lub ciąg 8-bitowych
danych.Wymienione w ciągu dane zostaną
umieszczone w tej samej kolejności w
pamięci programu bajt po bajcie.
Składnia:
[
Etykieta:
]
DB
ciąg_danych_8-
bitowych_oddzielonych_przecinkami
Przykład:
DB 15,12,Stała,'a','b',‘łańcuch'
Po ostatnim elemencie ciągu nie powinno być przecinka.
Wystąpienie etykiety nie jest wymagane.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (8)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (8)
Dyrektywy
DW
(
DATA WORD
- dana dwubajtowa)- Umieszcza w kodzie
programu jedną lub ciąg 16-bitowych
danych.Wymienione w ciągu dane zostaną
umieszczone w tej samej kolejności w
pamięci programu słowo po słowie.
Składnia:
[
Etykieta:
]
DW
ciąg_danych_16-
bitowych_oddzielonych_przecinkami
Przykład:
DW 1532h,12,Stała,'a','bs'
Po ostatnim elemencie ciągu nie powinno być przecinka.
Wystąpienie etykiety nie jest wymagane.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (9)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (9)
Dyrektywy
DS
(
DATA SEGMENT
– segment danych)- Rezerwuje
wyspecyfikowaną ilość danych w pamięci programu.
Składnia:
[
Etykieta:
]
DS
Rozmiar
Przykład:
Bufor DS 15
DS 10
Rozmiar segmentu danych jest wyrażeniem, na które
mogą składać się liczby, stałe lub kody znaków
ujętych w cudzysłów. Etykieta nie jest wymagana.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (10)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (10)
Dyrektywy
BIT-
Służy do deklarowania nazw stałych.
Składnia:
nazwa
BIT
wyrażenie
Przykład:
Stała BIT P3.6
Argumentami wyrażenia mogą być liczby, wcześniej
deklarowane stałe lub kody znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (11)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (11)
Dyrektywy
DBIT
(
DATA BIT
- dana bitowa)- Rezerwuje w obszarze
pamięci adresowanym bitowo zadaną
ilość bitów. Argument może być liczbą
całkowitą lub wyrażeniem, którego
wynikiem jest liczba całkowita.
Składnia:
DBIT liczba
Przykład:
DBIT 16 ; rezerwuje obszar 16
bitów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (12)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (12)
Dyrektywy
ORG
- Określa adres początku segmentu
rozkazów lub danych w pamięci programu.
Składnia:
ORG
Wyrażenie
Przykład:
ORG 1Bh
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (13)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (13)
Dyrektywy
DSEG AT
(
DATA SEGMENT
-segment danych)-
Określa adres początku segmentu danych w
pamięci programu.
Składnia:
DSEG AT
Wyrażenie
Przykład:
DSEG AT 0F000h
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (14)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (14)
Dyrektywy
CSEG AT
(
CODE SEGMENT
-segment rozkazów)
Określa adres początku segmentu rozkazów w
pamięci programu.
Składnia:
CSEG AT
Wyrażenie
Przykład:
CSEG AT 0Bh
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (15)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (15)
Dyrektywy
XSEG AT
(
EXTEND SEGMENT
-segment
pamięci zewnętrznej) Określa adres początku
segmentu w pamięci zewnętrznej.
Składnia:
XSEG AT
Wyrażenie
Przykład:
XSEG AT 3Fh
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (16)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (16)
Dyrektywy
BSEG AT
(
BIT SEGMENT
-segment w pamięci
bitów) Określa adres początku segmentu w
pamięci adresowanej bitowo.
Składnia:
BSEG AT
Wyrażenie
Przykład:
BSEG AT 12h
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (17)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (17)
Dyrektywy
EQU
(
EQUAL
- równa się)- Służy do deklarowania nazw
stałych.
Składnia:
nazwa
EQU
wyrażenie
Przykład:
Stała EQU 5
Argumentami wyrażenia mogą być liczby, wcześniej
deklarowane stałe lub kody znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (18)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (18)
Dyrektywy
DB
(
DATA BYTE
- dana bajtowa)- Umieszcza w kodzie
programu jedną lub ciąg 8-bitowych
danych.Wymienione w ciągu dane zostaną
umieszczone w tej samej kolejności w
pamięci programu bajt po bajcie.
Składnia:
[
Etykieta:
]
DB
ciąg_danych_8-
bitowych_oddzielonych_przecinkami
Przykład:
DB 15,12,Stała,'a','b',‘łańcuch'
Po ostatnim elemencie ciągu nie powinno być przecinka.
Wystąpienie etykiety nie jest wymagane.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (19)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (19)
Dyrektywy
DW
(
DATA WORD
- dana dwubajtowa)- Umieszcza w kodzie
programu jedną lub ciąg 16-bitowych
danych.Wymienione w ciągu dane zostaną
umieszczone w tej samej kolejności w
pamięci programu słowo po słowie.
Składnia:
[
Etykieta:
]
DW
ciąg_danych_16-
bitowych_oddzielonych_przecinkami
Przykład:
DW 1532h,12,Stała,'a','bs'
Po ostatnim elemencie ciągu nie powinno być przecinka.
Wystąpienie etykiety nie jest wymagane.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (20)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (20)
Dyrektywy
DS
(
DATA SEGMENT
– segment danych)- Rezerwuje
wyspecyfikowaną ilość danych w pamięci programu.
Składnia:
[
Etykieta:
]
DS
Rozmiar
Przykład:
Bufor DS 15
DS 10
Rozmiar segmentu danych jest wyrażeniem, na które
mogą składać się liczby, stałe lub kody znaków
ujętych w cudzysłów. Etykieta nie jest wymagana.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (21)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (21)
Dyrektywy
BIT-
Służy do deklarowania nazw stałych.
Składnia:
nazwa
BIT
wyrażenie
Przykład:
Stała BIT P3.6
Argumentami wyrażenia mogą być liczby, wcześniej
deklarowane stałe lub kody znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (22)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (22)
Dyrektywy
ORG
- Określa adres początku segmentu
rozkazów lub danych w pamięci programu.
Składnia:
ORG
Wyrażenie
Przykład:
ORG 1Bh
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (23)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (23)
Dyrektywy
DSEG AT
(
DATA SEGMENT
-segment danych)-
Określa adres początku segmentu danych w
pamięci programu.
Składnia:
DSEG AT
Wyrażenie
Przykład:
DSEG AT 0F000h
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (24)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (24)
Dyrektywy
CSEG AT
(
CODE SEGMENT
-segment rozkazów)
Określa adres początku segmentu rozkazów w
pamięci programu.
Składnia:
CSEG AT
Wyrażenie
Przykład:
CSEG AT 0Bh
Argumentami wyrażenia mogą być liczby, stałe
lub kody znaków ujęte w apostrofy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (25)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (25)
Dyrektywy
MACRO
- Rozpoczyna zapis makroinstrukcji.
Przykład:
Dziel MACRO
Mov A,R0
Mov B,R1
Div AB
ENDM
Każde wywołanie nazwy makroinstrukcji powoduje
wstawienie kodu rozkazów w niej umieszczonych.
Wywołanie makroinstrukcji może wystąpić dopiero po jej
deklaracji.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (26)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (26)
Dyrektywy
MACRO argumenty
- Rozpoczyna zapis makroinstrukcji.
Przykład:
Dziel MACRO lbA, lbB
Mov A,lbA
Mov B,lbB
Div AB
ENDM
Każde wywołanie nazwy makroinstrukcji powoduje
wstawienie kodu rozkazów w niej umieszczonych z
aktualnymi wartościami argumentów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (27)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (27)
Dyrektywy
ENDM
- Kończy zapis makroinstrukcji.
Przykład:
Dziel MACRO
Mov A,R0
Mov B,R1
Div AB
ENDM
Każde wywołanie nazwy makroinstrukcji powoduje
wstawienie kodu rozkazów w niej umieszczonych.
Wywołanie makroinstrukcji może wystąpić dopiero po jej
deklaracji.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (28)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (28)
Dyrektywy
END
(koniec)- Kończy zapis programu, wszystkie
występujące po niej znaki i rozkazy są
ignorowane.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (29)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (29)
Dyrektywy
USING
- Zmienia aktualny bank rejestrów.
Składnia:
USING
Nr_banku_rejestrów
Przykład:
USING 3
Mov A,AR0
USING 1
Mov AR1, A
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (30)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (30)
Dyrektywy
USING cd...
Aby informacja o numerze banku została uwzględniona należy
posługiwać się symbolami AR0..AR7, zamiast R0..R7. Metoda ta
pozwala posługiwać się rejestrami z banków 0..3 bez zmiany słowa
stanu programu PSW. Odbywa się to jednak kosztem wydłużenia
kodu programu, gdyż w rzeczywistości powoduje jedynie
wprowadzenie 8 stałych AR0..AR7, których wartość obliczana jest na
podstawie bieżącego Nr_banku_rejestrów. Bank rejestrów można
również zmieniać przez modyfikację bitów RS1 i RS0 słowa stanu
programu PSW.
RS1.RS0=00 - bank 0, adresy 0..7
RS1.RS0=01 - bank 1, adresy 8..15
RS1.RS0=10 - bank 2, adresy 16..23
RS1.RS0=11 - bank 3, adresy 24..31
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (31)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (31)
Funkcje
AND
- Zwraca iloczyn logiczny wskazanych
argumentów.
Składnia:
Argument1
AND
argument2
Przykład:
Mov A,#137 AND 0Fh
Argumentami mogą być liczby, stałe lub kody
znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (32)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (32)
Funkcje
OR
- Zwraca sumę logiczną wskazanych
argumentów.
Składnia:
Argument1
OR
argument2
Przykład:
Mov A,#137 OR 4
Argumentami mogą być liczby, stałe lub kody
znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (33)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (33)
Funkcje
XOR
- Zwraca sumę modulo 2 wskazanych
argumentów.
Składnia:
Argument1
XOR
argument2
Przykład:
Mov A,#137 XOR 4
Argumentami mogą być liczby, stałe lub kody
znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (34)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (34)
Funkcje
MOD
- Zwraca resztę modulo 2 wskazanych
argumentów.
Składnia:
argument1
MOD
argument2
Przykład:
Mov A, #137 MOD 4
Argumentami mogą być liczby, stałe lub kody
znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (35)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (35)
Funkcje
HIGH
(
HIGH BYTE
- starszy bajt)- Zwraca
Starszy bajt wyrażenia.
Składnia:
HIGH
(
wyrażenie
)
Przykład:
Inc HIGH(1235h)
Argumentami mogą być liczby, stałe lub
kody znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (36)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (36)
Funkcje
LOW
(
LOW BYTE
- młodszy bajt)- Zwraca
młodszy bajt wyrażenia.
Składnia:
LOW
(
wyrażenie
)
Przykład:
Inc LOW(1235h)
Argumentami mogą być liczby, stałe lub kody
znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (37)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (37)
Funkcje
SHL
(
SHIFT LEFT
- przesuń w lewo)- Zwraca liczbę
będącą przesunięciem binarnej reprezentacji o
licznik pozycji w lewo.
Składnia:
argument
SHL
licznik
Przykład:
Mov A, #1 SHL 4
Argument i licznik mogą być liczbami, stałymi lub
kodami znaków ujętych w cudzysłów. Funkcja ma
sens dla licznika < 16.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (38)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (38)
Operatory
#
- w mnemoniku poprzedza argument
bezpośredni.
Przykład:
Mov A,#5; A 5
Mov A, 5; A (5)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (39)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (39)
Operatory
@
- w mnemoniku poprzedza adres
pośredni.
Przykład:
Mov A,@R0; A (R0)
Mov A, R0; A R0
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (40)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (40)
Operatory
+
- w wyrażeniu oznacza funkcję sumy
arytmetycznej wskazanych argumentów.
Składnia:
argument1
+
argument2
Przykład:
Mov A,#137 + 4
Argumentami mogą być liczby, stałe lub
kody znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (41)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (41)
Operatory
-
- w wyrażeniu oznacza funkcję różnicy
arytmetycznej wskazanych argumentów.
Składnia:
argument1
-
argument2
Przykład:
Mov A,#137 - 4
Argumentami mogą być liczby, stałe lub kody
znaków ujętych w cudzysłów. Przed stałą lub
etykietą traktowany jest jako zmiana znaku.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (42)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (42)
Operatory
*
- w wyrażeniu oznacza funkcję mnożenia
wskazanych argumentów.
Składnia:
argument1
*
argument2
Przykład:
Mov A,#13 * 4
Argumentami mogą być liczby, stałe lub
kody znaków ujętych w cudzysłów.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (43)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (43)
Operatory
/
- w wyrażeniu oznacza funkcję dzielenia
wskazanych argumentów.
Składnia:
argument1
/
argument2
Przykład:
Mov A,#13 / 4
Argumentami mogą być liczby, stałe lub kody
znaków ujętych w cudzysłów. W rozkazach ANL
C/bit i ORL C/bit oznacza negację wskazanego
bitu.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (44)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (44)
Operatory
$
- interpretowany jest jako bieżący adres.
Składnia:
Rozkaz_Skoku
$
lub
Nazwa
EQU
$
Przykład:
JMP $;skok pod ten sam adres - pętla
Stała1 EQU $;przypisz Stałej1 bieżący
adres
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (45)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (45)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (46)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Elementy języka (46)
Operatory
Priorytet
Uwagi
@, #
najwyższ
y
adres pośredni,
argument bezpośredni
-
wyższy
minus przed
argumentem
*, /, or, and,
xor, mod, shl,
shr
niższy
+, -
najniższy
dodawanie i
odejmowanie
Rejestry SFR (Specjal function registers)
A
- (
ACCUMLATOR
- akumulator)
Akumulator jest rejestrem współpracującym z
jednostką arytmetyczno-logiczną (ARYTHMETIC-
LOGIC UNIT). Z niego jest pobierany argument i do
niego wpisywany jest wynik większości operacji.
Odgrywa kluczową rolę w rozkazach
MOVC
i
JMP
.
Istnieją dwa sposoby dostępu programowego do
akumulatora:
- za pomocą nazwy A, np. MOV A,#5,
- za pomocą nazwy rejestru specjalnego
adresowanego bezpośrednio
ACC
, np. PUSH ACC.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(1)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(1)
Rejestry SFR (Specjal function
registers)
B
- Wykorzystywany jest przy operacji
mnożenia
MUL
i dzielenia
DIV
.
Poza tym może być wykorzystywany jako
rejestr uniwersalny.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(2)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(2)
Rejestry SFR (Specjal function
registers)
C
- (
CARRY FLAG
- wskaźnik przeniesienia)
Bit CY słowa stanu PSW. Wpisywane
jest do niego przeniesienie z najbardziej
znaczącego bitu.
Jest ustawiany podczas wykonywania
operacji arytmetycznych oraz przesunięć.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(3)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(3)
Rejestry SFR (Specjal function
registers)
DPTR
- (
DATA POINTER
- wskaźnik
danych)
16-bitowy wskaźnik danych składający
się z dwóch rejestrów DPH (starszy) i DPL
(młodszy).
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(4)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(4)
Rejestry SFR (Specjal function
registers)
PC
- (
PROGRAM COUNTER
- licznik
rozkazów)
16-bitowy licznik określający adres
pobieranej komórki pamięci programu.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(5)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(5)
Rejestry SFR (Specjal function
registers)
R0..R7
- Mogą być argumentami
rozkazów wykorzystujących adresowanie
przez nazwę rejestru. Mogą również służyć
do adresowania pośredniego.
Przykład:
MOV Rn,A; Rr A
MOV @Ri,A; (Ri) A
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(6)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Zasoby mikrokontrolera(6)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku *.HEX firmy INTEL
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku *.HEX firmy INTEL
: DD AAAA TR
DANE
SK
początek rekordu (1
znak)
długość rekordu (2
znaki)
adres początku rekordu (4
znaki)
typ rekordu (2 znaki):
00 - Data record
01 - End of file record
02 - Extended segment address
record
03 - Start segment address
record
04 - Extended linear address
record
05 - Start linear address record
zawartość rekordu (DD
znaków)
suma kontrolna (suma
wszystkich bajtów i znaków
sumy kontrolnej = 0)
Ostatni wiersz pliku ma znaczenie specjalne
i ma zawsze poniższą postać:
:00000001FF
.
Wszystkie dane rekordu są w kodzie
heksadecymalnym.
Normalnie każda strona listingu zaczyna się nagłówkiem o
treści:
ASEM-51 V1.3 Copyright (c) 2002 by W.W.Heinz PAGE 1
dodatkowo tylko na pierwszej stronie dopisywany jest
nagłówek:
MCS-51 Family Macro Assembler A S E M - 5 1 V 1.3
=====================================================
Source File: demo.a51
Object File: demo.hex
List File: demo.lst
Informuje on o rodzaju asemblera oraz pliku źródłowym,
którego listing dotyczy.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(1)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(1)
Wygląd strony listingu można określić
odpowiednimi dyrektywami asemblera:
$NOPAGING
– nie dzieli listingu na strony,
$PAGING
– dziel listing na strony (domyślnie włączony),
$PAGELENGTH (n)
– długość strony listingu w liniach
(n ilość linii; 12 >= n <= 65535 domyślnie n=64),
$PAGEWIDTH (n)
– szerokość linii listingu w znakach
( n ilość znaków w linii; 72 >= n <= 255 domyślnie
n=132),
$LIST
– włącza generowanie pliku listingu (domyślnie),
$NOLIST
– zapobiega generowaniu pliku z listingiem.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(2)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(2)
Pozostałe linie listingu pogrupowane są w
kolumny:
-
LINE; określa numer linii w pliku źródłowym,
-
I; informuje, że linia należy do pliku
dołączonego lub makra,
-
ADDR; określa adres w aktywnym segmencie,
-
CODE; określa kod rozkazu z bieżącej linii,
-
SOURCE; zawiera postać źródłową programu.
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(3)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(3)
Line I Addr Code Source
1: ;A sample List File Demo Program
2: ;-------------------------------
3: $NOMOD51 ;no 8051 SFR
4: N 004F $PAGEWIDTH (79) ;79 columns per
line
5: $NOTABS ;expand tabs
6: N 90 P1 DATA 090H ;port 1 address
7: B 93 INPUT BIT P1.3 ;pulse input
8:
9: N 8000 ORG 08000H ;set location
counter
10: 8000 80 20 SJMP START ;jump to start
address
11:
12: 8002 01 07 DB 1,7 ;define bytes
13: 8004 00 02 00 0C DW 2,12,9 ;define words
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(4)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(4)
Przykład sygnalizowania błędu w programie:
17: 8022 75 30 00 START: MOV COUNT,#0 ;reset counter
18: 8025 30 93 FD LLEVEL: JNB INPUT,LLEVEL ;wait for high
19: 8028 20 93 00 HLEVEL: JB INPUT,HLEUEL ;wait for low
^
@@@@@ symbol not defined @@@@@
20: 802B 05 30 INC COUNT ;count pulse
21: 802D 80 F6 JMP LLEVEL ;next pulse
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(5)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(5)
Po wylistowaniu wszystkich linii i ewentualnym poinformowaniu o
błędach listowana jest tabela symboli w postaci ( jeśli nie chcemy aby
była ona tworzona należy użyć dyrektywy $NOSYMBOLS):
L I S T O F S Y M B O L S
=============================
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
AKKUM REGISTER A 38
COUNT DATA 30 47
HLEVEL CODE 802E 35
INPUT BIT 93 12
LLEVEL CODE 802B 34
MY_PROGRAM MODULE 14
P1 DATA 90
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(6)
ASEMBLER
MIKROKONTROLERÓW RODZINY
MCS-51
Format pliku z listingiem programu(6)