92
10. Ar\tmetyka mikrokontrolerów
Znacznik C jest przeniesieniem między kolejnymi bajtami. Instrukcje, które wykonują takie operacje są następujące:
ADDC |
A,Rn |
;A <- A + C + Rn, |
Rn=R0.. R7 |
ADDC |
A,adr |
;A A + C + (adr) | |
ADDC |
A,@Ri |
;A <- A + C + (Ri), |
Ri=0,1 |
ADDC |
A,#dana |
;A <- A + C + dana |
Przy dodawaniu zawartości dwóch par rejestrów R4 (bajt mniej znaczący) i R5 oraz R6 (bajt mniej znaczący) i R7 program musi uwzględnić przeniesienie przy dodawaniu bardziej znaczących bajtów:
Suma R4R5 R6R7: | |||
MOV |
A,R4 |
A «- R4 | |
ADD |
A,R6 |
A <- A + R6, przeniesienie C zmienione przez sumę R4 + R6 | |
MOV |
R6,A |
R6 A, mniej znaczący bajt sumy | |
MOV |
A,R5 |
A <r- R5, rozkazy: MOV R6,A i MOV A,R5 nie zmieniają C | |
ADDC |
A,R7 |
A <— A + C + R7, przeniesienie C z poprzedniego dodawania | |
MOV |
R7,A |
R7 <— A, bardziej znaczący bajt sumy | |
j Instrukcje |
ADD |
i ADDC zmieniają cztery znaczniki w rejestrzf | |
1 statusowym PSW: |
C, AC, OV i P. |
W instrukcjach dodawania znajdują się także bardzo przydatne instrukcje dodawania 1, zwiększania o 1 (inkrementacji) zawartości rejestru lub komórki wewnętrznej pamięci RAM:
INC |
A |
;A 4- A +1 | |
INC |
Rn |
;Rn *- Rn +1 | |
INC |
adr |
;(adr) <- (adr) +1 | |
INC |
@Ri |
;(Ri) 4- (Ri) +1 |
oraz jedyna instrukcja arytmetyczna, w której argumentem jest zmieni# 16-bitowa, jaką jest wskaźnikowy rejestr danych DPTR:
INC DPTR ;DPTR DPTR +1
I Instrukcje INC nie zmieniają znaczników w rejestrze statusowym PSW, wyjątkiem znacznika P jeśli instrukcja zmienia stan akumulatora A.
Operacje odejmowania są mniej rozbudowane w stosunku do operacji dodawania. Występuje tylko jeden typ instrukcji SUBB, odejmowanie / uwzględnianiem znacznika przeniesienia C. Odejmowanie dwóch zmiennych, z których jedna znajduje się zawsze w akumulatorze A, wykonywane jest w następujący sposób:
SUBB |
A,Rn |
;A <- A - C - Rn, |
Rn-RO.. R7 |
SUBB |
A,adr |
;A <- A - C - (adr) | |
SUBB |
A,@Ri |
;A +- A - C - (Ri), |
Ri=0,1 |
SUBB |
A,#dana |
-;A <— A - C - dana |
Instrukcje SUBB mają wpływ na wrartość czterech znaczników w rejestrze statusowym PSW: C, AC, OV i P.
Znacznik przeniesienia C w operacjach odejmowania sygnalizuje pożyczkę (borrow). Odejmowanie zmiennych 1-bajtowych należy poprzedzić operacją kasowania znacznika przeniesienia C, np. stosując instrukcję CLR C.
Wynik odejmowania przesłany jest do akumulatora A. Znaczniki C, AC i OV przyjmują następujące wartości:
C = 1 jeśli odejmowanie bitu 7 odbyło się z pożyczką,
C = 0 jeśli warunek nie jest spełniony,
AC = 1 jeśli odejmowanie bitu 3 odbyło się z pożyczką,
AC = 0 jeśli warunek nie jest spełniony,
OV = 1 jeśli odejmowanie bitu 6 odbyło się z pożyczką i
odejmowanie bitu 7 odbyło się bez pożyczki lub
jeśli odejmowanie bitu 6 odbyło się bez pożyczki i
odejmowanie bitu 7 odbyło się z pożyczką, OV = 0 jeśli warunki nie są spełnione.
Znacznik przeniesienia C sygnalizuje przekroczenie zakresu liczb całkowitych bez znaku (0..255), a znacznik nadmiaru OV przekroczenie zakresu liczb całkowitych ze znakiem (-128..+127).
Poniższy przykład ilustruje odejmowanie dwóch zmiennych 2-bajtowych zawartych w komórkach pamięci RAM o adresach 30H i 40H. Różnica przesyłana jest w miejsce drugiej zmiennej. Obie wartości traktowane są jako liczby całkowite bez znaku: