Programowanie mikrokontrolerów (CISC) Repertuar instrukcji
Transkrypt
Programowanie mikrokontrolerów (CISC) Repertuar instrukcji
MIKROPROCESORY – architektura i programowanie Piotr MALECKI Programowanie mikrokontrolerów (CISC) Repertuar instrukcji ● Operacje arytmetyczne ● Operacje logiczne ● Operacje logiczne na bitach ● Przesyłanie danych ● Operacje sterujące (skoki) ● NOTACJA: Rr direct @Ri bit #data #data16 addr16 addr11 rel – - rejestry R0 ... R7 wewnętrzny RAM oraz SFR adres pośredni R0 lub R1 bity adresowalne RAM lub SFR stała 8-bitowa stała 16-bitowa adres w 64k adres w stronie 2k adres względny -128 ... +127 /bit - negacja bitu 1/7 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Programowanie mikrokontrolerów (CISC) TRYBY ADRESOWANIA Adresowanie zapewnione sprzętowo ● bezpośrednie ● względne ● pośrednie (za pomocą rejestrów R0 lub R1) Adresowanie zapewnione przez asemblery ● adresowanie symboliczne ● definicje bloków 2/7 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Programowanie mikrokontrolerów (CISC) OPERACJE ARYTMETYCZNE kod Dodaj A <- A + Dodaj A <- A + + C Odejmij A <- A - - C Zwiększ o jeden Zmniejsz o jeden Mnóż A*B Dziel A/B Poprawka dziasiętna ADD ADDC SUBB INC DEC MUL DIV DA dozwolone adresowanie A,Rr A,direct A,Rr A,direct A,Rr A,direct A Rr A Rr (wynik: A – low B– ( A – wynik B– A,@Ri A,@Ri A,@Ri direct direct high ) reszta ) A,data A,data A,data @Ri @Ri DPTR Rozkazy mnożenia i dzielenia zajmują 4 cykle maszynowe Rozkaz INC adresujący DPTR zajmuje 2 cykle maszynowe Pozostałe operacje arytmetyczne wykonywane są w jednym cyklu maszynowym 3/7 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Programowanie mikrokontrolerów (CISC) OPERACJE LOGICZNE kod Iloczyn logiczny AND Suma logiczna OR Suma modulo 2 XOR Zerowanie Negacja Obrót w lewo Obrót w prawo Obrót w lewo przez C Obrót w prawo przez C Zamień 4 bity (hi<-->lo) ANL ORL XRL CLR CPL RL RR RLC RRC SWAP dozwolone adresowanie A,Rr A,Rr A,Rr A A A A A A A A,direct A,@Ri A,direct A,@Ri A,direct A,@Ri A,#data direct,A direct,#data A,#data direct,A direct,#data A,#data direct,A direct,#data Rozkazy z adresowaniem '' direct,#data '' zajmują dwa cykle maszynowe. Pozostałe operacje logiczne wykonywane są w jednym cyklu maszynowym. 4/7 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Programowanie mikrokontrolerów (CISC) OPERACJE LOGICZNE NA BITACH kod Zeruj Ustaw Neguj Iloczyn logiczny Suma logiczna Kopiuj CLR SETB CPL ANL ORL MOV dozwolone adresowanie C C C C,bit C,bit C,bit bit bit bit C,/bit C,/bit bit,C Rozkazy ANL i ORL oraz MOV z adresowaniem '' bit,C '' zajmują dwa cykle maszynowe. Pozostałe operacje logiczne wykonywane są w jednym cyklu maszynowym. 5/7 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Programowanie mikrokontrolerów (CISC) PRZESYŁANIE DANYCH kod Kopiuj A <- Kopiuj Rr <- Kopiuj direct <- Kopiuj @Ri <- Kopiuj DPTR <- Pamięć programu Zewn. pamięć danych Zamień Zamień 4 młodsze bity Zapisz na stos Odczytaj ze stosu MOV MOV MOV MOV MOV MOVC MOVX XCH XCHD PUSH POP dozwolone adresowanie A,Rr A,direct A,@Ri Rr,direct direct,direct direct,@Ri @Ri,direct Rr,A direct,A direct,Rr @Ri,A DPTR,#data16 A,@A+DPTR A,@A+PC A,@Ri A,@DPTR @Ri,A @DPTR,A A,Rr A,direct A,@Ri A,@Ri direct (SP=SP+1 (SP) <- direct) direct (direct <- (SP) SP=SP-1) A,#data Rr,#data direct,#data @Ri,#data Rozkazy PUSH, POP, MOVC, MOVX oraz znaczna część MOV zajmują dwa cykle maszynowe. 6/7 MIKROPROCESORY – architektura i programowanie Piotr MALECKI Programowanie mikrokontrolerów (CISC) OPERACJE STERUJĄCE (SKOKI) Podprogramy Skoki warunkowe Skoki warunkowe od bitu LCALL addr16 ACALL addr11 RET RETI LJMP addr16 AJMP addr11 SJMP rel JMP @A+DPTR JZ, JNZ, JC, JNC rel (odpowiednio dla ACC=0, ACC≠0, C=1, C=0) JB, JNB, JBC bit,rel (odpowiednio, gdy bit=1, bit=0, bit=1 i zeruj) Porównaj, skocz jeśli ≠ Zmniejsz, skocz jeśli ≠ 0 CJNE DJNZ Niczego nie rób NOP Skoki bezwarunkowe A,direct,rel Rr,rel A,#data,rel direct,rel Rr,#data,rel @Ri,#data,rel Wszystkie skoki zajmują dwa cykle maszynowe. Operacja NOP nie robi niczego i zajmuje jej to jeden cykl maszynowy!. 7/7