6 Instrukcje logiczne 57
W akumulatorze znajduje się wartość 40H«*64D. a nie poprawna wartość 0CGH»-64D. Uwzględniając także ujemne liczby całkowite przytoczony program dzielenia binarnego należy zmodyfikować do postad: !
MOV A.lLiczba ;A c= Liczba » 80H =» -128D, liczba ujemna
MOV C.ACC.7 ,C c= A7,
;prześlij bit A7 do znacznika przeniesienia (O * RRC A ;A»OCOH»-64D
;zawartość akumulatora przesuń logicznie ;w prawo o jedną pozycję,
Stan akumulatora zgodny jest z oczekiwaniami.
Ostania przedstawiona w tabeli 6*1 instrukcja SWAP A związana jest z wymianą obu tctrad akumulatora, wymiana dokonywana jest między bitami A7.4 i A3 q. Przykład ilustruje wykorzystanie tej instrukcji przy zamianie liczby z postad binarnej na postać BCD i założeniu, że liczba dodatnia mieśa się w zakresie 0..99D, np.Liczba=»4CH»76D:
MOV A,#Liczba ;A e= zamieniana liczba w postad binarnej
MOV B,tflOD ;B c= 10D
A = 4CH ■ 0100 U00B B = 10D= 0000 101 OB
DIV AB
A c= lnt(A/B) » 0..9, dziesiątki,
B <= Mod(A/B) = 0..9, jednośa
A = 7 a 0000 0111B B = 6 = 0000 0110B
SWAP A
A7..4 » A3..0,
A7..4 c= dziesiątki, A3, o c= 0
ADD A,B
A-70H-0111 000GB A <= A ♦ B, dodanie jednośd do dziesiątek
W podanym poniżej pełnym zestawie instrukcji logicznych, w przykładach ilustrujących sposób wykorzystania instrukcji 'and', 'or i ’xor’ wprowadzono pojęae maski. Wykonywane operacje dotyczą zerowania, ustawiania i negaqi wybranych bitów. Maska traktowana jest jako zmienna 1 bajtowa, w której wartośd jedynki logicznej, występują na pozycjach tych wyróżnionych bitów, a pozostałe bity mają wartośd zerowe. Przykładowo wykonując wybraną operację dla bitów: 2. 3 i 6 maska ma następującą postać
b7 b6 b5 b4 b3 b2 bj b0
maska = | 0 1 0 0 | 1 1 0 0 |
Opis działania: A'
Dodanie do zawartości akumulatora znacznika przeniesienia (C) i zawartości:
• rejestru Rn, Rn*R0..R7,
• komórki wewnętrznej pamięci RAM adresowanej bezpośrednio adresem adr,
• komórki wewnętrznej pamięd RAM adresowanej pośrednio rejestrem Ri.
Ri * RO lub Rl,
• 8 bitowej danej.
Wytoik dodawania przesłany jest do akumulatora A.
Znacznik przeniesienia (O sygnalizuje przekroczenie zakresu liczb całkowitych bez ; znaku (0..255), a znacznik nadmiaru (0V) przekroczenie zakresu liczb całkowitych ze znakiem (-128..+127).
Przykład:
Obliczenie sumy dwóch 3-bajtowych zmiennych zawartych w:
-* argument 1 w komórkach pamięd o adresie 30H (najbardziej znaczący bajt) i 32H (najmniej znaczący bajt),
-* argument 2 w komórkach pamięd o adresie 40H (najbajt bardziej znaczący) i 42H (najmniej znaczący bajt).
Wynik dodawania przesiany w miejsce drugiego argumentu.
Add_3:
MOV
MOV
MOV
CLR
Pętla:
R0,#32ł I R1,#42H R2,#3 C
RO <= 32H, RO adresuje argument 1 Rl c= 42H, Rl adresuje argument 2 i wynik R2 c= 3, R2 licznikiem dadawanych bajtów
CcO, znacznik C zerowany
MOV |
A,©RO |
Ac= (RO), |
ADDC |
A,@R1 |
A<= A + C + (Rl), |
MOV |
®Rl,A |
(Rl)c= A, |
DEC |
RO |
R0c= RO -1, |
DEC |
R1 |
Rlc= Rl -1, |
DJNZ |
R2, Pętla |
R2c= R2 - 1. |
przy dodawaniu najmniej znaczących bajtów początek powtórzenia częśd programu kolejne bajty argumentu 1
przesianie wyniku przygotowanie do dodawaniu kolejnych
bajtów obu argumentów jeśli R2*0 to powtórzenie pętli procedury dodawania