Asembler dla MCS-51.pptx
- Количество слайдов: 61
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 ü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), Win 32 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.
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (1) 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 (2) Przykład użycia symboli HERE: MOV A, #0 FFH ; definicja etykiety HERE i załadowanie do akumulatora wartości 255. YEAR EQU 2005 ; definicja symbolu o wartości bieżącego roku $INCLUDE (80 C 535. MCU) ; dołącz definicje dla procesora 535.
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (3) 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: Led 1 BIT P 3. 2 SETB Led 1 CLR Led 1
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (4) 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, R 7 Pętla: Jmp $ Cjne A, #99, Petla
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (5) 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 (6) 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 (7) 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 (8) 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 (9) 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 1532 h, 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 (10) 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 (11) Dyrektywy BIT- Służy do deklarowania nazw stałych. Składnia: nazwa BIT wyrażenie Przykład: Stała BIT P 3. 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 (12) 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 (13) Dyrektywy ORG- Określa adres początku segmentu rozkazów lub danych w pamięci programu. Składnia: ORG Wyrażenie Przykład: ORG 1 Bh 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) 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 0 F 000 h 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) 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 0 Bh 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) 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 3 Fh 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) 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 12 h 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 (18) 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 (19) 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 (20) 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 1532 h, 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 (21) 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 (22) Dyrektywy BIT- Służy do deklarowania nazw stałych. Składnia: nazwa BIT wyrażenie Przykład: Stała BIT P 3. 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 (23) Dyrektywy ORG- Określa adres początku segmentu rozkazów lub danych w pamięci programu. Składnia: ORG Wyrażenie Przykład: ORG 1 Bh 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) 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 0 F 000 h 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) 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 0 Bh 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 (26) Dyrektywy MACRO- Rozpoczyna zapis makroinstrukcji. Przykład: Dziel MACRO Mov A, R 0 Mov B, R 1 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 (27) Dyrektywy MACRO argumenty- Rozpoczyna zapis makroinstrukcji. Przykład: Dziel MACRO lb. A, lb. B Mov A, lb. A Mov B, lb. B 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 (28) Dyrektywy ENDM- Kończy zapis makroinstrukcji. Przykład: Dziel MACRO Mov A, R 0 Mov B, R 1 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 (29) 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 (30) Dyrektywy USING- Zmienia aktualny bank rejestrów. Składnia: USING Nr_banku_rejestrów Przykład: USING 3 Mov A, AR 0 USING 1 Mov AR 1, A
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (31) Dyrektywy USING cd. . . Aby informacja o numerze banku została uwzględniona należy posługiwać się symbolami AR 0. . AR 7, zamiast R 0. . R 7. 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 AR 0. . AR 7, 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 RS 1 i RS 0 słowa stanu programu PSW. RS 1. RS 0=00 - bank 0, adresy 0. . 7 RS 1. RS 0=01 - bank 1, adresy 8. . 15 RS 1. RS 0=10 - bank 2, adresy 16. . 23 RS 1. RS 0=11 - bank 3, adresy 24. . 31
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (32) Funkcje AND- Zwraca iloczyn logiczny wskazanych argumentów. Składnia: Argument 1 AND argument 2 Przykład: Mov A, #137 AND 0 Fh 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) Funkcje OR- Zwraca sumę logiczną wskazanych argumentów. Składnia: Argument 1 OR argument 2 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 (34) Funkcje XOR- Zwraca sumę modulo 2 wskazanych argumentów. Składnia: Argument 1 XOR argument 2 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 (35) Funkcje MOD- Zwraca resztę modulo 2 wskazanych argumentów. Składnia: argument 1 MOD argument 2 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 (36) Funkcje HIGH (HIGH BYTE- starszy bajt)- Zwraca Starszy bajt wyrażenia. Składnia: HIGH (wyrażenie) Przykład: Inc HIGH(1235 h) 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) Funkcje LOW (LOW BYTE- młodszy bajt)- Zwraca młodszy bajt wyrażenia. Składnia: LOW (wyrażenie) Przykład: Inc LOW(1235 h) Argumentami mogą być liczby, stałe lub kody znaków ujętych w cudzysłów.
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (38) 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 (39) Operatory #- w mnemoniku poprzedza argument bezpośredni. Przykład: Mov A, #5; A b Mov A, 5; A b 5 (5)
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (40) Operatory @- w mnemoniku poprzedza adres pośredni. Przykład: Mov A, @R 0; A b Mov A, R 0; A b (R 0) R 0
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (41) Operatory +- w wyrażeniu oznacza funkcję sumy arytmetycznej wskazanych argumentów. Składnia: argument 1 + argument 2 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 (42) Operatory -- w wyrażeniu oznacza funkcję różnicy arytmetycznej wskazanych argumentów. Składnia: argument 1 - argument 2 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 (43) Operatory *- w wyrażeniu oznacza funkcję mnożenia wskazanych argumentów. Składnia: argument 1 * argument 2 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 (44) Operatory /- w wyrażeniu oznacza funkcję dzielenia wskazanych argumentów. Składnia: argument 1 / argument 2 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 (45) Operatory $- interpretowany jest jako bieżący adres. Składnia: lub Rozkaz_Skoku $ Nazwa EQU $ Przykład: JMP $; skok pod ten sam adres - pętla Stała 1 EQU $; przypisz Stałej 1 bieżący adres
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Elementy języka (46) Operatory @, # - *, /, or, and, xor, mod, shl, shr +, - Priorytet Uwagi najwyższy adres pośredni, argument bezpośredni wyższy minus przed argumentem niższy najniższy dodawanie i odejmowanie
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Zasoby mikrokontrolera(1) Rejestry SFR (Specjal function registers) A- (ACCUMLATOR- akumulator) Akumulator jest rejestrem współpracującym z jednostką arytmetyczno-logiczną (ARYTHMETICLOGIC 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(2) 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(3) 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(4) 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(5) 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(6) Rejestry SFR (Specjal function registers) R 0. . R 7 - 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 Format pliku *. HEX firmy INTEL : DD AAAA TR DANE SK Ostatni wiersz pliku ma znaczenie specjalne i ma zawsze typ rekordu (2 znaki): 00 - Data record poniższą postać: : 00000001 FF. początek rekordu (1 zawartośćrekordu wszystkich bajtów i długość rekordu- są w kodzie(4 znaki) rekorduznak) ofrekordu heksadecymalnym. adres 01(2 End (suma (DD znaków) znaki) kontrolna Wszystkie dane sumapoczątku file record 02 Extended segment address record znaków-sumy kontrolnej = 0) 03 - Start segment address record 04 - Extended linear address record 05 - Start linear address record
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Format pliku z listingiem programu(1) Normalnie każda strona listingu zaczyna się nagłówkiem o treści: ASEM-51 V 1. 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. a 51 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(2) 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(3) 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(4) Line I Addr Code Source 1: ; A sample List File Demo Program 2: ; --------------- 3: $NOMOD 51 ; no 8051 SFR 4: N 004 F $PAGEWIDTH (79) ; 79 columns per line 5: $NOTABS ; expand tabs 6: N 90 P 1 DATA 090 H ; port 1 address 7: B 93 INPUT BIT P 1. 3 ; pulse input 8: 9: N 8000 ORG 08000 H ; 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 0 C DW 2, 12, 9 ; define words
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Format pliku z listingiem programu(5) 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: 802 B 05 30 INC COUNT ; count pulse 21: 802 D 80 F 6 JMP LLEVEL ; next pulse
ASEMBLER MIKROKONTROLERÓW RODZINY MCS-51 Format pliku z listingiem programu(6) 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 802 E 35 INPUT BIT 93 12 LLEVEL CODE 802 B 34 MY_PROGRAM MODULE 14 P 1 DATA 90
Asembler dla MCS-51.pptx