3. Ifistrukcje arytmetyczne 47
INC argument Incremcnt
Działanie: Adresowanie: |
Mnemonik: |
A <= A 1 Rn c= Rn ♦ 1 (adr) c= (adr) ♦ 1 (Ri) <= (Ri) ♦ 1 DPTR DPTR + 1 Struktura bajtów: |
Cykle maszynowe |
Znacz niki: | |||
rejestrowe: |
INC |
A |
o c o |
0 | 0 |
1 0 0 | |
1 |
P |
rejestrowe: |
INC |
Rn |
i 0 0 0 |
i_l_L |
r r r | |
1 |
- |
bezpośrednie: |
INC |
adr |
| 0 0 0 |
0 | 0 |
1 0 1 | • |
1 |
- |
C |
adr |
1 | |||||
pośrednie: |
INC |
@Ri |
0 0 0 |
0 0 |
liii |
1 |
- |
rejestrowe: |
INC |
DPTR |
| 1 0 I |
0 0 |
0 1 1 | |
2 |
• |
Opis działania: |
Zwiększenie o jeden zmiennej zawartej w:
• akumulatorze (A)
• rejestrze Rn, Rn=R0..R7,
• komórce wewnętrznej pamięci RAM adresowanej bezpośrednio adresem adr
• komórce wewnętrznej pamięci RAM adresowanej pośrednio rejestrem Ri,
Ri = RO lub Rl.
• wskaźnikowym rejestrze danych (DPTR); zwiększanie o jeden wykonywane jest w dwóch etapach;
-♦ jako pierwsza zwiększana jest o jeden mniej znaczaca część rejestru DPTR (rejestr DPL),
-* jeśli wystąpiło przeniesienie to zwiększana jest o jeden bardziej znacząca część rejestru DPTR (rejestr DPH).
Instrukcja INC DPTR jest jedyną 16-bitową instrukcją arytmetyczną
Przykład 1:
Zwiększenie o jeden zawartości 8-bitowego rejestru lub komórki pamięci wykonywane jest modulo 6 bitów:
MiWnlrnnfrnlM IMWCłt I
maszynowego (instrukcje 1-bajtowe i 2-bajtowe), a jedynie rozkazy typu ANL <bajt>,#dana wymagają 2 cykli maszynowych (także ORL <bajt>,tfdana i XRL <bajt>,#dana). Na uwagę zasługuje fakt, że w procesorach rodziny MCS51 możliwe jest manipulowanie bitami portów. Przykładowo negację linii wyjściowych portu PI otrzymuje się wykonując rozkaz:
Tak efektywne działanie wynika ze specyficznej budowy wewnętrznej wszystkich portów i odzwierciedlenia zawartości portów w przestrzeni rejestrów specjalnych (SFR).
Instrukcję CLR A można zaliczyć zarówno do instrukcji logicznych, kasowania wszystkich bitów akumulatora, jak i do instrukcji wymiany danych, z wpisem do akumulatora wartości zerowej. Rozkaz CPL A realizuje standardową funkcję negacji logicznej.
Ostatnią grupę tworzą instrukcje przesuwające w lewo, w prawo i zamieniające wzajemnie obłe tetrady akumulatora. Przesuwanie zawartość akumulatora w lewo równoznaczne jest operacji mnożenia, a przesuwanie w prawo operacji dzielenia binarnego. Jeżeli stan akumulatora równy jest A=0001 00008 ■ 10H, to wykonanie rozkazów:
CRl. C • ,Cc=0
RI.C A .zawartość akumulatora przesuń logicznie
, ;w lewo o jedną pozycję
spowodujcie w akumulatorze pojawi się wartość A«=0010 0000B=20H. co odpowiada pomnożeniu zawartość akumulatora przez 2. Przyjmując założenia jak poprzednio i wykonując rozkazy:
CRL ,-C c= 0
RRC A .zawartość akumulatora przesuń logicznie
;w prawo o jedną pozyqę
uzyskamy zawartość akumulatora równą A = 0000 1000B = 08H. Jest to równoznaczne i podzieleniem zawartość akumulatora przez 2. W obu przykładach zastosowano instrukcję CRL C mającą na celu zerowanie znacznika przeniesienia C. Przesuwaniu w lewo i w prawo towarzyszy wpisywanie na najmniej znaczący bit Aq lub na najbardziej znaczący bit akumulatora A7 wartość zerowej. Taki sposób postępowania możliwy jest jedynie w operacjach dzielenia binarnego liczb całkowitych bez znaku lub dodatnich lic/b całkowitych (najbardziej znaczący bit akumulatora ma wartość zerową, A7=0). Dla ujemnych liczb całkowitych, dla których najbardziej znaczący bit akumulatora ma wartość A7=l. wyniki są różne od oczekiwanych. Wykonanie przesunięcia dla liczby ujemnej, na przykład wartość -128=80H, prowadzi do sytuacji:
MOV A.08OH ;A c= 80H » -128D, liczba ujemna A7«l
CRL C ,-Ccfl
RRC A ;zawartość akumulatora przesuń logicznie
;w prawo o jedną połycję