5 Instrukcje aryimctyczni e
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ęd RAM adresowanej pośrednio rejestrem Ri,
R1 - 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 jcśU 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).
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
MOV A.31H
CLR C SUBB A,@R1 MOV @R1,A
;R1 <= 41H adresuje mniej znacząc)'
; bajt drugiej zmiennej
;A c= (31H), przesłanie mniej znaczącego
; bajtu pierwszej zmiennej
,<I c= 0, zerowanie znacznika przeniesienia C
DEC Rl
MOV A,30H
;(Rl) <= A. przesłanie mniej znaczącego bajtu
; różnicy
;R1 <= Rl -1, KI = 40H
SUBB A,®R1 MOV ®Rl.A
A c= (3011), przesłanie bardziej znaczącego bajtu pierwszej zmiennej
' r
;A<= A-C-(Rl)
;(Rl) <= A. przesłanie bardziej znaczącego bajtu
; różnicy
Instrukcji DA A nie stosuje się przy odejmowaniu liczb zapisanych w kodzie BCD. nie może być również stosowana do bezpośredniej zamiany kodu liczby z szestnas-v-t j tkowego na BCD.
Przykiad:
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 ;A <= R3
ADD A.R4 ;A <= A ♦ R4
i ;R3 - 38H - 0011 1000B
;• _ ;R4. - 86H - 1000 0110B
.*//.• ; A - 0BEH = 1011 HIOB C-O.AC-O
• •• • ' DA A ;korekcja dziesiętna,
; . ponieważ A3..A0 > 9 to A <= A + 6
; 6H =» 0000 011 OB
;korekcja dziesiętna,
;ponieważ A7..A4 > 9 to A c= A ♦ 60H ; A = 0C4H » 1100 0100B
; 60H « 0110 0000B
Ustawienie znacznika przeniesienia C » 1 po instrukcji korekcji dziesiętnej DA A świad-czy o przekroczeniu zakresu liczb 0..99. Znacznik wskazuje na brak w wyniku setek.
! Prawidłowy wynik dodawania po uwzględnieniu znacznika przeniesienia (C) wynosi
: : *•: * 124.
MilrroWonfrotrr 8fVC\5l . nrr>c>ramow>n<^