UKŁADY MIKROPORCESOROWE

 Mikrokontrolery

 Programowanie

Co to jest asembler?


Aby odpowiedzieć na to pytanie najpierw trzeba odpowiedzieć na pytanie, co to jest program dla mikrokontrolera. Program jest to ciąg instrukcji danego procesora wykonywanych jeden po drugim w określonej przez programistę kolejności. Ciąg ten zapisany w formie symbolicznej (czyli z użyciem symbolicznych nazw instrukcji) stworzony przez programistę nazywa się programem źródłowym. Ten sam program przetworzony przez kompilator do postaci kodów dla mikroprocesora nazywamy programem binarnym lub programem wykonywalnym. Ten podział spowodowany jest tym, że mikrokontrolery nie mogą wykonywać programów źródłowych, ponieważ oczekują one ciągu zer i jedynek będących kodami instrukcji. Z drugiej strony człowiek nie może poruszać się w programie binarnym, ponieważ jest on dla niego kompletnie nieczytelny. Stosowany do przetwarzania z zapisu źródłowego na postać binarną program jest kompilatorem, czyli programem tłumaczącym jedną postać na drugą. Dla uniknięcia problemów z interpretacją zapisów w programach stworzony jest specjalny język programowania. Takim językiem jest asembler (jako podstawowy i elementarny język programowania). Oprócz asemblera są stosowane inne języki programowania, wśród których największą popularnością cieszy się język C.
Język programowania należy uważać za sformalizowany system reguł służących do opisu czynności jakie ma wykonać program. Sformalizowanie oznacza jednoznaczne określenie składni języka i zdefiniowanie pewnego zbioru słow (w sensie wyrazów) o ściśle określonym znaczeniu.
W programie używa się symbolicznych nazw instrukcji, wskazuje się poprzez nazwy używane zmienne, miejsca w programie. Każda nazwa (nazwa instrukcji, nazwa zmiennej) występująca w programie musi być kompilatorowi nazwą znaną (przykładowo wszystkie nazwy zdefiniowane w opisie języka). Wprowadzenie przez programistę nowych nazw jest związane z jednoznacznym określeniem jej znaczenia. W pewnych sytuacjach użycie nowej nazwy musi być poprzedzone jej definicją, która informuje kompilator o jej znaczeniu (przykładem mogą być nazwy zdefiniowane dyrektywami .equ, .def ). W wielu przypadkach dopuszcza się używanie nowych nazw bez ich wcześniejszego określenia (jak nazw etykiet jako miejsc w programie), które muszą być określone w obrębie programu. Kompilator po napotkaniu końca programu źródłowego sprawdzi, czy wszystkie użyte w programie nazwy są jednoznacznie określone. Jednoznaczność oznacza, że nie może być przykładowo w programie umieszczona jakaś etykieta w dwóch różnych miejscach.
Proces kompilacji (tłumaczenia z przykładowo języka asemblera na postać akceptowaną przez mikrokontrolery) może przebiegać w różny sposób (jest kilka programów różnych producentów będących kompilatorem języka asembler). Kompilator dostarczony przez firmę ATMEL jest programem, który tłumaczy i linkuje program (linkowanie programu oznacza określenie adresów wszystkich elementów występujących w programie). Wynikiem działania tego kompilatora jest gotowy do uruchomienia program. W innych rozwiązaniach kompilatorów proces tłumaczenia i linkowania jest rozdzielony. Kompilator przetwarzając tekst programu generuje postać częściowo skompilowaną (postać, w której instrukcje są zamienione na odpowiednie kody ale występują jeszcze symboliczne odwołania do zmiennych lub procedur). W procesie tworzenia programu dla mikrokontrolera występuje dodatkowy składnik, jakim jest oddzielny program do linkowania. Linker składa wszystkie fragmenty częściowo skompilowane w jedną całość uzupełniając wszystkie wzajemne powiązania między występującymi jeszcze nazwami symbolicznymi.

Rozkazy w ASEMBLERZE

Operacje arytmetyczne

Dodaj A <-- A +  ADD A,Rr A,direct A,@Ri A,#data  
Dodaj A <-- A +  + C ADDC A,Rr A,direct A,@Ri A,#data  
Odejmij A <-- A +  - C SUBB A,Rr A,direct A,@Ri A,#data  
Zwiększ o jeden INC A Rr direct @Ri DPTR
Zmniejsz o jeden DEC A Rr direct @Ri  
Mnóż A • B MUL AB wynik: A-low B-high  
Dziel A / B DIV AB A-wynik B-reszta    
Poprawka dziesiętna DA A        

Operacje logiczne

Iloczyn logiczny AND ANL A,Rr A,direct A,@Ri A,#data direct,A direct,#data
Suma logiczna OR ORL A,Rr A,direct A,@Ri A,#data direct,A direct,#data
Suma modulo 2 XOR XRL A,Rr A,direct A,@Ri A,#data direct,A direct,#data
Zeruj CLR A
Neguj CPL A
Obrót w lewo RL A
Obrót w prawo RR A
Obrót przez C RLC A
Obrót przez C RRC A
Zamień 4 bity (hi <--> lo) SWAP A

Operacje logiczne na bitach

Zeruj CLR C bit
Ustaw SETB C bit
Neguj CPL C bit
Iloczyn logiczny ANL C,bit C,/bit
Suma logiczna ORL C,bit C,/bit
Kopiuj MOV C,bit bit,C

Przesyłanie danych

Kopiuj A<-- MOV   A,Rr A,direct A,@Ri A,#data
Kopiuj Rr<-- MOV Rr,A   Rr,direct   Rr,#data
Kopiuj direct<-- MOV direct,A direct,Rr direct,direct direct,@Ri direct,#data
Kopiuj @Ri<-- MOV @Ri,A   @Ri,direct   @Ri,#data
Kopiuj DPTR<-- MOV DPTR,#data16        
Pamięć programu MOVC A,@A+DPTR A,@A+PC      
Zewn. pamięć danych MOVX A,@Ri A,@DPTR @Ri,A @DPTR,A  
Zamień XCH A,Rr A,direct A,@Ri    
Zamień młodsze 4 bity XCHD A,@Ri        
Zapisz na stos PUSH direct SP = SP+1 (SP) <-- direct    
Odczytaj ze stosu POP direct direct<--(SP) SP = SP • 1    
 
ZST © 2005