S Instrukcje arytmetyczne 49
Opis działania:
Odejmowanie od zawartości akumulatora (A) znacznika przeniesienia (O i zawartości:
• rejestru Rn, Rn«R7..R0,
• komórki wewnętrznej pamięci RAM adresowanej bezpośrednio adresem adr
• komórki wewnętrznej pamięci RAM adresowanej pośrednio rejestrem Ri.
Ri - RO lub Rl.
• 8 bitowej danej.
Wynik dodawania przesiany 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 (O sygnalizuje przekroczenie zakresu liczb całkowitych bez znaku (0..255), a znacznik nadmiaru OV przekroczenie zakresu liczb całkowitych ze znakiem (-128..+127).
Przykład:
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:
Subb_Dana_16: | |
MOV Rl,#4lH |
Rl <=41H |
MOV A.31H |
A c= (31H), |
CLR C |
Cc=0, |
SUBB A,@R1 |
A <= A - C - |
MOV @R1,A |
(Rl) <= A, |
DEC Rl |
Rl <= Rl -1 |
MOV A.30H |
A c= (3011), |
SUBB A,@Rl |
AcA-C- |
MOV ©R1,A |
(Rl)<= A, |
adresuje mniej znacząc)' bajt drugiej zmiennej przesłanie mniej znaczącego bajtu pierwszej zmiennej zerowanie znacznika przeniesienia C Rl)
przesłanie mniej znaczącego bajtu różnicy KI = 40H
przesłanie bardziej znaczącego bajtu pierwszej zmiennej [Rl)
przesłanie bardziej znaczącego bajtu różnicy
Instrukcji DA A nic stosuje się przy odejmowaniu liczb zapisanych w kodzie BCD, nie może być również stosowana do bezpośredniej zamiany kodu liczby z szestnas-tkowego na BCD.
Przykład :
Dodawanie dwóch liczb zapisanych w kodzie BCD znajdujących się w rejestrach R3 (wartość 38) i R4 (wartość 86):
Dod_BCD*.
MOV A,R3 ADD A,R4
DA A
;Ac=R3 ;A <= A + R4
;R3 » 38 H - 0011 1000B
;R4 - 86H ~ 1000 0110B
;A - 0BEH = 1011 1110B C-O.AC-O
;korekcja dziesiętna,
,-poniewai A3..A0 >9toAc=A + 6 ; A » 0BEH - 1011 1110B
; 6H =» 0000 0110B
;korekcja dziesiętna,
.ponieważ A7..A4 > 9 to A c= A + 60H ; A = 0C4H = 1100 0100B
; 60H = OHO 0000B
Ustawienie znacznika przeniesienia C = 1 po instrukcji korekcji dziesiętnej DA A świadczy o przekroczeniu zakresu liczb 0..99. Znacznik wskazuje na brak w wyniku setek. I Prawidłowy wynik dodawania po uwzględnieniu znacznika przeniesienia (C) wynosi ‘ 124.
MUrrnlrnnfroW - nr^c»r»mow>ni*»