5. Instrukcje arytmetyczne
47
INC argument
Increment
Działanie:
A <= A +1 Rn c= Rn + 1 (adr) <= (adr) +1 (Ri) <= (Ri) +1 DPTR <= DPTR + 1
Cykle Znacz-
maszynowe ni ki:
Adresowanie: Mnemonik: Struktura bajtów:
rejestrowe: |
INC |
A |
UL |
0 |
0 |
0 | 0 |
1 |
0 |
jJ |
1 |
P |
rejestrowe: |
INC |
Rn |
IX |
0 |
0 |
_oj_L |
r |
r |
T| |
1 |
- |
bezpośrednie: |
INC |
adr |
IZ |
0 |
0 |
0 | 0 |
1 |
0 |
'1 |
• 1 |
- |
adr | |||||||||||
pośrednie: |
INC |
@Ri |
0 |
0 |
0 |
0 | 0 |
1 |
1 |
i |
1 |
- |
rejestrowe: |
INC |
DPTR |
Ll |
0 |
1 |
0 | 0 |
0 |
1 |
_lI |
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ęd RAM adresowanej pośrednio rejestrem Ri,
Ri = RO lub R1.
• 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ęd wykonywane jest modulo 6 bitów:
6. Instrukcje logiczne
5o
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 bilami portów. Przykładowo negację linii wyjściowych portu PI otrzymuje się wykonując rozkaz:
XRL P1J0FFH ;P1 <= PI xor OFFH
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ści 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 OOOOB » 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=<X)10 OOOOB=20H. co odpowiada pomnożeniu zawartości akumulatora przez 2. Przyjmując założenia jak poprzednio i wykonując rozkazy:
CRL ,C <= 0
RRC A ;zawartość akumulatora przesuń logicznie
;w prawo o jedną pozyqę
uzyskamy zawartość akumulatora równą A = 0000 100GB = 08H. Jest to równoznaczne z. podzieleniem zawartości 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ści zerowej. Taki sposób postępowania możliwy jest jedynie w operacjach dzielenia binarnego liczb całkowitych bez znaku lub dodatnich liczb 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ści -128=80H, prowadzi do sytuacji:
MOV A.ffBOH ;A c= 80H » -128D, liczba ujemna Ay«l
CRL C ,-CcO
RRC A ;zawartość akumulatora przesuń logicznie
;w prawo o jedną pozycję