92 10. Arytmetyka mikrokontrolen
Znacznik C jest przeniesieniem między kolejnymi bajtami. Instrukcje, któr< 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 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 4- R5, rozkazy: ;MOV R6,A i MOV A,R5 nie zmieniają C |
ADDC |
A,R7 |
;A <- A + C + R7, przeniesienie C z poprzedniego dodawania j |
MOV |
R7,A |
;R7 <- A, bardziej znaczący bajt sumy |
Instrukcje |
ADD i |
ADDC zmieniają cztery znaczniki w rejestr# |
statusowyi |
m I*S W: C, AC, OV i P. M |
W instrukcjach dodawania znajdują się także bardzo przydatne instrukcje dodawania 1, zwiększania o 1 (inkrementacji) zawartości rejestru lub komórk wewnętrznej pamięci RAM:
INC |
A |
;A <- A +1 |
INC |
Rn |
;Rn <- Rn +1 |
INC |
adr |
;(adr) <- (adr) +1 |
INC |
@Ri |
;(Ri) <- (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 II |
Instrukcje INC nie zmieniają znaczników w rejestrze statusowym PSW/i 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 z 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 |
SUBB |
A,adr |
SUBB |
A,®Ri |
SUBB |
A,#dana |
;A <- A - C - Rn, Rn=R0 .. R7
;A A - C - (adr)
; A <- A - C - (Ri), Ri=0,1
-;A <— A - C - dana
Instrukcje SUBB mają wpływ na wartość czterech znaczników w rejestrze statusowym PS W: 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.
^nacznik przeniesienia C sygnalizuje przekroczenie zakresu liczb całkowitych 2naku (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 partych w komórkach pamięci RAM o adresach 30H i 40H. Różnica syłana jest w miejsce drugiej zmiennej. Obie wartości traktowane są jako lCz y całkowite bez znaku: