Lista instrukcji mikrokontrolerów 8051

Z PUTWiki
Skocz do: nawigacji, wyszukiwania
Artykuł nie jest jeszcze kompletny.
Autorzy zamierzają w najbliższym czasie kontynuować pracę nad tym hasłem. Jeśli chcesz dowiedzieć się, jak do tej pory przebiegały prace nad tym artykułem, zajrzyj do jego historii lub dyskusji. Jeżeli chcesz się przyłączyć do rozwijania tego tekstu zapraszamy. Na czas wprowadzania dłuższych zmian zmień ten opis na szablon WEdycji aby uniknąć konfliktów edycyjnych. Możesz również zgłosić swoje uwagi lub propozycje w dyskusji.

Spis treści

[edytuj] ACALL <adres_11-bitowy>

Funkcja: Bezwzględne wywołanie procedury

Opis: ACALL powoduje wywołanie procedury rozpoczynającej się pod podanym adresem bezwzględnym. Wykonanie instrukcji powoduje dwukrotną inkrementacją licznika rozkazów, tak by zawierał on adres następnej instrukcji, następnie umieszczenie obu bajtów licznika rozkazów na stosie (najpierw młodszy bajt) i zwiększenie wartości wskaźnika stosu o dwa. Adres wywoływanej procedury otrzymywany jest przez połączenie bitów 7-5 pierwszego bajtu kodu instrukcji i całego drugiego bajtu kodu instrukcji. W związku z tym, wywoływana procedura musi się rozpoczynać w obrębie tej samej 2K-bajtowej strony, w której znajduje się pierwszy bajt instrukcji następującej bezpośrednio po wykonywanej instrukcji ACALL. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników.


Przykład: Początkowy stan wskaźnika SP jest równy 07H. Etykieta "SUBR" oznacza pamięć programu o adresie 0345H. Po wykonaniu instrukcji ACALL SUBR umieszczonej pod adresem 0123H, wskaźnik SP będzie zawierał 09H, bajty wewnętrznej pamięci RAM o adresach 08H i 09H będą zawierały odpowiednio 25H i 01H, a licznik rozkazów przyjmie wartość 0345H.

PC := PC + 2
SP := SP + 1
[SP] := PC7-0
SP := SP + 1
[SP] := PC15-8
PC10-0 := adr10-0;(adres w obszarze bieżącej strony)
Liczba cykli: 2 Liczba bajtów: 2

[edytuj] ADD A, <bajt_źródłowy>

Funkcja: Dodawanie

Opis: ADD powoduje dodanie zawartości wskazanej zmiennej i akumulatora i pozostawia wynik operacji w akumulatorze. Wskaźnik przeniesienia i pomocniczy wskaźnik przeniesienia są ustawiane, jeśli nastąpiło przeniesienie odpowiednio z 7 lub 3 bitu. W przeciwnym razie (brak przeniesienia) wskaźniki są zerowane. W przypadku dodawania liczb bez znaku wskaźnik przeniesienia funkcjonuje jako wskaźnik przepełnienia. Bit OV ustawiany jest tylko wtedy, gdy wystąpiło przeniesienie z bitu 6, przy braku przeniesienia z bitu 7 lub gdy wystąpiło przeniesienie z bitu 7 przy braku przeniesienia z bitu 6. W pozostałych przypadkach OV jest zerowany. Jeśli dodawane są liczby ze znakiem, OV sygnalizuje otrzymanie dodatniego wyniku przy dodawaniu dwóch liczb ujemnych, bądź ujemnego wyniku przy dodawaniu dwóch liczb dodatnich. Do adresowania operandu źródłowego można wykorzysta jeden z następujących trybów adresowania: rejestrowe, bezpośrednie, pośrednie zawartością rejestru lub natychmiastowe.

Przykład: Akumulator zawiera 0C3H (11000011B), a rejestr R0 zawiera 0AAH (10101010B). Instrukcja ADD A, R0 pozostawi w akumulatorze wartość 6DH (01101101B), wyzeruje pomocniczy wskaźnik przeniesienia AC i spowoduje ustawienie wskaźnika przeniesienia CY oraz bitu OV.


Operacja: ADD
A := A + Rn
Liczba cykli: 1 Liczba bajtów: 1
Operacja : ADD
A :=A + (direct)
Liczba cykli : 1 Liczba bajtów : 2
Operacja : ADD
A := A + [Ri]
Liczba cykli : 1 Liczba bajtów : 1
Operacja : ADD
A := A + data
Liczba cykli : 1 Liczba bajtów : 2

[edytuj] ADDC A, <bajt_źródłowy>

Funkcja: Dodawanie z przeniesieniem

Opis: ADDC powoduje dodanie zawartości wskazanej zmiennej, akumulatora oraz bitu przeniesienia i pozostawia wynik operacji w akumulatorze. Wskaźnik przeniesienia i pomocniczy wskaźnik przeniesienia są ustawiane, jeśli nastąpiło przeniesienie odpowiednio z 7 lub 3 bitu w przeciwnym razie (brak przeniesienia) wskaźniki są zerowane. W przypadku dodawania liczb bez znaku wskaźnik przeniesienia funkcjonuje jako wskaźnik przepełnienia. Bit OV ustawiany jest tylko wtedy, gdy wystąpiło przeniesienie z bitu 6 przy braku przeniesienia z bitu 7 lub gdy wystąpiło przeniesienie z bitu 7, przy braku przeniesienia z bitu 6. W pozostałych przypadkach OV jest zerowany. Jeśli dodawane są liczby ze znakiem, OV sygnalizuje otrzymanie dodatniego wyniku przy dodawaniu dwóch liczb ujemnych, bądź ujemnego wyniku przy dodawaniu dwóch liczb dodatnich. Do adresowania operandu źródłowego można wykorzysta jeden z następujących trybów adresowania: rejestrowe, bezpośrednie, pośrednie zawartością rejestru lub natychmiastowe.

Przykład: Akumulator zawiera 0C3H (11000011B), rejestr R0 zawiera 0AAH (10101010B), a wskaźnik przeniesienia jest ustawiony. Instrukcja ADDC A, R0 pozostawi w akumulatorze wartość 6EH (01101110B), wyzeruje pomocniczy wskaźnik przeniesienia AC i spowoduje ustawienie wskaźnika przeniesienia CY oraz bitu OV.

Operacja : ADDC
A := A + Rn + CY
Liczba cykli: 1 Liczba bajtów: 1
Operacja : ADDC
A := A + (direct) + CY
Liczba cykli: 1 Liczba bajtów: 2
Operacja : ADDC
A := A + [Ri] + CY
Liczba cykli: 1 Liczba bajtów: 1
Operacja ADDC
A := A + data + CY
Liczba cykli: 1 Liczba bajtów: 2

[edytuj] AJMP <adres_11-bitowy>

Funkcja: Skok bezwzględny

Opis: AJMP powoduje przeniesienie wykonywania programu pod podany adres bezwzględny. Wykonanie instrukcji powoduje przyjęcie przez licznik rozkazów wartości otrzymanej przez połączenie pięciu najstarszych bitów licznika rozkazów, bitów 7-5 pierwszego bajtu kodu instrukcji i całego drugiego bajtu kodu instrukcji. W związku z tym miejsce, do którego wykonywany jest skok musi się znaleźć w obrębie tej samej 2K-bajtowej strony, w której znajduje się pierwszy bajt instrukcji następującej bezpośrednio po wykonywanej instrukcji AJMP. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników.

Przykład: Etykieta "JMPADR" oznacza pamięć programu o adresie 0345H. Po wykonaniu instrukcji AJMP JMPADR umieszczonej pod adresem 0123H licznik rozkazów przyjmie wartość 0345H.

PC := PC + 2
PC10-0 := adr10-0 (adres w obszarze bieżącej strony)
Liczba cykli: 2 Liczba bajtów: 2

[edytuj] ANL <bajt_przeznaczenia>, <bajt_źródłowy>

Funkcja: Logiczna funkcja AND dwóch zmiennych

Opis: ANL wykonuje bitowy iloczyn logiczny dwóch wskazanych zmiennych bajtowych (każdy bajt traktowany jest jako zbiór ośmiu bitów). Wynik operacji umieszczany jest w pierwszej z wymienionych zmiennych. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników. Możliwych jest 6 różnych kombinacji adresowania dla dwóch używanych przez instrukcję operandów. Jeśli miejscem przeznaczenia wyniku jest akumulator, to zmienna źródłowa może by adresowana w trybie rejestrowym, bezpośrednim, pośrednim (zawartości rejestru) lub natychmiastowym. Jeśli miejsce przeznaczenia wyniku jest adresowane bezpośrednio, to zmienna źródłowa może by akumulatorem lub zmienną adresowaną w trybie natychmiastowym.

Uwaga: jeśli instrukcja jest wykorzystywana do zmiany stanu linii portu, to wartością użytą jako pierwotny stan portu będzie wartość odczytana z rejestru wyjściowego portu, a nie rzeczywisty stan wyprowadzeń portu.

Przykład: Jeśli akumulator zawiera 0C3H (11000011B), rejestr R0 zawiera 0AAH (10101010B), to instrukcja ANL A, R0 pozostawi w akumulatorze wartość 82H (10000010B). Instrukcję można wykorzystywać do wyzerowania bitów wybranego bajtu wewnętrznej pamięci RAM lub rejestru, jeśli miejscem przeznaczenia wyniku jest bajt adresowany bezpośrednio. Maska określająca, które bity będą zerowane jest wówczas stałą wyszczególnioną w instrukcji lub zawartości akumulatora (zwykle uzyskaną z poprzedzających instrukcję obliczeń). Instrukcja ANL P1,#01110111B spowoduje wyzerowanie bitów 7 i 3 portu P1.

Operacja : ANL
A := A and Rn
Liczba cykli : 1 Liczba bajtów : 1
Operacja : ANL
A := A and (direct)
Liczba cykli : 1 Liczba bajtów : 2
Operacja : ANL
A := A and [Ri]
Liczba cykli : 1 Liczba bajtów : 1
Operacja : ANL
A := A and data
Liczba cykli : 1 Liczba bajtów : 2
Operacja : ANL
(direct) := A and (direct)
Liczba cykli : 1 Liczba bajtów : 2
Operacja : ANL
(direct) := (direct) and data
liczba cykli : 2 Liczba bajtów : 3

[edytuj] ANL C, <bit_źródłowy>

Funkcja: Logiczna funkcja AND zmiennych bitowych


Opis: Instrukcja zeruje wskaźnik przeniesienia, jeśli wartość bitu będącego drugim z podanych operandów jest zerem. W przeciwnym razie stan wskaźnika przeniesienia pozostaje bez zmian. Operacja nie zmienia stanu pozostałych wskaźników. Jeśli drugi z operandów jest poprzedzony kreską ukośną "/". to do wykonania operacji używana jest zanegowana wartość wskazanego bitu (stan bitu źródłowego nie ulega jednak zmianie). Operandami źródłowymi mogą być tylko bity adresowalne bezpośrednio.

Przykład: Wykonanie ciągu instrukcji

 
MOV C, P 1.0 ; przesłanie stanu wyprowadzenia portu do wskaźnika przeniesienia
ANL C, ACC.7 ; iloczyn logiczny wskaźnika przeniesienia z bitem 7 akumulatora
ANL C, /OV ; iloczyn logiczny wskaźnika przeniesienia z negacją wskaźnika OV
 

spowoduje ustawienie wskaźnika przeniesienia tylko wtedy, gdy P1.0= 1, ACC.7=1 oraz OV=0.

Operacja : ANL
CY := CY ^ (bit)
Liczba cykli : 2 Liczba bajtów : 2
Operacja ANL
CY := CY ^ ~(bit)
Liczba cykli : 2 Liczba bajtów : 2


[edytuj] CJNE <bajt_przeznaczenia>, <bajt_źródłowy>, <adres_względny>

Funkcja: Porównanie i skok jeśli różne

Opis: CJNE porównuje wartości dwóch pierwszych operandów i wykonuje skok jeśli są one różne. Wartość adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (ostatniego z operandów będącego 8-bitową liczbą ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcję znajdującą się za wykonywaną instrukcją CJNE. Jeśli <bajt_przeznaczenia> traktowany jako liczba bez znaku jest mniejszy niż analogicznie interpretowany <bajt źródłowy>, to wskaźnik przeniesienia jest ustawiany. W przeciwnym razie (odwrotny wynik porównania) bit przeniesienia jest zerowany. Żaden z operandów nie ulega zmianie. Możliwe są cztery różne kombinacje adresowania pierwszych dwóch operandów: operacja może porównywać zawartość akumulatora z dowolnym bajtem adresowanym bezpośrednio lub natychmiastowo, lub przeprowadza porównanie rejestru roboczego lub pośrednio adresowanego bajtu pamięci RAM z argumentem adresowanym w trybie natychmiastowym (stałą).


Przykład: Akumulator zawiera 34H. Rejestr R7 zawiera 56H. Pierwsza instrukcja w sekwencji:

 
CJNE R7, #60H, NOT_EQ
...; R7=60H
NOT_EQ : JC REQJLOW ; skok jeśli R7 < 60H
;... R7 > 60H
 

ustawi wskaźnik przeniesienia i spowoduje skok do adresu oznaczonego etykiet NOT_EQ. Znajdująca się tam instrukcja, testująca stan wskaźnika przeniesienia, określi czy zawartość R7 jest większa, czy mniejsza niż 60H.

Jeśli stan wyprowadzeń portu P1 także stanowi wartość 34H, to instrukcja

WAIT: CJNE A, P1, WAIT

wyzeruje bit przeniesienia i przejdzie do wykonania kolejnej instrukcji jako, że stan portu P1 i akumulatora są identyczne. Jeśli stan wyprowadzeń portu P1 będzie różny od 34H, to program będzie powtarzalną pętlą zawierającą instrukcję z etykiet WAIT tak długo, aż stan wyprowadzeń portu przyjmie wartość 34H.

Operacja : CJNE
PC := PC + 3
IF A <> (direct) THEN
PC := PC + rel
IF A < (direct) THEN
CY := 1
ELSE
CY := 0
Liczba cykli : 2 Liczba bajtów : 3
Operacja : CJNE
PC := PC + 3
IF A <> data THEN
PC := PC + rel
IF A < data THEN
CY := 1
ELSE
CY := 0
Liczba cykli : 2 Liczba bajtów : 3
Operacja : CJNE
PC := PC + 3
IF Rn <> data THEN
PC := PC + rel
IF Rn < data THEN
CY := 1
ELSE
CY := 0
Liczba cykli : 2 Liczba bajtów : 3
Operacja : CJNE
PC := PC + 3
IF [Ri] <> data THEN
PC := PC + rel
IF [Ri] < data THEN
CY := 1
ELSE
CY := 0
Liczba cykli : 2 Liczba bajtów : 3

[edytuj] CLR A

Funkcja: Zerowanie akumulatora

Opis: Akumulator jest zerowany - wszystkie bity przyjmują stan 0. Żaden ze wskaźników nie ulega zmianie.

Przykład: Akumulator zawiera 5CH (01011100B). Instrukcja CLR A spowoduje przyjęcie przez akumulator stanu 00H (00000000B).

A := 0
Liczba cykli: 1 Liczba bajtów: 1


[edytuj] CLR <bit>

Funkcja: Zerowanie bitu

Opis: Wskazany bit jest zerowany. Żaden ze wskaźników nie ulega zmianie. Instrukcja może być przeprowadzona wyłącznie na wskaźniku przeniesienia lub dowolnym bicie adresowalnym bezpośrednio.

Przykład: Rejestr portu P1 zawiera 5DH (01011101B). Instrukcja CLR P1.2 spowoduje zmianę zawartości rejestru portu na 59H (01011001B).

Operacja: CLR
CY := 0
Liczba cykli : 1 Liczba bajtów: 1
Operacja: CLR
(bit) := 0
Liczba cykli : 1 Liczba bajtów : 2


[edytuj] CPL A

Funkcja: Negacja zawartości akumulatora

Opis: Wszystkie bity akumulatora zmieniają swój stan. Bity zawierające zera są ustawiane i odwrotnie. Żaden ze wskaźników nie ulega zmianie.

Przykład: Akumulator zawiera 5CH (01011100B). Instrukcja CPL A spowoduje przyjęcie przez akumulator stanu 0A3H (10100011B).

A := A xor 0FFH
Liczba cykli: 1 Liczba bajtów: 1

[edytuj] CPL <bit>

Funkcja: Zanegowanie bitu

Opis: Wskazany bit jest negowany. Żaden ze wskaźników nie ulega zmianie. Instrukcja może by przeprowadzona wyłącznie na wskaźniku przeniesienia lub dowolnym bicie adresowalnym bezpośrednio.

Uwaga: jeśli instrukcja jest używana do zmiany stanu wyprowadzenia portu, to stan Początkowy negowanego bitu ustalany jest na podstawie wartości wpisanej do rejestru wyjściowego portu, a nie stanu wyprowadzenia mikrokontrolera.

Przykład: Rejestr portu P1 zawiera 5DH (01011101B). Instrukcje
CPL P1.1
CPL P1.2
spowoduj zmian zawartości rejestru portu na 5BH (01011011B).
CPL C
Operacja: CPL
CY := ~ CY
Liczba cykli: 1 Liczba bajtów: 1
CPL bit
Operacja : CPL
(bit) := ~ (bit)
Liczba cykli : 1 Liczba bajtów : 2


[edytuj] DA A

Funkcja: Poprawka dziesiętna po dodawaniu

Opis: DA A koryguje zawartość akumulatora, będąc wynikiem dodawania dwóch zmiennych (ka da w postaci upakowanej liczby BCD), daj c w wyniku bajt zawierający dwie cyfry dziesiętne. Do dodawania przed wykonaniem poprawki dziesiętnej może by wykorzystana dowolna z instrukcji ADD lub ADDC. jeśli wartość zakodowana na czterech młodszych bitach akumulatora jest większa od 9 lub ustawiony jest wskaźnik przeniesienia pomocniczego AC, to do zawartości akumulatora dodawana jest liczba 6. Daje to w wyniku poprawną posta czterech młodszych bitów akumulatora, a ponadto ustawia wskaźnik przeniesienia, jeśli w wyniku dodania 6 przeniesienie wystąpiło (jeśli jednak dodawanie pomocnicze nie wywołało przeniesienia, to stan bitu CY nie ulega zmianie).jeśli po wykonaniu opisanej wy ej operacji bit przeniesienia jest ustawiony lub wartość zakodowana na czterech starszych bitach akumulatora przekracza 9, to do starszej polówki akumulatora dodawane jest 6. I analogicznie jak poprzednio, daje to poprawną postać czterech starszych bitów akumulatora, a ponadto ustawia wskaźnik przeniesienia, jeśli w wyniku dodania 6 przeniesienie wystąpiło (jeśli jednak dodawanie pomocnicze nie wywołało przeniesienia, to stan bitu CY nie ulega zmianie). Ostatecznie wskaźnik przeniesienia sygnalizuje wynik powyżej 99 i umożliwia tym samym realizację dodawania dziesiętnego wielokrotnej precyzji. Stan wskaźnika OV nie ulega zmianie. Wszystkie opisane operacje wykonywane są w ciągu jednego cyklu maszynowego. W praktyce realizacja poprawki dziesiętnej sprowadza się do dodania do akumulatora wartości OOH, 06H, 60H lub 66H, w zależności od początkowego stanu akumulatora i rejestru PSW.

Uwaga: Operacja poprawki dziesiętnej nie wykonuje zwykłego przekształcenia liczby szesnastkowej na posta BCD. me ma te zastosowania do operacji inkrementacji, ani odejmowania liczbę dziesiętną.

Przykład: Akumulator zawiera wartość 56H (01010110B), co stanowi reprezentację BCD
dziesiętnej liczby 56. Rejestr R3 zawiera 67H (01100111B), co stanowi reprezentację BCD
dziesiętnej liczby 67. wskaźnik przeniesienia jest ustawiony. Sekwencja operacji
ADDC A, R3
DA A
spowoduje najpierw wykonanie zwykłego dodawania w uzupełnieniu do dwóch, dającego w
akumulatorze wynik 0BEH (10111 110B). wskaźniki
przeniesienia i przeniesienia pomocniczego zostaną w rezultacie tego dodawania
wyzerowane. Wykonanie wówczas poprawki dziesiętnej
zmieni stan akumulatora na 24H (00100100B), reprezentujący dwie młodsze cyfry wyniku
dodawania liczb 56, 67 i przeniesienia. Poprawka
dziesiętna spowoduje tez. ustawienie bitu przeniesienia, sygnalizującą przepełnienie dziesiętne.
Suma liczb 56. 67 i l jest równa 124.
zmienne bajtowe w kodzie RCD mogą być inkrementowane lub dekrementowane przez
dodanie odpowiednio liczb 01H lub 99H. jeśli
początkowo akumulator zawiera 30H (reprezentacja BCD liczby 30), to sekwencja instrukcji
ADD A. #99H
DA A
ustawi wskaźnik przeniesienia i pozostawi w akumulatorze liczb 29H, jako ze 30+99=129.
Ignoruj c bit przeniesienia uzyskuje się 30-1=29.



Operacja: DA
IF (A3-0 > 9) OR (AC = 1) THEN
A3-0 := A3-0 + 6
IF (A7-4 > 9) OR (CY = 1) THEN
A7-4 := A7-4 + 6
Liczba cykli : 1 Liczba bajtów

1


[edytuj] DEC <bajt>

Funkcja: Dekrementacja

Opis: Wskazany bajt jest dekrementowany o 1. Jeśli początkową wartością jest 00h, to wynikiem operacji jest 0FFh. Stan żadnego ze wskaźników nie ulega zmianie. Operandem może być bajt adresowany bezpośrednio, pośrednio zawartością rejestru, akumulator lub rejestr roboczy.

Uwaga: Jeśli instrukcja wykorzystywana jest do zmiany stanu portu, to wartością dekrementowaną jest zawartość rejestru wyjściowego portu, a nie stan linii portu.

Przykład: Rejestr R0 zawiera 7FH (01111111 B). Bajty wewnętrznej pamięci RAM o adresach 7EH i 7FH zawierają odpowiednio 00H i 40H. Sekwencja instrukcji:
DEC @R0
DEC R0
DEC @R0
spowoduje przyjęcie przez rejestr R0 wartości 7EH i nadanie bajtom wewnętrznej pamięci RAM o adresach 7EH i 7FH odpowiednio wartości 0FFH i 3FH.

DEC A
A := A - 1
Liczba cykli: 1 Liczba bajtów: 1

DEC Rn
Rn := Rn - 1
Liczba cykli: 1 Liczba bajtów: 1

DEC direct
(direct) := (direct) - 1
Liczba cykli: 1 Liczba bajtów: 2

DEC @Ri
[Ri] := [Ri] - 1
Liczba cykli: 1 Liczba bajtów: 1

[edytuj] DIV AB

Funkcja: Dzielenie całkowite

Opis: DIV A dzieli 8-bitów liczb bez znaku umieszczoną w akumulatorze przez 8-bitów
liczb bez znaku znajdującą się w rejestrze B. Po wykonaniu operacji akumulator zawiera
iloraz, a rejestr B reszt z dzielenia całkowitego. wskaźniki CY oraz OV s zerowane.
Wyj tek: jeśli przed wykonaniem operacji w rejestrze B znajdowała się liczba 00H, to wynik
dzielenia (stan rejestrów A i B) jest nieokreślony, natomiast wykonanie instrukcji spowoduje
ustawienie wskaźnika OV. Tak czy inaczej wskaźnik przeniesienia będzie zerowany.


Przykład: Akumulator zawiera 251 (OFBH, czyli 11111011B), a rejestr B zawiera 18 (12H,
czyli 00010010B). Instrukcja
DIV AB
spowoduje przyj cie przez akumulator wartości 13 (ODH, czyli 00001101B), a przez rejestr
B wartości 17 (11H, czyli 00010001B), jako e 251 = (13 x 18) + 17. wskaźniki przeniesienia
i przepełnienia zostaną wyzerowane.
Operacja: DIV
A := A div B
B := A mod B
Liczba cykli : 4 Liczba bajtów : 1


[edytuj] DJNZ <bajt>, <adres_względny>

Funkcja: Dekrementacja i skok jeśli nie zero

Opis: DJNZ zmniejsza zawartość wskazanej zmiennej o jeden i, jeśli wynikiem dekremcniacji jest wartość różna od zera, wykonuje skok pod podany adres. Wynikiem dekrementacji wartości 00H jest 0FFH. Stan żadnego ze wskaźników nie ulega zmianie. Warto adresu, do którego wykonywany jest skok, obliczana Jest przez dodanie przesunięcia (drugiego z operandów, będącego 8-bitowa liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcje znajdując się za wykonywaną instrukcją DJNZ. Dekrementowaną zmienną może by rejestr roboczy lub dowolny bajt adresowany bezpośrednio.

Uwaga: jeśli instrukcja wykorzystywana jest do zmiany stanu portu, to wartości dekrementowaną jest zawartość rejestru wyjściowego portu, a nie stan linii portu.


Przykład: wewnętrzna pamięć RAM o adresach 40H, 50H i 60H zawiera odpowiednio
liczby 01H, 70H i 15H. Sekwencja instrukcji
DJNZ 40H,LABEL1
DJNZ 50H, LABEL2
DJNZ 60H, LABEL3
spowoduje przeniesienie wykonywania programu do miejsca oznaczonego etykiet LABEL2,
z pozostawieniem w wymienionych bajtach pamięci RAM wartości 00H, 6FH i 15H.
Pierwszy ze skoków nie zostanie wykonany, ponieważ wynikiem dekrementacji będzie zero.
Instrukcja umożliwia łatwe tworzenie p tli, wykonywanej określoną ilość razy w
szczególności, za może być wykorzystana do spowodowania krótkiego opóźnienia (kilka do
kilkuset cykli maszynowych) w wykonywaniu dalszej częci programu. Ciąg instrukcji
MOV R2, #8
TOGGLE: CPL P1.7
DJNZ R2, TOGGLE
spowoduje 8-krotn zmian stanu wyprowadzeńnia P1.7, a tym samym wygenerowanie
czterech impulsów wyj ciowych na bicie 7 portu P1. każdy z impulsów będzie trwal 3 cykle
maszynowe, poniewa zmiana poziomu będzie nast powala co 3 cykle maszynowe (dwa
cykle wynosię czas wykonania instrukcji DJNZ i jeden - instrukcji CPL),
DJNZ Rn, rel
Operacja: DJNZ
PC := PC + 2
Rn

= Rn - 1
IF Rn < > 0 THEN
PC := PC + rel
Liczba

cykli: 2 Liczba bajtów: 2
DJNZ direct, rel
Operacja: DJNZ
PC := PC + 3
(direct) := (direct) - 1
IF (direct) <> 0 THEN
PC := PC + rel
Liczba cykli: 2 Liczba bajtów: 3


[edytuj] INC <bajt>

Funkcja: Inkrementacja

Opis: Wskazany bajt jest inkrementowany o 1. jeśli początkową wartością jest 0FFH, to wynikiem operacji jest 00H. Stan żadnego ze wskaźników nie ulega zmianie. Operandem może by bajt adresowany bezpośrednio, pośrednio zawartości rejestru, akumulator lub rejestr roboczy.

Uwaga: jeśli instrukcja wykorzystywana jest do zmiany stanu portu, to wartością inkrementowaną jest zawartość rejestru wyjściowego portu, a nie stan linii portu.

Przykład: Rejestr R0 zawiera 7EH (01111110B). Bajty wewnętrznej pamięci RAM o
adresach 7EH i 7FH zawieraj odpowiednio 0FFH i 40H. Sekwencja instrukcji
INC @R0
INC R0
INC @R0
spowoduje przyj cie przez rejestr RO wartości 7FH i nadanie bajtom wewnętrznej pamięci
RAM o adresach 7EH i 7FH odpowiednio wartości 00H i 41H.
INC A
Operacja: INC
A := A + 1
Liczba cykli: 1 Liczba bajtów: 1
INC Rn
Operacja: INC
Rn = Rn + 1
Liczba cykli: 1 Liczba bajtów: 1
INC direct
Operacja: INC
(direct)

= (direct) + 1
Liczba cykli: 1 Liczba bajtów: 2

INC @Ri
Operacja: INC
[Ri] := [Ri] + 1
Liczba cykli: 1 Liczba bajtów: 1


[edytuj] INC DPTR

Funkcja: Inkrementacja wskaźnika danych

Opis: Zwiększa 16-bitowy wskaźnik danych o jeden. Wykonywana jest inkrementacja 16-
bitowa (modulo 2"') - przepełnienie młodszego bajtu wskaźnika (DPL) z wartości 0FFH na
00H spowoduje inkrementację starszego bajtu wskaźnika (DPH). Stan żadnego ze
wskaźników nie ulega zmianie. Rejestr DPTR jest jedynym 16-bitowym rejestrem, którego
zawartość może by inkrementowana za pomoc pojedynczej instrukcji.


Przykład: Rejestry DPH i DPL zawieraj odpowiednio 12H i OFEH. Ciąg instrukcji
INC DPTR
INC DPTR
INC DPTR
spowoduje przyj cie przez rejestry DPH i DPL wartości 13H i 01H.
Operacja: INC
DPTR := DPTR + 1
liczba cykli : 2 Liczba bajtów : 1


[edytuj] JB <bit>, <adres_względny>

Funkcja: Skok jeśli bit jest jedynką

Opis: jeśli wskazany bit jest jedynką wykonywany jest skok pod podany adres,w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (drugiego z operandów, będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcję znajdując się za wykonywaną instrukcją JB. Warto testowanego bitu nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.


Przykład: Stan wyprowadzeń portu P1 jest reprezentowany liczb 11001010B. Akumulator
zawiera liczb 56H (01010110B). Ciąg instrukcji
JB P1.2.LABEL1
JB ACC.2,LABEL2
spowoduje przeniesienie wykonywania programu do miejsca oznaczonego etykiet LABEL2.
Operacja: JB
PC := PC + 3
IF(bit) = 1 THEN
PC = PC + rel
Liczba cykli : 2 Liczba bajtów : 3

[edytuj] JBC <bit>, <adres_względny>

Funkcja: Skok jeśli bit jest jedynką i wyzerowanie bitu

Opis: jeśli wskazany bit jcst jedynką wykonywany Jest skok pod podany adres, w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. W obu przypadkach testowany bit jest zerowany. Warto adresu, do którego wykonywany jest skok obliczana jest przez dodanie przesunięcia (drugiego z operandów, będącego 8 bitów liczb ze znakiem) do zawartości licznika rozkazów po uprzednim zwiększeniu zawartości licznika rozkazów tak by wskazywał on instrukcję znajdującą się za wykonywaną instrukcję JBC. Stan żadnego ze wskaźników nie ulega zmianie.

Uwaga: jeśli instrukcja wykorzystywana jest do testowania stanu wyprowadzenia portu, to wartością testowaną jest bit rejestru wyjściowego portu, a nie stan linii portu

Przykład: Akumulator zawiera liczb 56H (01010110B) Ciąg instrukcji
JBC ACC3.LABEL1
JBC ACC2 LABEL2
spowoduje przeniesienie wykonywania programu do miejsca oznaczonego etykiet LABEL2,
zmieniaj c zawartość akumulatora na 52H (01010010B).
Operacja JBC
PC =PC+3



IF (bit) = 1 THEN
PC =PC + rel
(bit) = 0
Liczba cykli : 2 Liczba bajtów : 3


[edytuj] JC <adres_względny>

Funkcja: Skok jeśli wskaźnik przeniesienia jest jedynką

Opis: jeśli wskaźnik przeniesienia jest jedynką wykonywany jest skok pod podany adres, w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie podanego przesunięcia (będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów o dwa. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: wskaźnik przeniesienia jest wyzerowany. Ciąg instrukcji
JC LABEL1
CPL C
JC LABEL2
spowoduje ustawienie wskaźnika przeniesienia i przej cie z wykonywaniem programu do
miejsca oznaczonego etykiet LABEL2.
Operacja: JC
PC := PC + 2
IF CY=1 THEN
PC := PC + rel
Liczba cykli : 2 Liczba bajtów : 2


[edytuj] JMP @A + DPTR

Opis: Dodaje 8-bitów stal bez. znaku umieszczoną w akumulatorze do 16-bitowego wskaźnika danych i wpisuje tak otrzymany wynik do licznika rozkazów. Następna instrukcja pobierana Jest spod adresu określonego nowym stanem licznika rozkazów. Wykonywane dodawanie jest 16-bitowe przeniesienie z młodszego bajtu wyniku wprowadzane jest do starszego bajtu. Stan akumulatora, ani wskaźnika danych nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: W akumulatorze umieszczona jest parzysta liczba z zakresu od 0 do 6. Podany
ci g instrukcji spowoduje przej cie do jednej z instrukcji AJMP umieszczonych w tabeli
skoków zaczynającej się w miejscu oznaczonym etykiet JMPTAB.
MOV DPTR, #JMPTAB
JMP @A + DPTR
JMPTAB:
AJMP LABEL0
AJMP LABEL1
AJMP LABEL2
AJMP LABEL3
jeśli przed wykonaniem powyższego ciągu instrukcji akumulator będzie zawierał 04H, to
rezultatem będzie przeniesienie wykonywania programu do miejsca oznaczonego etykiet
LABEL2. należy y pamięć ta , e instrukcja AJMP jest dwubajtowa, a zatem kody kolejnych
instrukcji skoku umieszczone s co drugi bajt. Karol Rakczy.
Operacja: JMP
PC := A + DPTR
Liczba cykli : 2 Liczba bajtów : 1

[edytuj] JNB <bit>, <adres_względny>

Funkcja: Skok jeśli bit jest zerem

Opis: jeśli wskazany bit jest zerem wykonywany jest skok pod podany adres, w przeciwnym razie następuje przejście do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (drugiego z operandów, będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcję znajdującą się za wykonywana instrukcją JNB. Warto testowanego bitu nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: Stan wyprowadzeń portu Pl jest reprezentowany liczb 11001010B. Akumulator
zawiera liczb 56H (01010110B). Ci instrukcji
JNB P1.3,LABEL1
JNB ACC.3. LABEL2
spowoduje przej cie z wykonywaniem programu do miejsca oznaczonego etykiet LABEL2.
Operacja: JNB
PC := PC + 3
IF (bit) = 0 THEN
PC := PC + rel
Liczba cykli: 2 Liczba bajtów: 3


[edytuj] JNC <adres_względny>

Funkcja: Skok jeśli wskaźnik przeniesienia jest zerem


Opis: jeśli wskaźnik przeniesienia jest zerem wykonywany jest skok pod podany adres, w
przeciwnym razie następuje przejście do instrukcji znajdującej się bezpośrednio za
wykonywaną instrukcję skoku warunkowego. Warto adresu, do którego wykonywany jest
skok, obliczana jest przez dodanie podanego przesunięcia (będącego 8-bitów liczb ze
znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika
rozkazów o dwa. Stan żadnego ze wskaźników (w tym wskaźnika przeniesienia) nie ulega
zmianie.

Przykład: wskaźnik przeniesienia jest ustawiony. Ciąg instrukcji
JNC LABEL1
CPL C
JNC LABEL2
spowoduje wyzerowanie wskaźnika przeniesienia i przej cie z wykonywaniem programu do
miejsca oznaczonego etykiet LABEL2.
Operacja: JNC
PC := PC + 2
IF CY=0 THEN
PC := PC + rel
Liczba cykli: 2
Liczba bajtów: 2


[edytuj] JNZ <adres_względny>

Funkcja: Skok jeśli zawartość akumulatora nie jest zerem


Opis: jeśli którykolwiek z bitów akumulatora jest jedynką wykonywany jest skok pod podany adres, w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie podanego przesunięcia (będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów o dwa. Zawartość akumulatora nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: Akumulator zawiera 00H. Ciąg instrukcji
JNZ LABEL1
INC A
JNZ LABEL2
spowoduje umieszczenie w akumulatorze liczby 01H i przej cie z wykonywaniem programu
do miejsca oznaczonego etykiet LABEL2.
Operacja: JNZ
PC

= PC + 2
IF A <> 0 THEN
PC := PC + rel
Liczba

cykli: 2 Liczba bajtów: 2


[edytuj] JZ <adres_względny>

Funkcja: Skok jeśli zawartość akumulatora jest zerem


Opis: jeśli wszystkie bity akumulatora s zerami wykonywany jest skok pod podany adres, w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcję skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie podanego przesunięcia (będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów o dwa. Zawartość akumulatora nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.


Przykład: Akumulator zawiera 01H. Ciąg instrukcji
JZ LABEL1
DEC A
JZ LABEL2
spowoduje przyjęcie przez akumulator wartości OOH i przejście z wykonywaniem programu
do miejsca oznaczonego etykietą LABEL2.
Operacja: JZ
PC := PC + 2
IF A = 0 THEN
PC := PC + rel
Liczba cykli: 2 Liczba bajtów: 2

[edytuj] LCALL <adres_16-bitowy>

Funkcja: Dalekie wywołanie procedury

Opis: LCALL wywołuje procedur znajdującą się pod wskazanym adresem. Instrukcja powoduje zwiększenie zawartości licznika rozkazów o trzy, tak by wskazywać następną instrukcje, a następnie przesyłać 16-bitów zawartość licznika rozkazów na stos (najpierw młodszy bajt), zwiększając jednocześnie zawartośćwskaźnika stosu o dwa. Po wykonaniu powyższych czynności do licznika rozkazów ładowany jest adres procedury podany w drugim i trzecim bajcie kodu instrukcji, powoduj c tym samym przej cie z wykonywaniem programu do załadowanego adresu. Początek procedury może naleźć się w dowolnym miejscu 64K-bajtowego obszaru pamięci programu. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: Początkowo wskaźnik stosu zawiera 07H. Etykieta SUBRTN identyfikuje adres
1234H pamięci programu. Po wykonaniu umieszczonej pod adresem 0123H instrukcji
LCALL SUBRTN
wskaźnik stosu będzie zawierał 09H, bajty wewnętrznej pamięci RAM o adresach 08H i 09H
będą zawierały odpowiednio 26H i 01H, a zawartość licznika rozkazów będzie wynosiła
1234H.
Operacja: LCALL
PC := PC + 3
SP := SP + 1
[SP]

=PC7-0
SP := SP + 1
[SP] := PC15-8
PC15-0 := a15-0


Liczba cykli: 2 Liczba bajtów: 3

[edytuj] LJMP <adres_16-bitowy>

Funkcja: Długi skok

Opis: LJMP powoduje wykonanie bezwarunkowego skoku pod wskazany adres przez załadowanie do licznika rozkazów drugiego i trzeciego bajtu kodu instrukcji. Adres skoku może znaleźć się w dowolnym miejscu 64K-bajtowego obszaru pamięci programu. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: Etykieta JMPADR identyfikuje adres 1234H pamięci programu. Umieszczona pod
adresem 0123H instrukcja
LJMP JMPADR
spowoduje przyj cie przez licznik rozkazów wa o ci 1234H.
Operacja: LJMP
PC := a15-0
Liczba cykli: 2 Liczba bajtów: 3


[edytuj] MOV <bajt_przeznaczenia>, <bajt_źródłowy>

Funkcja: Przesłania zmiennej bajtowej.

Opis: zmienna bajtowa wskazana przez drugi z operandów jest kopiowana w miejsce identyfikowane przez pierwszy z operandów. Stan zmiennej źródłowej nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie. zmienna źródłowa i miejsce przeznaczenia w instrukcji przesłania zmiennej bajtowej mogą być adresowane łącznie na 15 różnych sposobów. Czyni to opisywaną instrukcję najbardziej elestyczną operacją w całej liście rozkazów mikrokontrolerów rodziny 51.

Przykład: Bajt wewnętrznej pamięci RAM znajdujący się pod adresem 30H zawiera 40H, a
pod adresem 40H tej pamięci umieszczona jest wartość 10H. Stan wyprowadzeń portu P1
reprezentuje liczba 11001010B (0CAH). Po wykonaniu ci gu instrukcji
MOV R0, #30H ; R0 := 30H
MOV A, @R0 ; A := 40H
MOV R1, A ;R1 := 40H
MOV B,@R1 ; B := 10H
MOV @R1, P1; RAM(40H) := 0CAH
MOV P2, P1 ; P2 := 0CAH
w rejestrze roboczym R1 znajdzie się wartość 30H, w rejestrze roboczym R1 i akumulatorze
będzie 40H, rejestr B będzie zawierał 10H, a w wewnętrznej pamięci RAM o adresie 40H
oraz w rejestrze wyjściowym portu P2 pojawi się 0CAH (11001010B).
MOV A, Rn
Operacja: MOV
A:=Rn
Liczba cykli : 1 Liczba bajtów : 1
MOV A, direct
Operacja: MOV
A := (direct)
Liczba cykli: 1 Liczba bajtów: 2
MOV A, @Ri
Operacja: MOV
A

= [Ri]
Liczba cykli: 1 Liczba bajtów: 1

MOV A, #data
Operacja: MOV
A := data
Liczba cykli: 1 Liczba bajtów: 2
MOV Rn, A
Operacja: MOV
Rn := A
Liczba cykli: 1 Liczba bajtów: 1



MOV Rn, direct
Operacja: MOV
Rn := (direct)
Liczba cykli : 2 Liczba bajtów

2
MOV Rn, #data
Opercja : MOV
Rn := data
Liczba

cykli : 1 Liczba bajtów : 2
MOV direct, A
Operacja

MOV
(direct) := A
Liczba cykli : 1 Liczba bajtów : 2


MOV direct, Rn
Operacja : MOV
(direct) := Rn
Liczba cykli : 2 Liczba bajtów : 2
MOV direct1, direct2
Operacja: MOV
(direct1) := (direct2)
Liczba cykli: 2 Liczba bajtów: 3
MOV direct @Ri
Operacja: MOV
(direct) := [Ri]
Liczba cykli: 2 Liczba bajtów: 2
MOV direct, #data
Operacja : MOV
(direct) := data
Liczba cykli : 2 Liczba bajtów : 3
MOV @Ri, A
Operacja MOV
[Ri] := A
Liczba cykli : 1 Liczba bajtów

1
MOV @Ri, direct
Operacja : MOV
[Ri] := direct


Liczba cykli : 2 Liczba bajtów : 2
MOV @Ri, #data
Operacja : MOV
[Ri] := data
Liczba cykli : 2 Liczba bajtów : 2


[edytuj] MOV <bit_przeznaczenia>, <bit_ źródłowy>

Funkcja: Przesłanie zmiennej bitowej

Opis: zmienna bitowa wskazana przez drugi z operandów jest kopiowana w miejsce identyfikowane przez pierwszy z operandów. Jednym z operandów musi być wskaźnik przeniesienia, drugim może by dowolny bit adresowalny bezpośrednio. Stan żadnego z rejestrów ani bitów, poza bitem przeznaczenia nie ulega zmianie.

Przykład: Początkowo wskaźnik przeniesienia jest ustawiony. Stan wyprowadzeń portu P3
reprezentuje liczba 11000101B, a w rejestrze wyjściowym portu
P1 umieszczona jest wartość 35H (00110101B). Wykonanie ci gu instrukcji
MOV P1.3, C
MOV C, P3.3
MOV P 1.2, C
spowoduje wyzerowanie wskaźnika przeniesienia i zmian zawartości rejestru wyj ciowego
portu P1 na 39H (00111001B).
MOV C, bit
Operacja: MOV
CY := (bit)
Liczba cykli : 1 Liczba bajtów : 2
MOV bit, C
Operacja : MOV
(bit)

= CY
Liczba cykli : 2 Liczba bajtów : 2


[edytuj] MOV DPTR, #<stała_16-bitowa>

Funkcja: Ładowanie wskaźnika danych stal 16-bitów


Opis: wskaźnik danych ładowany jest podaną stałą 16-bitów . Warto stałej określana jest stanem drugiego (DPH) i trzeciego (DPL) bajtu kodu instrukcji. Stan żadnego ze wskaźników nie ulega zmianie. Opisywana instrukcja jest jedyną instrukcją przesyłania wartości (stałej lub zmiennej) 16-bitowej.

Przykład: Instrukcja
MOV DPTR, #1234H
spowoduje załadowanie do wskaźnika danych stałej 1234H. Rejestr DPH będzie zawierał
12H, a rejestr DPL 34H.
Operacja: MOV
DPTR := d15-0 <=> (DPH := d15-8; DPL := d7-0)
Liczba cykli: 2 Liczba bajtów: 3


[edytuj] MOVC A, @A + <rejestr_bazowy>

Funkcja: Przesłanie bajtu kodu

Opis: Instrukcja MOVC przesyła do akumulatora bajt kodu lub stal umieszczoną w pamięci programu. Adres pobieranego bajtu kodu określany jest jako suma zawartości akumulatora (traktowanej jako 8-bitowa liczba bez znaku) i 16-bitowego rejestru bazowego, którym może by wskaźnik danych lub licznik rozkazów. W tym ostatnim przypadku zawartość licznika rozkazów jest wstępnie inkrementowana, tak by przed wykonaniem sumowania z zawartości akumulatora licznik rozkazów wskazywał instrukcję znajduj c się bezpośrednio za wykonywaną instrukcję MOVC. jeśli rejestrem bazowym jest wskaźnik danych, jego zawartość nie jest zmieniana. Sumowanie wykonywane jest jako 16-bitowe, tak e przeniesienie z młodszego bajtu jest uwzględniane w starszym bajcie. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: W akumulatorze znajduje się liczba z zakresu od 0do 3. Poniższy ciąg instrukcji
spowoduje umieszczenie w akumulatorze zawartości jednego
z bajtów kodu programu, zdefiniowanych za pomoc pseudoinstrukcji DB (definiuj bajtami).
REL_PC: INC A
MOVC A, @A + PC
RET
DB 66H
DB 77H
DB 88H
DB 99H
jeśli procedura REL PC zostanie wywołana przy zawartości akumulatora równej 01H, to po
powrocie z procedury w akumulatorze będzie wartość 77H. Instrukcja INC A umieszczona
przed instrukcją MOVC powoduje "przeskoczenie" instrukcji RET, oddzielającej instrukcję
MOVC od tablicy stałych. Gdyby tablica była oddzielona od instrukcji MOVC większą liczbę
bajtów kodu, to zawartośćakumulatora zwiększono by o odpowiedni wartość wykorzystując
instrukcję dodawania zamiast instrukcji inkrementacji.
MOVC A, @A + DPTR
Operacja: MOVC
A := (A + DPTR)
Liczba cykli: 3 Liczba bajtów: 1
MOVC A, @A + PC
Operacja: MOVC
PC := PC + 1
A := (A + PC)
Liczba cykli: 2 Liczba bajtów : 1


[edytuj] MOVX <bajt_przeznaczenia>, <bajt_źródłowy>

Funkcja: Przesłanie z udziałem zewnętrznej pamięci danych

Opis: Instrukcja MOVX sluży do przeprowadzania wymiany informacji między akumulatorem i zewnętrzną pamięcią danych. Przesiania za pomoc instrukcji MOVX mogą by wykonywane przy wykorzystaniu 8- lub 16-bitowego adresowania zewnętrznej pamięci RAM. Przy adresowaniu 8-bitowym zewnętrzna pamięć może by adresowana zawartości rejestru R0 lub R1. Adres Jest wystawiany na porcie P0 i jest multipleksowany z bajtem danych. Adresowanie 8-bitowe jest wystarczaj ce zwykle tylko przy korzystaniu z niewielkiej zewnętrznej pamięci danych lub przy sterowaniu zewnętrznych układów peryferyjnych. jeśli obszar adresowy układów zewnętrznych przekracza 256 bajtów, to do określania starszych bitów adresu przy adresowaniu 8-bitowym mogą być wykorzystane dowolne wyprowadzenia mikrokontrolera (bardzo często wykorzystuje się do tego celu linie portu P2). Stan tych wyprowadzeń musi by oczywiście odpowiednio ustawiany przed każdą operacją MOVX działając w trybie 8-bitowym. W przypadku adresowania 16-bitowego do adresowania wykorzystywany jest 16-bitowy wskaźnik danych DPTR. Podczas wykonywania instrukcji starszy bajt adresu (zawartość DPH) wystawiany jest na liniach portu P2, za młodszy bajt adresu (DPL)jest multipleksowany z bajtem danych na liniach portu PO. Po wykonaniu operacji przestania linie portu P2 powracaj do stanu sprzed jej wykonywania. Adresowanie 16-bitowe jest szybsze i wydajniejsze ni 8-bitowe w przypadku dużego obszaru adresowego układów zewnętrznych, ponieważ nie jest wtedy potrzebne wstępne ustalanie (za pomoc dodatkowej instrukcji) stanu starszych bitów adresowych przed każdą operacją MOVX. Możliwe jest naprzemienne stosowanie obu trybów adresowania.


Przykład: Zewnętrzna pamięć RAM o pojemności 256 bajtów z multipleksowaną szynę
danych i adresów (np. układ 8155) jest podłączona do portu pn mikrokontrolera. Liniami
sterującymi s odpowiednie linie portu P3. Linie portów P1 i P2 wykorzystywane s jako
zwykle linie wejścia/wyjścia. Rejestry robocze R0 i R1 zawieraj 12H i 34H. Pod adresem
34H zewnętrznej pamięci RAM umieszczono liczb 56H. Ciąg instrukcji
MOVX A,@R1
MOVX @R0.,A
spowoduje skopiowanie liczby 56H do akumulatora oraz pod adres 12H zewn trznej pamięci
RAM.
MOVX A, @Ri
Operacja : MOVX
A := [Ri]
Liczba cykli : 2 Liczba bajtów: 1
MOVX A, @DPTR
Operacja : MOVX
A

= [DPTR]
Liczba cykli : 2 Liczba bajtów : 1

MOVX @Ri, A
Operacja : MOVX
[Ri] := A
Liczba cykli : 2 Liczba bajtów: 1



MOVX @DPTR, A
Operacja : MOVX
[DPTR] := A
Liczba cykli : 2 Liczba bajtów : 1


[edytuj] MUL AB

Funkcja: Mnożenie

Opis: MUL AB mnoży dwie 8-bitowe liczby bez znaku umieszczone w akumulatorze i rejestrze B. młodszy bajt 16-bitowego iloczynu umieszczany jest w akumulatorze, starszy bajt w rejestrze B. jeśli wynik jest większy od 255 (0FFH) ustawiany jest wskaźnik przepełnienia, za jeśli starszy bajt wyniku jest zerem wskaźnik OV jest zerowany. wskaźnik przeniesienia jest zawsze zerowany.

Przykład: Początkowo akumulator zawiera liczb 80 (50H), a rejestr B liczb 160 (0A0H).
Wykonanie instrukcji
MUL AB
da wynik 12800 (3200H), a zatem w rejestrze B znajdzie się liczba 32H, a akumulator
zostanie wyzerowany. wskaźnik przepełnienia będzie ustawiony, a wskaźnik przeniesienia
wyzerowany.
Operacja: MUL
A := (A x B) mod 256
B := (A x B) div 256
Liczba cykli : 4 Liczba bajtów : 1


[edytuj] NOP

Funkcja: Wykonanie operacji pustej (wytracanie czasu)

Opis: Następuje przejście do następnej instrukcji. Stan żadnego ze wskaźników ani rejestrów, poza licznikiem rozkazów, nie ulega zmianie.

Przykład: Na wyprowadzeniu P2.7 mikrokontrolera należy wygenerować ujemny impuls
trwaj cy 5 cykli maszynowych. Zwykła sekwencja instrukcji CLR/SETB spowodowałaby
wygenerowanie impulsu trwającego zaledwie jeden cykl maszynowy, należy alo by zatem
wstawi dodatkowe cztery cykle.
dany impuls można zatem wygenerować (przy założeniu
i wszystkie przerwania s zablokowane) np. za pomoc ciągu instrukcji
CLR P2.7
NOP
NOP
NOP
NOP
SETB P2.7
Operacja: NOP
Liczba cykli : 1 Liczba bajtów : 1


[edytuj] ORL <bajt_przeznaczenia>, <bajt_źródłowy>

Funkcja: Logiczna funkcja OR dwóch zmiennych

Opis: ORL oblicza bitową sumę logiczną dwóch wskazanych zmiennych bitowych (każdy bajt traktowany jest jako zbiór ośmiu bitów). Wynik operacji umieszczany jest w pierwszej z wymienionych zmiennych. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników. Możliwych jest 6 różnych kombinacji trybów adresowania dla dwóch używanych przez instrukcję operandów. jeśli miejscem przeznaczenia wyniku jest akumulator, to zmienna źródłowa może by adresowana w trybie rejestrowym, bezpośrednim, pośrednim (zawartości rejestru) lub natychmiastowym. jeśli miejsce przeznaczenia wyniku jest adresowane bezpośrednio , to zmienna źródłowa może by akumulatorem lub zmienną adresowaną w trybie natychmiastowym.

Uwaga: jeśli instrukcja jest wykorzystywana do zmiany stanu linii portu, to wartości użytą jako pierwotny stan portu będzie wartość odczytana z rejestru wyjściowego portu, a nie rzeczywisty stan wyprowadzeń portu.

Przykład: jeśli akumulator zawiera 0C3H (11000011B), rejestr R0 zawiera 55H (01010101
B), to instrukcja
ORL A, R0
pozostawi w akumulatorze wartość OD7H (11010111B).
Instrukcję można wykorzystywać do ustawiania bitów wybranego bajtu wewnętrznej pamięci
RAM lub rejestru - jeśli miejscem przeznaczenia wyniku jest bajt adresowany bezpośrednio.
Maska określająca, które bity będą ustawiane jest wówczas stal wyszczególnioną w
instrukcji lub zawartości akumulatora (zwykle uzyskaną z poprzedzających instrukcję
obliczeń). Instrukcja
ORL P1,

  1. 00110010B
    spowoduje ustawienie bitów 5, 4 i 1portu P1.


ORL A, Rn
Operacja: ORL
A := A or Rn
Liczba cykli: 1 Liczba bajtów: 1
ORL A, direct
Operacja: ORL
A := A or (direct)
Liczba cykli : 1 Liczba bajtów

2
ORL A, @Ri
Operacja ORL
A := A or [Ri]
Liczba

cykli : 1 Liczba bajtów : 1
ORL A, #data
A := A or data
Liczba cykli : 1 Liczba bajtów : 2



ORL direct, A
Operacja ORL
(direct) := A or (direct)
liczba cykli : 1 Liczba bajtów

2
ORL direct, #data
Operacja ORL
(direct) :=

(direct) or data
Liczba cykli : 2 Liczba bajtów : 3

[edytuj] ORL C, <bit źródłowy>

Funkcja: Logiczna funkcja OR zmiennych bitowych

Opis: Instrukcja ustawia wskaźnik przeniesienia, jeśli wartość bitu będącego drugim z podanych operandów jest jedynką. W przeciwnym razie stan wskaźnika przeniesienia pozostaje bez zmian. Operacja nie zmienia stanu pozostałych wskaźników. jeśli drugi z operandów jest poprzedzony kreską ukośną "/", to do wykonania operacji używana jest zanegowana wartość wskazanego bitu (stan bitu źródłowego nie ulega jednak zmianie). Operandami źródłowymi mogą być tylko bity adresowalne bezpośrednio.

Przykład: Wykonanie ciągu instrukcji
MOV C, P1.0 ; przesłanie stanu wyprowadzenia portu do wskaźnika przeniesienia
ORL C, ACC.7 ; suma logiczna wskaźnika przeniesienia z bitem 7 akumulatora
ORL C, /OV ; suma logiczna wskaźnika przeniesienia z negacją wskaźnika OV
spowoduje ustawienie wskaźnika przeniesienia tylko wtedy, gdy P1.0=1, ACC.7=1 lub
OV=0.
ORL C, bit
Operacja: ORL
CY := CY \/ (bit)
Liczba cykli : 2 Liczba bajtów : 2
ORL C, /bit
Operacja: ORL
CY := CY \/ ~(bit)
Liczba cykli : 2 Liczba bajtów : 2


[edytuj] POP <bajt_adresowany_bezpośrednio>

Funkcja: Pobranie bajtu ze stosu

Opis: Bajt wewnętrznej pamięci RAM o adresie określonym przez zawartość wskaźnika stosu jest odczytywany, a zawartość wskaźnika stosu jest zmniejszana o jeden. Odczytana wartość jest umieszczana pod adresem identyfikowanym przez operand instrukcji. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: wskaźnik stosu zawiera pocz tkowo liczb 32H, a wewnętrzna pamięć RAM o
adresach od 30H do 32H zawiera odpowiednio liczby 20H, 23H
i 01H. Ciąg instrukcji
POP DPH
POP DPL
spowoduje umieszczenie we wskaźniku danych liczby 0123H i zmniejszenie zawartości
wskaźnika stosu do 30H. Wykonanie wówczas instrukcji
POP SP
spowoduje przyj cie przez wskaźnik stosu wartości 20H należy zauważy , ze w tym
szczególnym przypadku zawartość wskaźnika stosu została zmniejszona o jeden (do wartości
2FH) przed umieszczeniem w tym wskaźniku wartości 20H odczytanej ze stosu
Operacja: POP
(direct) := [SP]
SP

= SP - 1
Liczba cykli: 2 Liczba bajtów: 2


[edytuj] PUSH <bajt_adresowany_bezpośrednio>

Funkcja: Umieszczenie bajtu na stosie Opis: Zawartość wskaźnika stosu jest zwiększana o jeden. Następnie zawartość bajtu identyfikowanego przez operand instrukcji umieszczana jest w wewnętrznej pamięci RAM, pod adresem określonym przez zawartość wskaźnika stosu. Stan żadnego z pozostałych rejestrów, ani wskaźników nie ulega zmianie.

Przykład: wskaźnik stosu zawiera liczb 09H, a wskaźnik danych zawiera 1234H.
Ciąg instrukcji
PUSH DPH
PUSH DPL
spowoduje umieszczenie w wewnętrznej pamięci RAM o adresach 0AH i 0BH liczb 34H i
12H, oraz zwiększenie zawartości wskaźnika stosu do 0BH.
Operacja: PUSH
SP := SP + 1
[SP] := (direct)
Liczba cykli: 2 Liczba bajtów: 2


[edytuj] RET

Funkcja: Powrót z procedury

Opis: RET pobiera ze stosu dwa bajty, umieszczaj c je w starszym i młodszym bajcie licznika rozkazów oraz zmniejszając zawartość wskaźnika stosu o dwa. Działanie programu kontynuowane JC się od, ustawionego w ten sposób, nowego adresu - z reguły jest to adres instrukcji położonej bezpośrednio za instrukcją ACALL lub LCALL, która wywołała procedur . Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: wskaźnik stosu zawiera liczb OBH, a wewnętrzna pamięćęć
RAM o adresach OAH
i OBH zawiera odpowiednio 23H i 01H. Instrukcja
RET
spowoduje kontynuację programu począwszy od adresu 0123H oraz
przyj cie przez wskaźnik stosu wartości 09H.
Operacja: RET
PC15-8 := [SP]
SP

= SP - 1
PC7-0 := [SP]
SP := SP - 1
Liczba cykli: 2

Liczba bajtów: 1


[edytuj] RETI

Funkcja: Powrót z procedury obsługi przerwania

Opis: RETI pobiera ze stosu dwa bajty, umieszczaj c je w starszym i młodszym bajcie licznika rozkazów oraz zmniejsza zawartość wskaźnika stosu o dwa. Przywracana jest możliwość obsługi przerwa o priorytecie takim samym jak przed wystąpieniem przerwania, którego obsługa jest właśnie kończona. Stan żadnego ze wskaźników nie ulega zmianie. Stan rejestru PSW sprzed przerwania nie jest automatycznie odtwarzany. Działanie programu kontynuowane jest z reguły od adresu instrukcji polo onej bezpośrednio za instrukcję , podczas wykonywania której wykryte zostało danie obsługi przerwania. Instrukcja, od której program bidzie kontynuowany, zostanie wykonana przed przej ciem do obsługi nowego przerwania nawet wtedy, gdy danie nowego przerwania wystąpi już podczas wykonywania instrukcji RETI.

Przykład: wskaźnik stosu zawiera liczb OBH, a wewnętrzna pamięćęć
RAM o adresach 0AH
i 0BH zawiera odpowiednio 23H i 01H. Obsługiwane przerwanie zostało wykryte podczas
wykonywania instrukcji, której ostatni bajt kodu znajduje się pod adresem 0122H. Instrukcja
RETI
spowoduje kontynuację programu począwszy od adresu 0123H oraz przyj cie przez wskaźnik
stosu wartości 09H.
Operacja: RETI
PC15-8 := [SP]
SP := SP - 1
PC7-0 - [SP]
SP

= SP - 1
Liczba cykli : 2 Liczba bajtów : 1


[edytuj] RL A

Funkcja: Cykliczne przesunięcie zawartości akumulatora w lewo

Opis: Osiem bitów akumulatora przesuwanych jest w lewo o jeden bit. przesunięcie jest cykliczne - w wyniku przesunięcia bit 7 akumulatora umieszczany jest na pozycji bitu 0. Stan żadnego ze wskaźników me ulega zmianie.

Przykład: Akumulator zawiera liczb 0C5H (11000101B). Instrukcja
RL A
spowoduje przyj cie przez akumulator wartości 8BH (10001011B). Stan wskaźnika
przeniesienia nie ulegnie zmianie.
Operacja: RL
FOR n := 6 DOWNTO 0 DO
An+1 := An
A7 := A0(stare)
Liczba cykli: 1 Liczba bajtów: 1


[edytuj] RLC A

Funkcja: Cykliczne przesunięcie zawartości akumulatora w lewo z udziałem wskaźnika przeniesienia

Opis: Osiem bitów akumulatora przesuwanych jest w lewo o jeden bit z przej ciem przez wskaźnik CY - bit 7 akumulatora przesuwany jest do wskaźnika przeniesienia. przesunięcie jest cykliczne - w wyniku przesunięcia początkowa zawartość wskaźnika przeniesienia umieszczana jest na pozycji bitu 0 akumulatora. Stan żadnego z pozostałych wskaźników nie ulega zmianie.

Przykład: Akumulator zawiera liczb OC5H (11000101B), a wskaźnik przeniesienia jest
wyzerowany. Instrukcja
RLC A
spowoduje przyj cie przez akumulator wartości 8AH (10001010B). wskaźnik przeniesienia
zostanie ustawiony.
Operacja: RLC
CY:=A7
FOR n

= 6 DOWNTO 0 DO
An+1 := An
A0 := CY(stare)
Liczba cykli
1 Liczba bajtów : 1


[edytuj] RRC A

Funkcja: Cykliczne przesunięcie zawartości akumulatora w prawo z udziałem wskaźnika przeniesienia

Opis: Osiem bitów akumulatora oraz bit CY przesuwanych jest w prawo o jeden bit z przej ciem przez wskaźnik CY - bit O akumulatora przesuwany jest do wskaźnika przeniesienia. przesunięcie jest cykliczne - w wyniku przesunięcia początkowa zawartość wskaźnika przeniesienia umieszczana jest na pozycji bitu 7 akumulatora. Stan żadnego ze pozostałych wskaźników nie ulega zmianie.

Przykład: Akumulator zawiera liczb OC5H (l 1000101B), a wskaźnik przeniesienia jest
wyzerowany. Instrukcja
RRC A
spowoduje przyj cie przez akumulator wartości 62H (01100010B). wskaźnik przeniesienia
zostanie ustawiony.
Operacja: RRC
CY := A0
FOR n := 0 TO 6 DO
An := An+1
A7 := CY(stare)
Liczba cykli : 1 Liczba bajtów : 1


[edytuj] SETB <bit>

Funkcja: Ustawienie bitu

Opis: Wskazany bit jest ustawiany. Żaden ze wskaźników nie ulega zmianie. Instrukcja może by przeprowadzona wyłącznie na wskaźniku przeniesienia lub dowolnym bicie adresowalnym bezpośrednio.

Przykład: wskaźnik przeniesienia jest wyzerowany. Rejestr portu Pl zawiera 34H
(00110100B). Instrukcje
SETB C
SETB P 1.O
spowoduj ustawienie bitu przeniesienia i zmian zawartości rejestru portu P1 na
35H(00110101B).
SETB C
Operacja: SETB
CY := 1
Liczba cykli : 1 Liczba bajtów : 1
SETB bit
Operacja: SETB
(bit) := 1
Liczba cykli : 1 Liczba bajtów : 2


[edytuj] SJMP <adres_względny>

Funkcja: Skok krótki

Opis: Wykonywany jest bezwarunkowy skok pod podany adres. Wartość adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (operandu, będącego 8-bitową liczbą ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów o dwa. Zasię g skoku rozciąga się zatem od 128 bajtów przed do 127 bajtów za wykonywaną instrukcją SJMP. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: Etykieta RELADR identyfikuje adres 0123H pamięci programu. Instrukcja
SJMP RELADR
znalazła się pod adresem 0100H. Po jej wykonaniu licznik rozkazów będzie zawierał liczb
0123H.

Uwaga: W omawianym Przykładzie instrukcja występująca bezpośrednio za instrukcją skoku będzie polo ona pod adresem 0102H. przesunięcie będzie zatem wynosiło (0123H-0102H)=21H. Warto zauważyć, że użycie instrukcji skoku krótkiego, w której wartość adresu względnego będzie równa 0FEH, utworzy nieskończoną pętlę , zlożoną z pojedynczej
instrukcji.
Operacja: SJMP
PC := PC + 2
PC := PC + rel
Liczba cykli : 1 Liczba bajtów : 2

[edytuj] SUBB A, <bajt_źródłowy>

Funkcja: Odejmowanie z pożyczką

Opis: SUBB powoduje odjęcie zawartości wskazanej zmiennej oraz bitu przeniesienia od zawartości akumulatora i pozostawia wynik operacji w akumulatorze. wskaźnik przeniesienia (funkcjonujący w tym przypadku jako wskaźnik pożyczki) jest ustawiany, jeśli występuje pożyczka z 8 bitu. W przeciwnym razie (brak pożyczki) wskaźnik przeniesienia jest zerowany. Sygnalizowanie pożyczki umożliwia realizację odejmowania wielokrotnej precyzji. W takim wypadku należy pamiętać, by odejmowanie najmłodszych częci liczb było wykonywane przy wyzerowanym wskaźniku przeniesienia (pożyczki). Pomocniczy wskaźnik przeniesienia jest ustawiany, jeśli występuje pożyczka z 4 bitu. W przeciwnym razie pomocniczy wskaźnik przeniesienia jest zerowany. Bit OV jest ustawiany tylko wtedy, gdy wyst pila pożyczka na bicie 7, przy braku pożyczki na bicie 8 lub gdy wystąpiła pożyczka na bicie 8, przy braku pożyczki na bicie 7. W pozostałych przypadkach OV jest zerowany. jeśli odejmowane s liczby ze znakiem, OV sygnalizuje otrzymanie dodatniego wyniku przy odejmowaniu liczby dodatniej od liczby ujemnej, bądź ujemnego wyniku przy odejmowaniu liczby ujemnej od liczby dodatniej. Do adresowania operandu źródłowego można wykorzysta jeden z następujących trybów adresowania: rejestrowe, bezpośrednie, pośrednie zawartości rejestru lub natychmiastowe.

Przykład: Akumulator zawiera 0C9H (11001001B), rejestr R2 zawiera 54H (01010100B), a
wskaźnik poniesienia jest ustawiony. Instrukcja
SUBB A, R2
pozostawi, w akumulatorze wartość 74H (01110100B), wyzeruje pomocniczy wskaźnik
przeniesienia AC i wskaźnik przeniesienia CY oraz ustawi bit OV. Należy zauważyć, że
0C9H minus 54H jest równe 75H. Różnica między t wartości , a wynikiem otrzymanym w
przedstawionym Przykładzie wynika z wykonania operacji odejmowania przy ustawionym
bicie przeniesienia (pożyczki).
SUBB A, Rn
Operacja: SUBB
A

= A - Rn - CY
Liczba cykli : 1 Liczba bajtów : 1

SUBB A, direct
Operacja: SUBB
A := A - (direct) - CY
Liczba cykli : 1 Liczba bajtów : 2
SUBB A, @Ri
Operacja: SUBB
A := A - [Ri] - CY
Liczba cykli : 1 Liczba bajtów

1
SUBB A, #data
Operacja: SUBB
A := A - data -

CY
Liczba cykli : 1 Liczba bajtów : 2


[edytuj] SWAP A

Funkcja: Zamiana miejscami polówek akumulatora

Opis: SWAP A zamienia miejscami zawartość starszej i młodszej polówki akumulatora (składających się z 4 bitów ka da). Operacja może być rozpatrywana jako cykliczne przesunięcie zawartości akumulatora 0 cztery bity. Stan żadnego ze wskaźników nie ulega zmianie.

Przykład: Akumulator zawiera liczb 0C5H (11000101B). Instrukcja
SWAP A
powoduje przyj cie przez akumulator wartości 5CH (010111000B)
Operacja: SWAP
A3-0

= A7-4
A7-4 := A3-0 (stare)
Liczba cykli : 1 Liczba bajtów
1

[edytuj] XCH A, <bajt>

Funkcja: Wymiana zawartości akumulatora i zmiennej bajtowej

Opis: XCH powoduje wpisanie do akumulatora zawartości wskazanej zmiennej z jednoczesnym przepisaniem początkowej zawartości akumulatora do tej zmiennej. Drugi z operandów może by rejestrem roboczym, zmienną adresowaną bezpośrednio lub pośrednio zawartości rejestru.

Przykład: Rejestr RO zawiera liczb 20H, akumulator 3FH (00111111B) a bajt wewnętrznej
pamięci RAM o adresie 20H zawiera 75H (01110101B). Instrukcja
XCH A, @RO
spowoduje przyj cie przez bajt wewnętrznej pamięci RAM o adresie 20H wartości 3FH
(00111111B), a przez akumulator wartości 75H (01110101B).
XCH A, Rn
Operacja: XCH
A := Rn
Rn

= A(stare)
Liczba cykli : 1 Liczba bajtów: 1

XCH A, direct
Operacja: XCH
A := (direct)
(direct) := A(stare)
Liczba cykli : 1 Liczba bajtów: 2
XCH A, @Ri
Operacja: XCH
A := [Ri]
[Ri] := A(stare)
Liczba cykli: 1 Liczba bajtów: 1


[edytuj] XCHD A, @Ri

Funkcja: Wymiana cyfr

Opis: XCHD powoduje wymian młodszych polówek (bitów 0-3, stanowiących zwykle cyfr szesnastkowa lub dziesiętną w kodzie BCD) akumulatora i bajtu wewnętrznej pamięci RAM (zaadresowanego pośrednio zawartości wskazanego rejestru). Stan żadnego ze wskaźników nie ulega zmianie

Przykład: Rejestr R0 zawiera liczb 20H, akumulator 36H (00110110B), a bajt wewnętrznej
pamięci RAM o adresie 20H zawiera 75H (01110101). Instrukcja
XCHD A, @RO
spowoduje przyj cie przez bajt wewnętrznej pamięci RAM o adresie 20H wartości 76H
(01110110B), a przez akumulator wartości 35 (00110101B).
Operacja: XCHD
A3-0 := [Ri]3-0
[Ri]3-0 := A3-0(stare)
Liczba cykli : 1 Liczba bajtów : 1


[edytuj] XRL <bajt_przeznaczenia>, <bajt_źródłowy>

Funkcja: Logiczna funkcja EXOR dwóch zmiennych

Opis: XRL oblicza bitową sum modulo dwa dwóch wskazanych zmiennych bajtowych (każdy bajt traktowany jest jako zbiór ośmiu bitów). Wynik operacji umieszczany jest w pierwszej z wymienionych zmiennych. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników. Możliwych jest 6 różnych kombinacji trybów adresowania dla dwóch używanych przez instrukcję operandów. jeśli miejscem przeznacza wyniku jest akumulator, to zmienna źródłowa może by adresowana w trybie rejestrowym, bezpośrednim, pośrednim (zawartości rejestru) lub natychmiastowym. jeśli miejsce przeznaczenia wyniku jest adresowane bezpośrednio, to zmienna źródłowa może by akumulatorem lub zmienną adresowaną w trybie natychmiastowym.

Uwaga: jeśli instrukcja jest wykorzystywana do zmiany stanu linii portu, to wartości u yt
jako pierwotny stan portu będzie wartość odczytana z rejestru wyj ciowego portu, a nie
rzeczywisty stan wyprowadzeń portu.
XRL A, Rn
Operacja: XRL
A := A xor Rn
Liczba cykli: 1 Liczba bajtów: 1
XRL A, direct
Operacja: XRL
A := A xor (direct)
Liczba cykli: 1 Liczba bajtów: 2
XRL A, @Ri
Operacja: XRL
A

= A xor [Ri]
Liczba cykli: 1 Liczba bajtów: 1

XRL A, #data
Operacja: XRL
A := A xor data
Liczba cykli: 1 Liczba bajtów: 2
XRL direct, A
Operacja: XRL
(direct) := A xor (direct)
Liczba cykli: 1 Liczba bajtów: 2
XRL direct, #data
Operacja: XRL
(direct) := (direct) xor data
Liczba cykli: 2 Liczba bajtów: 3


[edytuj] Źródło

Ten materiał jest chroniony prawem autorskim
Autor wyraził zgodę na publikację tego opracowania na tej witrynie
Wyłączność na rozpowszechnianie tego dokumentu posiada: http://mikrokontrolery.net
Jeśli znalazłeś ten dokument na innej stronie, napisz:
Radoslaw.Kwiecien/at/interia.pl
Jeśli chcesz umieścic ten dokument na swojej stronie, lub na płycie CD-ROM, napisz:
Radoslaw.Kwiecien/at/interia.pl
Dokument opracowano na podstawie książki
„Mikrokontrolery jednoukładowe rodziny 8051” Tomasza Stareckiego.

Osobiste
Przestrzenie nazw
Warianty
Działania
Nawigacja
Narzędzia