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 postaci: •
MOV A.fLiczba ;A <= Liczba - BOH =»-128D, liczba ujemna
MOV C.ACC.7 ,C <= A7,
;prześlij bit A7 do znacznika przeniesienia (O t 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 tetrad akumulatora, wymiana dokonywana jest między bitami A7.4 i A3j). Przykład ilustruje wykorzystanie tej instrukcji przy zamianie liczby z postaci binarnej na postać BCD i założeniu, że liczba dodatnia mieści się w zakresie 0..99D, np.Liczba=4CH»76D:
MOV |
A.fLiczba | |
MOV |
B,#10D | |
DIV |
AB | |
SWAP |
A | |
ADD |
A.B |
A c= zamieniana liczba w postaci binarnej
B<=10D
A = 4CH - 0100 1100B B » 10D - 0000 1010B
A c= lnt(A/B) = 0..9, dziesiątki,
3 <= Mod(A/B) * 0..9, jednośd
A “ 7 = 0000 0111B B = 6 - 0000 0110B
a7..4 0 a3..0-
a7..4 <= dziesiątki, A3..0 <= 0
A - 70H - 0111 OOOOB A <= A +• B, dodanie jedności do dziesiątek
W podanym poniżej pełnym zestawie instnikcji logicznych, w przykładach ilustrujących sposób wykorzystania instrukcji 'and', ’or i 'xor wprowadzono pojęcie maski. Wykonywane operacje dotyczą zerowania, ustawiania i negacji 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ści zerowe. Przykładowo wykonując wybraną operację dla bitów: 2, 3 i 6 maska ma następującą postać
ty b6 b5 b4 b3 b2 bj b0
maska -1 0 1 0 0 I 1 1 0 0 1
Opis działania: - >
Dodanie do zawartości ąkuippiatora (ki znacznika przeniesienia (C) i zawartości:
• rejestru Rn, Rn»R0..R7,
• komórki wewnętrznej pamięd RAM adresowanej bezpośrednio adresem adr,
• komórki wewnętrznej pamięd RAM adresowanej pośrednio rejestrem Ri.
Rł = RO lub Rl,
• 8 bitowej danej.
Wynik dodawania przesiany jest do akumulatora A.
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:
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 przesłany w miejsce drugiego argumentu.
Add 3:
MOV |
R0,#32H |
;R0 c= 3211, |
RO adresuje argument 1 |
MOV |
R1,#42H |
;R1 c=42H, |
Rl adresuje argument 2 i wynik |
MOV |
R2,#3 |
;R2 <= 3, |
R2 licznikiem dadawanych bajtów |
CLR |
C |
;C c: 0, |
znacznik C zerowany |
Pętla:
MOV |
A.@KO |
Ac= (RO), |
AD DC |
A,@R1 |
Ac= A + C + (Rl), |
MOV |
6)R1,A |
(Rl)<= A, |
DEC |
RO |
R0<= RO -1, |
DEC |
Rl |
Rl<= Rl -1. |
DJNZ |
R2,Petla |
R2<= R2 -1, |
przy dodawaniu najmniej znaczących bajtów początek powtórzenia części programu kolejne bajty argumentu l .kolejne bajty argumentu 2 przesłanie wyniku przygotowanie do dodawanij kolejnych
bajtów obu argumentów jeśli R2*0 to powtórzenie pętli procedury dodawania