o Instrukcje logiczni 61
wynik operacji przesyłany jest do akumulatora,
• komórki wewnętrznej pamięci RAM adresowanej bezpośrednio adresem adr z: -* zawartością akumulatora A,
-> 8-bitową daną
wynik operacji przesyłany jest do komórki wewnętrznej pamięd RAM o adresie adr.
Przykład 1:
Ustawianie, wpisywanie jedynki logicznej na wybrane bity akumulatora: A7, A3 i A0
Maska DB 1000 1001B ,-jedynka logiczna na pozycji ustawianego bitu Orl.A:
ORL A,#Maska ;A <= A or Maska
Jeśli stan akumulatora A*ODBH=1101 1011H to po wykonaniu programu:
A = 1101 101 IB maska = 1000 1001B A or maska = 1101 1011B
Przykład 2:
Wybór trzeciego banku rejestrów (RB3) przez ustawienie bitów RSl i RSO w rejestrze słowa statusowego (PSW):
Orl_PSW:
ORL PSW,#18H ;PSW <=■ PSW or 18H, RSl » RSO = 1
jeśli przed wykonaniem instrukcji wybrany był bank RB1 to po wykonaniu instrukcji stan rejestru słowa statusowego jest następujący:
rew- |
c |
AC |
F0 |
RSl |
RSO OV |
FI |
P |
1 |
0 |
1 |
0 |
1 1 |
1 |
0 |
18H-0 0 0 1 1 0 0 0
rew»f 1 0 1 1 | 1 1 1 0
Mikrokontroler *0/051 - nroyramowanie
Zasadnicza grupa instrukcji arytmetycznych związana jest z akumulatorem (A). Jeden z argumentów i wynik operacji zawarty jest zawsze w akumulatorze (A). Do wyjątków należą instrukcje inkrementacji (zwiększania o jeden) i dekrementacji (zmniejszania o jeden) zawartości akumulatora (A), rejestrów Rn, rejestrów specjalnych (SFR) oraz komórek wewnętrznej i zewnętrznej pamięci RAM adresowanych pośrednio, tzn. za pomocą rejestrów RO i Rl. Wyjątkiem są również instrukcje mnożenia i dzielenia, z którymi związany jest rejestr B. W tabeli 5-1 przedstawiono listę wszystkich instrukcji arytmetycznych.
Tabela 5-1. Instrukcje arytmetyczne
Mnemonik instrukcji |
Operacje |
Tryby adresowania |
Liczba cykli maszyn. | ||||||
ADD |
A,<bajt> |
A |
<= |
A+<bajt> |
R |
B |
N |
P |
1 |
ADDC |
A,<bajt> |
A |
c= |
A+C+<bajt> |
R |
B |
N |
P |
1 |
INC |
A |
. A |
c= |
A+l |
B |
1 | |||
INC |
<bajt> |
<bajt> |
c= |
<bajt>+l |
R |
B |
P |
1 | |
INC |
DPTR |
DPTR |
<= |
DPTR+1 |
B |
2 | |||
SUBB |
A,<bajt> |
A |
cz |
A-C-<bajt> |
R |
B |
N |
P |
1 |
DEC |
A |
A |
c= |
A-l |
B |
1 | |||
DEC ■ |
<bajt> |
<bajt> |
c= |
<bajt>-l |
R |
B |
P |
1 | |
MUL |
AB |
BA |
c= |
A * B |
B |
4 | |||
DIV • |
AB |
• A |
<= |
In«A/B) |
B |
4 | |||
B |
CZ |
Mod(A/B) | |||||||
DA |
A |
korekcja dziesiętna |
B |
1 |
Dodawanie dwóch argumentów może być zrealizowane bez uwzględniania znacznika przeniesienia (O ADD A,<bajt> (argumenty jednobajtowe) lub / uwzględnieniem tego znacznika ADDCA,<bajt> (argumenty wielobajtowe). Możliwe jest także zwiększenie o jeden INC<bajt> (inkrcmentacja) wybranego argumentu Przykładem sumy zawartości dwóch rejestrów R3 i R7 jest program:
5uma_R3_R7:
MOV A,R3 ;A c= R3
ADD A,K7 ;AcAt R7. wynik dodawania w akumulatorze
Przy dodawaniu zawartości dwóch par rejestrów R4 (bajt mniej znaczący) i R5 oraz K6 (bajt mniej znaczący) i K7 program musi uwzględnić przeniesienie przy dodawaniu bardziej znaczących bajtów:
M«l'eoVnnłrnl^ I _