Repertuar instrukcji Operacje arytmetyczne Operacje logiczne Operacje logiczne na bitach Przesyłanie danych Operacje sterujące (skoki) NOTACJA: Rr rejestry R0... R7 direct - wewnętrzny RAM oraz SFR @Ri - adres pośredni R0 lub R1 bit - bity adresowalne RAM lub SFR /bit - negacja bitu #data - stała 8-bitowa #data16 - stała 16-bitowa addr16 - adres w 64k addr11 - adres w stronie 2k rel - adres względny -128... +127 1/7
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
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 (wynik: A low B high ) Dziel A / B DIV ( A wynik B reszta ) Poprawka dziasiętna DA 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
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 Zerowanie CLR A Negacja CPL A Obrót w lewo RL A Obrót w prawo RR A Obrót w lewo przez C RLC A Obrót w prawo przez C RRC A Zamień 4 bity (hi<-->lo) SWAP A Rozkazy z adresowaniem '' direct,#data '' zajmują dwa cykle maszynowe. Pozostałe operacje logiczne wykonywane są w jednym cyklu maszynowym. 4/7
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 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
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ń 4 młodsze bity XCHD A,@Ri Zapisz na stos PUSH direct (SP=SP+1 (SP) <- direct) Odczytaj ze stosu POP direct (direct <- (SP) SP=SP-1) Rozkazy PUSH, POP, MOVC, MOVX oraz znaczna część MOV zajmują dwa cykle maszynowe. 6/7
OPERACJE STERUJĄCE (SKOKI) Podprogramy LCALL addr16 ACALL addr11 RET RETI Skoki bezwarunkowe LJMP addr16 AJMP addr11 SJMP rel JMP @A+DPTR Skoki warunkowe JZ, JNZ, JC, JNC rel (odpowiednio dla ACC=0, ACC 0, C=1, C=0) Skoki warunkowe od bitu JB, JNB, JBC bit,rel (odpowiednio, gdy bit=1, bit=0, bit=1 i zeruj) Porównaj, skocz jeśli CJNE A,direct,rel A,#data,rel Rr,#data,rel @Ri,#data,rel Zmniejsz, skocz jeśli 0 DJNZ Rr,rel direct,rel Niczego nie rób NOP Wszystkie skoki zajmują dwa cykle maszynowe. Operacja NOP nie robi niczego i zajmuje jej to jeden cykl maszynowy!. 7/7