6, Instrukcje logiczne 57
W akumulatorze znajduje się wartość 40H=+64D, a nu.* poprawna wartość 0CQH«*-64D. Uwzględniając także ujemne liczby całkowite przytoczony program dzielenia binarnego należy zmodyfikować do postaci:
MOV A.tfLiczba ;A <= Liczba ■ BOH =* -128D, liczba ujemna
MOV C.ACC7 ,C <= A7,
;przc$lij bił A7 do znacznika przeniesienia (O t RRC A ;A ■ OCOH ■ -64D
;zawartość akumulatora przesuń logicznie ;w prawo o jedną pozycję,
Stan akumulatora 2godny 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 A3 0- Przykład ilustruje wykorzystanie tej instrukcji przy zamianie liczby z postad binarnej na postać BCD i założeniu, że liczba dodatnia mieść się w zakresie 0..99D. np.Liczba=4CH»76D:
MOV |
A,#Liczba | |
MOV |
B,#10D | |
DIV |
AB | |
SWAP |
A | |
ADD |
A.B |
A c= zamieniana liczba w postać binarnej <= 10D
A = 4CH = 0100 1100B B =» 10D =» 0000 1010B
A c= Int(A/B) =» 0..9, dziesiątki.
3 <= Mod(A/B) * 0..9, jedność
A “ 7 = 0000 0111B B = 6 -0000 011 OB
A7..4 » a3..0-
A7..4 c= dziesiątki, A3^0 <= 0
A = 70H = 0111 0O00B A <= A ♦ B, dodanie jedność do dziesiątek
W podanym poniżej pełnym zestawie instrukcji logicznych, w przykładach ilustrujących sposób wykorzystania instrukcji 'and', 'or' i xof wprowadzono pojęće maski. Wykonywane operacje dotyczą zerowania, ustawiania i negacji wybranych bitów. Maska traktowana jest jako zmienna 1 bajtowa, w której wartość jedynki logicznej występują na pozycjach tych wyróżnionych bitów, a pozostałe bity mają wartośa zerowe. Przykładowo wykonując wybraną operację dla bitów: 2, 3 i 6 maska ma następującą postać:
*>7 b6 b5 b4 *>3 *2 bl b0
maska ■ | 0 1 0 0 I 1 1 0 Q~~1
Opis działania:
Dodanie do zawartości ąkuifyłiatora ifo 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.
Ri - RO lub Rl,
* • 8 bitowej danej.
Wynik dodawania przesłany jest do akumulatora A.
Znacznik przeniesienia (C) 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 przesłany w miejsce drugiego argumentu.
Add 3:
MOV |
R0,#32H |
;R0 <= 3211, |
RO adresuje argument 1 |
MOV |
R1.#42H |
;K1 c=42H, |
Rl adresuje argument 2 i wynik |
MOV |
R2,#3 |
;R2 g 3, |
R2 licznikiem dadawanych bajtów |
CU |
C |
;C g 0, |
znacznik C zerowany |
przy dodawaniu najmniej znaczących bajtów początek powtórzenia części programu kolejne bajty argumentu 1
Pętla:
MOV |
A.@KO |
Ag (RO), |
AD DC |
A,@R1 . |
Ag A + C + (Rl), |
MOV |
®R1,A |
(R1)g a. |
DEC |
RO |
R0c= RO -1, |
DEC |
Rl |
R1g Rl -1, |
DJNZ |
R2,Petla |
R2g R2 -1, |
przesłanie wyniku przygotowanie do dodawaniu kolejnych
bajtów obu argumentów jeśli R2*0 to powtórzenie pętli procedury dodawania