5. Instrukcje arytmetyczne 43
5. Instrukcje arytmetyczne 43
Suma K4R5 R6R7: MOV A.R4 ADD A.R6
MOV R6,A MOV A.R5
ADDC A,R7
MOV R7,A
;A <= R4 ;AcA + R6,
.przeniesienie C zmienione przez sumę R4 + R6 ;R6 c= A, mniej znaczący bajt sumy ;A <= R5
;rozkazy MOV <desŁ»,<scr> nie zmieniają C ;A c= A C ♦ R7,
.przeniesienie C z poprzedniego dodawania ;R7 cs A. bardziej znaczący bajt sumy
,<bajt> są mniej rozbudowane w stosunku do operacji dodawania. W operacjach tych brak jest przede wszystkim odejmowania bez uwzględniania znacznika przeniesienia (O, który sygnalizuje pożyczkę. Odejmowanie zmiennych 1-bajtowych należy poprzedzić operacją kasowania znacznika przeniesienia (O, np. stosując instrukcję CLR G
Na uwagę zasługuje instrukcja zwiększania o jeden INC DPTR. inkrementacji, wskaźnikowego rejestru danych (DPTR), która jest jedyną operacją dodawania dla zmiennej 16-bitowej.
.
Operacja.mnożenia MUL AB wykonuje mnożenie dwóch zmiennych 8-bitowych, z których jedna znajduje się w akumulatorze (A), a druga w rejestrze B. Wynik wykonanej operacji przesyłany jest do rejestru B (8 bardziej znaczących bitów wyniku) i akumulatora (8 mniej znaczących bitów wyniku). Podobne działanie ma instrukcja dzielenia zmiennej 8-bitowej, znajdującej się w akumulatorze przez zmienną 8-bitową znajdującą się w rejestrze B. DIV AB. Część całkowita ilorazu przesyłana jest do akumulatora, a reszta z dzielenia do rejestru B. Obie operacje wykonywane są w ciągu 4 cykli maszynowych i są najdłużej wykonywanymi rozkazami. Jeżeli operacje mnożenia i dzielenia dotyczą potęgi 2, to można je zastąpić rozkazami przesunięć logicznych. Należy przy tym przeanalizować, która metoda da krótszy kod wynikowy lub która będzie szybsza.
Ostatnią rozważaną instrukcją jest instrukcja korekcji dziesiętnej DA A. Stasowana jest w operacjach dodawania dla liczb zapisanych w kodzie BCD. Nie może być stosowana do bezpośredniej zamiany liczby zapisanej w kodzie binarnym na liczbę zapisaną w kodzie BCD.
W dalszej częśd rozdziału przedstawiono pełny zestaw instrukqi arytmetycznych z komentarzami i przykładami zastosowań.
Mikrokontroler U0(C)5l - programowanie
ORL argument_,argument_2
Logical Or for Byte
Działanie
A c A or
Rn
(adr)
(Ri)
#dana
(adr) <= (adr) or
Adresowanie: Mnemonik: Struktura bajtów: Cykle Znacz-
maszynowe: niki:
rejestrowe: |
ORL |
A, Rn |
bezpośrednie: |
ORL |
A,adr |
pośrednie: |
ORL |
A,@Ri |
natychmiastowe: |
ORL |
A,idana |
bezpośrednie: |
ORL |
adr,A |
natychmiastowe: |
ORL |
adr.fdana |
10 1 0 011 r r T] 1 P
| adr
dana__|
Opis działania:
Suma logiczna zawartości:
• akumulatora (A) z zawartością:
-» rejestru Rn, Rn = R0..R7,
-* komórki wewnętrznej pamięci RAM adresowanej bezpośrednio adresem adr. -»komórki wewnętrznej pamięci RAM adresowane) pośrednio adresem zawartym w rejestrze Ri, Ri = RO lub Rl.
-+ d-bitowej danej.