Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Instrukcje maszynowe PIC

Rodzina średnia rozszerzona
(ang. Enhanced mid-range family)

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Wprowadzenie

W odpowiedzi na rosnące zapotrzebowanie na 8-bitowe mikrokontrolery o wysokiej wydajności i wyposażone w zaawansowane moduły peryferyjne firma Microchip opracowała ulepszone mikrokontrolery PIC z rodziny średniej, ponieważ układy te odniosły niewątpliwy sukces na rynku mikrokontrolerów. Do rodziny tej należą układy z serii PIC12F1xxx i PIC16F1xxx.

Biorąc najlepsze elementy istniejącej rodziny średniej mikrokontrolerów PIC, rodzina rozszerzona udostępnia zwiększoną wydajność oraz ulepszone adresowanie pamięci programu FLASH do 56 KB i pamięci danych RAM do 4 KB. Pozwala to tworzyć bardziej różnorodny kod o zwiększonej funkcjonalności w bardziej złożonych aplikacjach – co jest szczególnie przydatne przy tworzeniu programów w języku C. W klasie rozszerzonej liczba dostępnych instrukcji została zwiększona do 49, co zoptymalizowało kod programu oraz przetwarzanie danych. W efekcie program zajmuje do 40% mniej miejsca w pamięci, a wzrost wydajności wyniósł do 50% w różnych algorytmach i funkcjach.

Poniższy rysunek przedstawia schemat blokowy mikrokontrolera PIC rodziny rozszerzonej:

Cechy mikrokontrolera PIC z rozszerzonej rodziny średniej:

Poniższa tabelka przedstawia porównanie rodziny rozszerzonej mikrokontrolerów PIC z rodziną średnią:

Parametr Rodzina średnia Rodzina rozszerzona
Długość instrukcji 14 bitów 14 bitów
Adresowalna pamięć programu 8 K instrukcji 32 K instrukcji
Pamięć RAM 446 bajtów ponad 3 KB
Liczba banków RAM 4 32
Liczba instrukcji 35 49
Stos sprzętowy 8 poziomów 16 poziomów z resetem
Obsługa przerwań programowa sprzętowa
Rejestry adresowania pośredniego 1 x 9 bitów 2 x 16 bitów
Na początek:  podrozdziału   strony 

Budowa instrukcji PIC

Każda instrukcja PIC w rodzinie rozszerzonej jest 14-bitowym słowem zawierającym kod operacji (ang. operation code – w skrócie opcode) oraz wszystkie wymagane argumenty. Kody operacyjne są podzielone na trzy kategorie:

Kategoria stałych i sterowania zawiera najbardziej zróżnicowane formaty słowa instrukcji. Na końcu tego podrozdziału znajduje się tabelka z instrukcjami rozpoznawanymi przez asembler MPASMTM.

Wszystkie instrukcje są wykonywane w czasie pojedynczego cyklu rozkazowego z następującymi wyjątkami, które mogą zająć dwa lub trzy cykle:

Każdy cykl rozkazowy (Tcy) złożony jest z czterech taktów Q (Q1-Q4). Takt Q jest taki sam jak takt oscylatora mikrokontrolera (TOSC). Takty Q wyznaczają w każdym cyklu rozkazowym okresy dekodowania, odczytu, przetwarzania danych, zapisu, itp. Poniższy wykres pokazuje związek taktów Q z cyklami rozkazowymi. Ogólnie cztery takty Q w cyklu rozkazowym można ogólnie podzielić na:

Q1: Takt dekodowania instrukcji lub wymuszona instrukcja pusta
Q2: Takt odczytu danych lub instrukcja pusta
Q3: Przetwarzanie danych
Q4: Takt zapisu danych lub instrukcja pusta

Operacje R-M-W (ang. Read-Modify-Write – odczyt-modyfikacja-zapis)

Każda instrukcja odwołująca się w kodzie do rejestru RAM wykonuje operację R-M-W. Dany rejestr jest odczytywany, odczytane dane są modyfikowane, a wynik zostaje zapisany albo zgodnie z instrukcją, albo z desygnatorem przeznaczenia d. Operacja odczytu jest wykonywana, nawet gdy instrukcja jedynie zapisuje do danego rejestru.

Opis pól kodu instrukcji

Pole Opis
opcode Kod operacyjny określający rodzaj operacji, którą wykonuje instrukcja
f Adres rejestru w RAM (0x00 ... 0x7F)
W Rejestr roboczy (akumulator)
b Numer bitu wewnątrz 8-bitowego rejestru
k Pole stałej, dane stałe lub etykieta
d Wybór rejestru docelowego:
d = 0, wynik trafi do akumulatora W
d = 1, wynik trafi do rejestru f w RAM
Wartość standardowa d = 1.
n Numer FSR lub INDF (0 ... 1)
mm Wybór trybu pre-/post- inkrementacji/dekrementacji.

Opis skrótów

Skrót Opis
PC Licznik programu (ang. Program Counter)
TO Bit przekroczenia czasu (ang. Time-out bit)
C Bit przeniesienia (ang. Carry bit)
DC Przeniesienie z cyfry (ang. Digit carry bit)
Z Bit zera (ang. Zero bit)
PD Bit wyłączenia zasilania (ang. Power-down bit)

Ogólne formaty instrukcji

Operacje bajtowe na zestawie rejestrów

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode d f
d = 0, wynik do W
d = 1, wynik do f
f = 7-bitowy numer rejestru

Operacje bitowe na zestawie rejestrów

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode b f
b = 3-bitowy numer bitu
f = 7-bitowy numer rejestru

Operacje ze stałą i operacje sterujące

Ogólnie:

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode k

Tylko instrukcje GOTO i CALL:

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode k
k = 11-bitowa stała

Tylko instrukcja MOVLP

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode k
k = 7-bitowa stała

Tylko instrukcja MOVLB

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode k
k = 5-bitowa stała

Tylko instrukcja BRA

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode k
k = 9-bitowa stała

Instrukcje z przesunięciem FSR

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode n k
n = odpowiedni FSR
k = 6-bitowa stała

Instrukcje inkrementacji FSR

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode n m
n = odpowiedni FSR
m = 2-bitowa wartość trybu

Tylko kod operacyjny

b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00
opcode

Rozszerzony zestaw instrukcji PIC

Mnemonik,
argumenty
Opis Cykle
roz.
14-bitowe słowo instrukcji Zmieniane
znaczniki
Uwagi
MSB...   ...LSB
Operacje bajtowe na rejestrach
ADDWF f, d Dodanie W i f 1 00 0111 dfff ffff C, DC, Z 2
ADDWFC f, d Dodanie z przeniesieniem W if 1 11 1101 dfff ffff C, DC, Z 2
ANDWF f, d Koniunkcja W z f 1 00 0101 dfff ffff Z 2
ASFR f, d Przesunięcie arytmetyczne w prawo 1 11 0111 dfff ffff C,Z 2
LSLF f, d Przesunięcie logiczne w lewo 1 11 0101 dfff ffff C, Z 2
LSRF f, d Przesunięcie logiczne w prawo 1 11 0110 dfff ffff C, Z 2
CLRF f Zerowanie f 1 00 0001 1fff ffff Z 2
CLRW Zerowanie W 1 00 0001 0000 00xx Z  
COMF f, d Zanegowanie f 1 00 1001 dfff ffff Z 2
DECF f, d Zmniejszenie o 1 f 1 00 0011 dfff ffff Z 2
INCF f, d Zwiększenie o 1 f 1 00 1010 dfff ffff Z 2
IORWF f, d Alternatywa W z f 1 00 0100 dfff ffff Z 2
MOVF f, d Przesłanie f 1 00 1000 dfff ffff Z 2
MOVWF f Przesłanie W do f 1 00 0000 1fff ffff   2
RLF f, d Obrót w lewo  poprzez przeniesienie 1 00 1101 dfff ffff C 2
RRF f, d Obrót w prawo  poprzez przeniesienie 1 00 1100 dfff ffff C 2
SUBWF f, d Odjęcie W od f 1 00 0010 dfff ffff C, DC, Z 2
SUBWFB f, d Odjęcie z pożyczką W od f 1 11 1011 dfff ffff C, DC, Z 2
SWAPF f, d Zamiana połówek f 1 00 1110 dfff ffff   2
XORWF f, d Różnica symetryczna W z f 1 00 0110 dfff ffff Z 2
Operacje bajtowe pomijania
DECFSZ f, d Zmniejszenie o 1 f, pominięcie przy zerze 1/2 00 1011 dfff ffff   1, 2
INCFSZ f, d Zwiększenie o 1 f, pominięcie przy zerze 1/2 00 1111 dfff ffff   1, 2
Operacje bitowe na rejestrach
BCF f, b Zerowanie bitu w f 1 01 00bb bfff ffff   2
BSF f, b Ustawianie bitu w f 1 01 01bb bfff ffff   2
Operacje bitowe pomijania
BTFSC f, b Testowanie bitu w f, pominięcie przy wyzerowanym 1/2 01 10bb bfff ffff   1, 2
BTFSS f, b Testowanie bitu w f, pominięcie przy ustawionym 1/2 01 11bb bfff ffff   1, 2
Operacje ze stałą
ADDLW k Dodanie stałej i W 1 11 1110 kkkk kkkk C, DC, Z  
ANDLW k Koniunkcja stałej z W 1 11 1001 kkkk kkkk Z  
IORLW k Alternatywa stałej z W 1 11 1000 kkkk kkkk Z  
MOVLB k Umieszczenie stałej w BSR 1 00 0000 001k kkkk    
MOVLP k Umieszczenie stałej w PCLATH 1 11 0001 1kkk kkkk    
MOVLW k Umieszczenie stałej w W 1 11 0000 kkkk kkkk    
SUBLW k Odjęcie W od stałej 1 11 1100 kkkk kkkk C, DC, Z  
XORLW k Różnica symetryczna stałej z W 1 11 1010 kkkk kkkk Z  
Operacje sterujące
BRA k Bezwarunkowy skok względny 2 11 001k kkkk kkkk    
BRW Bezwarunkowy skok względny o W 2 00 0000 0000 1011    
CALL k Wywołanie podprogramu 2 01 0kkk kkkk kkkk    
CALLW Wywołanie podprogramu przy pomocy W 2 00 0000 0000 1010    
GOTO k Skok pod adres k 2 01 1kkk kkkk kkkk    
RETFIE Powrót z przerwania 2 00 0000 0000 1010    
RETLW k Powrót z podprogramu ze stałą w W 2 11 0100 kkkk kkkk    
RETURN Powrót z podprogramu 2 00 0000 0000 1000    
Operacje podstawowe
CLRWDT Zerowanie timera licznika zegarowego 1 00 0000 0110 0100 TO, PD  
NOP Operacja pusta 1 00 0000 0000 0000    
OPTION Załadowanie rejestru OPTION_REG zawartością W 1 00 0000 0110 0010    
RESET Programowy reset mikrokontrolera 1 00 0000 0000 0001    
SLEEP Przejście w tryb oczekiwania (uśpienie) 1 00 0000 0110 0011 TO, PD  
TRIS f Załadowanie rejestru TRIS zawartością W 1 00 0000 0110 0fff    
Operacje zoptymalizowane dla kompilatora C
ADDFSR n, k Dodanie stałej k do rejestru FSRn 1 11 0001 0nkk kkkk    
MOVIW n, mm Przesłanie pośrednie FSRn do W z modyfikacją określoną przez mm 1 00 0000 0001 0nmm Z 2, 3
MOVIW k[n] Załadowanie INDFn do W, pośrednio z indeksowaniem 1 11 1111 0nkk kkkk Z 2
MOVWI n, mm Przesłanie pośrednie W do FSRn z modyfikacją określoną przez mm 1 00 0000 0001 1nmm   2, 3
MOVWI k[n] Załadowanie W do INDFn, pośrednio z indeksowaniem 1 11 1111 1nkk kkkk   2
Uwagi: 1. Jeśli jest modyfikowany licznik programu (PC) lub test warunkowy jest prawdziwy, to dana instrukcja wymaga 2 cykli rozkazowych. W drugim cyklu jest wykonywana instrukcja pusta NOP.
  2. Jeśli instrukcja ta adresuje rejestr INDF, a najstarszy bit odpowiadającego mu rejestru FSR jest ustawiony na 1, to instrukcja wymaga dodatkowego cyklu rozkazowego.
  3. Zobacz na opis instrukcji MOVIW oraz MOVWI.

Opis instrukcji

Opis argumentów

Pole Opis
f Adres rejestru w RAM (0x00 ... 0x7F)
W Rejestr roboczy (akumulator)
b Numer bitu wewnątrz 8-bitowego rejestru
x Wartość bitu bez znaczenia
k Pole stałej, dane stałe lub etykieta
d Wybór rejestru docelowego:
d = 0, wynik trafi do akumulatora W
d = 1, wynik trafi do rejestru f w RAM
Wartość standardowa d = 1.
n Numer FSR lub INDF (0 ... 1)
mm Wybór trybu pre-/post- inkrementacji/dekrementacji.
{} Argument może być pominięty, wtedy asembler przyjmie wartość standardową.

ADDFSR (ang. Add Literal to FSRn – Dodanie stałej do rejestru FSRn)

Składnia: ADDFSR FSRn, k

Argumenty: k = -32...31; n = 0...1

Operacja: FSR(n) ← FSR(n) + k

Modyfikowane znaczniki stanu: żaden

Kod: 11 0001 0nkk kkkk

Liczba cykli rozkazowych: 1

Opis: 6-bitowa stała ze znakiem (kod U2) zostaje dodana do zawartości wybranej pary rejestrów adresowania pośredniego FSRnH:FSRnL. Zakres FSRn jest ograniczony do 0000h...FFFFh. Przesunięcie się poza jego granice spowoduje przewinięcie zawartości FSRn.

Na przykład:

; FSR0 = 0000h
 ADDFSR FSR0,-1
; FSR = FFFFh


ADDLW (ang. Add Literal and W – Dodanie stałej i W)

Składnia: ADDLW k

Argumenty: k = 0...255

Operacja: W ← W + k

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 11 1110 kkkk kkkk

Opis: Zawartość akumulatora W zostaje dodana do 8-bitowej stałej k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1


ADDWF (ang. Add W and f – Dodanie W i f)

Składnia: ADDWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W + f

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 00 0111 dfff ffff

Opis: Dodanie zawartości rejestru roboczego W (akumulatora) i rejestru f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


ADDWFC (ang. Add W and f – Dodanie W i bitu przeniesienia C do f)

Składnia: ADDWFC f{,d}

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W + f + C

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 11 1101 dfff ffff

Opis: Dodanie zawartości rejestru roboczego W (akumulatora), bitu przeniesienia i rejestru f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


ANDLW (ang. And Literal with W – Koniunkcja bitowa stałej i W)

Składnia: ANDLW k

Argumenty: k = 0...255

Operacja: W ← W & k

Modyfikowane znaczniki stanu: Z

Kod: 11 1001 kkkk kkkk

Opis: Zawartość akumulatora W zostaje poddana operacji koniunkcji bitowej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1


ANDWF (ang. And W and f – Koniunkcja bitowa W i f)

Składnia: ANDWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W & f

Modyfikowane znaczniki stanu: Z

Kod: 00 0101 dfff ffff

Opis: Zawartość akumulatora W zostaje poddana operacji koniunkcji bitowej z rejestrem f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


ASFR (ang. Arithmetic Right Shift – Arytmetyczne przesunięcie w prawo)

Składnia: ANDWF f{,d}

Argumenty: f = 0...127, d = 0...1

Operacja:

dest[7]  ← f[7]
dest[6:0] ← f[7:1]
C ← f[0]

Modyfikowane znaczniki stanu: C, Z

Kod: 11 0111 dfff ffff

Opis: Zawartość rejestru f zostaje bitowo przesunięta w prawo o jeden bit poprzez znacznik przeniesienia C. Najstarszy bit f nie zostaje zmieniony. Najmłodszy bit trafia do przeniesienia C. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


BCF (ang. Bit Clear f – Zerowanie bitu w f)

Składnia: BCF f,b

Argumenty: f = 0...127, b = 0...7

Operacja: f[b] ← 0

Modyfikowane znaczniki stanu: żaden

Kod: 01 00bb bfff ffff

Opis: Bit b rejestru f zostaje wyzerowany.

Liczba cykli rozkazowych: 1


BRA (ang. Relative Branch – Skok względny)

Składnia:

BRA etykieta
BRA $ + k

Argumenty:

-256 ≤ etykieta - PC + 1 ≤ 255
-256 ≤ k ≤ 255

Operacja: PC ← PC + 1 + k

Modyfikowane znaczniki stanu: żaden

Kod: 11 001k kkkk kkkk

Opis: Do zawartości licznika programu dodawana jest 9-bitowa stała ze znakiem w kodzie U2. Ponieważ licznik programu został wcześniej zwiększony o 1 do pobrania kolejnej instrukcji z pamięci programu, to nowym adresem będzie PC + 1 + k. Mikroprocesor wykona skok pod ten adres. Instrukcja wymaga dwóch cykli. Zakres skoku jest ograniczony.

Liczba cykli rozkazowych: 2


BRW (ang. Relative Branch with W – Skok względny przy pomocy W)

Składnia: BRW

Argumenty: brak

Operacja: PC ← PC + 1 + W

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 1011

Opis: Do zawartości licznika programu dodawana jest zawartość akumulatora W (jako liczba bez znaku). Ponieważ licznik programu został wcześniej zwiększony o 1 do pobrania kolejnej instrukcji z pamięci programu, to nowym adresem będzie PC + 1 + W. Mikroprocesor wykona skok pod ten adres. Instrukcja wymaga dwóch cykli. Zakres skoku jest ograniczony.

Liczba cykli rozkazowych: 2


BSF (ang. Bit Set f – Ustawienie bitu w f)

Składnia: BSF f,b

Argumenty: f = 0...127, b = 0...7

Operacja: f[b] ← 1

Modyfikowane znaczniki stanu: żaden

Kod: 01 01bb bfff ffff

Opis: Bit b rejestru f zostaje ustawiony na 1.

Liczba cykli rozkazowych: 1


BTFSC (ang. Bit Test f, Skip if Clear – Testowanie bitu w f, pominięcie przy wyzerowanym)

Składnia: BTFSC f,b

Argumenty: f = 0...127, b = 0...7

Operacja: Pominięcie następnej instrukcji, jeśli f[b] = 0

Modyfikowane znaczniki stanu: żaden

Kod: 01 10bb bfff ffff

Opis: Jeśli bit b w rejestrze f ma stan 0, to zostaje pominięta następna instrukcja. Jeśli bit ten ma stan 0, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja BTFSC wykonuje sie w tym przypadku przez 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2


BTFSS (ang. Bit Test f, Skip if Set – Testowanie bitu w f, pominięcie przy ustawionym)

Składnia: BTFSS f,b

Argumenty: f = 0...127, b = 0...7

Operacja: Pominięcie następnej instrukcji, jeśli f[b] = 1

Modyfikowane znaczniki stanu: żaden

Kod: 01 11bb bfff ffff

Opis: Jeśli bit b w rejestrze f ma stan 1, to zostaje pominięta następna instrukcja. Jeśli bit ten ma stan 1, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja BTFSS wykonuje się w tym przypadku przez 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2


CALL (ang. Call Subroutine – Wywołanie podprogramu)

Składnia: CALL k

Argumenty: k = 0...2047

Operacja:

TOS ← PC + 1
PC[10:0] ← k
PC[12:11] ← PCLATH[4:3]

Modyfikowane znaczniki stanu: żaden

Kod: 01 0kkk kkkk kkkk

Opis: Wywołanie podprogramu. Najpierw na szczycie stosu umieszczany jest adres powrotny (PC + 1). 11-bitowy adres bezpośredni k zostaje załadowany do bitów PC[10:0]. Górne bity licznika programu PC są ładowane z rejestru PCLATH. Instrukcja CALL wykonywana jest w dwóch cyklach.

Liczba cykli rozkazowych: 2


CALLW (ang. Call Subroutine with W – Wywołanie podprogramu przy pomocy W)

Składnia: CALLW

Argumenty: brak

Operacja:

TOS ← PC + 1
PC[7:0] ← W
PC[14:8] ← PCLATH[6:0]

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 1010

Opis: Wywołanie podprogramu przy pomocy W. Najpierw na stos powrotny zostaje przesłany adres powrotu (PC + 1). Następnie zawartość akumulatora W jest ładowana do bitów PC[7:0], a zawartość rejestru PCLATH do PC[14:8]. Instrukcja CALLW wykonywana jest w dwóch cyklach.

Liczba cykli rozkazowych: 2


CLRF (ang. Clear f – Zerowanie f)

Składnia: CLRF f

Argumenty: f = 0...127

Operacja:

f ← 00h
Z ← 1

Modyfikowane znaczniki stanu: Z

Kod: 00 0001 1fff ffff

Opis: Zawartość rejestru f zostaje wyzerowana, a znacznik Z ustawiony na 1.

Liczba cykli rozkazowych: 1


CLRW (ang. Clear W – Zerowanie W)

Składnia: CLRW

Argumenty: brak

Operacja:

W ← 00h
Z ← 1

Modyfikowane znaczniki stanu: Z

Kod: 00 0001 0000 00xx

Opis: Zawartość rejestru fW zostaje wyzerowana, a znacznik Z ustawiony na 1.

Liczba cykli rozkazowych: 1


CLRWDT (ang. Clear Watchdog Timer – Zerowanie timera licznika zegarowego)

Składnia: CLRWDT

Argumenty: brak

Operacja:

WDT ← 00h
preskaler WDT ← 0
TO ← 1
PD ← 1

Modyfikowane znaczniki stanu: TO, PD

Kod: 00 0000 0110 0100

Opis: Instrukcja CLRWDT zeruje timer licznika zegarowego oraz licznik jego preskalera. Ustawiane są bity stanu TO i PD.

Liczba cykli rozkazowych: 1


COMF (ang. Compliment f – Negacja f)

Składnia: COMF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f

Modyfikowane znaczniki stanu: Z

Kod: 00 1001 dfff ffff

Opis: Wszystkie bity rejestru f zostają zanegowane i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik negacji zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


DECF (ang. Decrement f – Zmniejszenie f o 1)

Składnia: DECF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f - 1

Modyfikowane znaczniki stanu: Z

Kod: 00 0011 dfff ffff

Opis: Zawartość rejestru f zostaje zmniejszona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


DECFSZ (ang. Decrement f, Skip if Zero – Zmniejszenie o 1 rejestru f, pominięcie przy zerze)

Składnia: DECFSZ f,d

Argumenty: f = 0...127, d = 0...1

Operacja:

dest ← f -1, pominięcie następnej instrukcji, jeśli wynik = 0

Modyfikowane znaczniki stanu: żaden

Kod: 00 1011 dfff ffff

Opis: Zawartość rejestru f zostaje zmniejszona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f. Jeśli wynik jest równy zero, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja DECFSZ wykonuje się w tym przypadku przez 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2


GOTO (ang. Unconditional Jump – Skok bezwarunkowy)

Składnia: CALL k

Argumenty: k = 0...2047

Operacja:

PC[10:0] ← k
PC[12:11] ← PCLATH[4:3]

Modyfikowane znaczniki stanu: żaden

Kod: 01 1kkk kkkk kkkk

Opis: Wykonanie bezwarunkowego skoku w programie. 11-bitowy adres bezpośredni jest ładowany do dolnych jedenastu bitów licznika programu PC[10:0]. Górne bity PC zostają załadowane z zatrzasków PCLATH[4:3]. Instrukcja GOTO jest wykonywana w dwóch cyklach. Jest to konieczne, aby przeładować kolejkę instrukcji. W drugim takcie wykonywana jest instrukcja pusta.

Liczba cykli rozkazowych: 2


INCF (ang. Increment f – Zwiększenie o 1 f)

Składnia: INCF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f + 1

Modyfikowane znaczniki stanu: Z

Kod: 00 1010 dfff ffff

Opis: Zawartość rejestru f zostaje zwiększona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


INCFSZ (ang. Decrement f, Skip if Zero – Zwiększenie o 1 rejestru f, pominięcie przy zerze)

Składnia: DECFSZ f,d

Argumenty: f = 0...127, d = 0...1

Operacja:

dest ← f +1, pominięcie następnej instrukcji, jeśli wynik = 0

Modyfikowane znaczniki stanu: żaden

Kod: 00 1111 dfff ffff

Opis: Zawartość rejestru f zostaje zwiększona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f. Jeśli wynik jest równy zero, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja DECFSZ wykonuje się w tym przypadku przez 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2


IORLW (ang. Inclusive OR Literal with W – Alternatywa bitowa stałej i W)

Składnia: IORLW k

Argumenty: k = 0...255

Operacja: W ← W | k

Modyfikowane znaczniki stanu: Z

Kod: 11 1000 kkkk kkkk

Opis: Zawartość akumulatora W zostaje poddana operacji alternatywy bitowej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1


IORWF (ang. Inclusive OR W and f – Alternatywa bitowa W i f)

Składnia: IORWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W | f

Modyfikowane znaczniki stanu: Z

Kod: 00 0100 dfff ffff

Opis: Zawartość akumulatora W zostaje poddana operacji alternatywy bitowej z rejestrem f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


LSLF (ang. Logical Left Shift – Logiczne przesunięcie w lewo)

Składnia: LSLF f{,d}

Argumenty: f = 0...127, d = 0...1

Operacja:

C  ← f[7]
dest[7:1] ← f[6:0]
dest[0] ← 0

Modyfikowane znaczniki stanu: C, Z

Kod: 11 0101 dfff ffff

Opis: Zawartość rejestru f zostaje bitowo przesunięta w lewo o jeden bit poprzez znacznik przeniesienia C. Do znacznika przeniesienia trafia najstarszy bit rejestru f, następnie bity są przesuwane o jedną pozycję w lewo. Do najmłodszego bitu wsuwane jest zero. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


LSRF (ang. Logical Right Shift – Logiczne przesunięcie w prawo)

Składnia: LSRF f{,d}

Argumenty: f = 0...127, d = 0...1

Operacja:

dest[7]  ← 0
dest[6:0] ← f[7:1]
C ← f[0]

Modyfikowane znaczniki stanu: C, Z

Kod: 11 0110 dfff ffff

Opis: Zawartość rejestru f zostaje bitowo przesunięta w prawo o jeden bit poprzez znacznik przeniesienia C. Do najstarszego bitu wyniku trafia zero, następnie bity są przesuwane o jedną pozycję w prawo i umieszczane w młodszych 7 bitach wyniku. Do znacznika przeniesienia trafia najmłodszy bit rejestru f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


MOVF (ang. Move f – Przesłanie f)

Składnia: MOVF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f

Modyfikowane znaczniki stanu: Z

Kod: 00 1000 dfff ffff

Opis: Zostaje pobrany rejestr f. Jeśli d jest równe 0, to rejestr f zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f. Jest to przydatne przy testowaniu stanu rejestru f, ponieważ w tej operacji ustawiany jest znacznik zera Z.

Liczba cykli rozkazowych: 1


MOVIW (ang. Move INDFn to W – Przesłanie pośrednie INDFn do W)

Składnia (MPASM):

MOVIW ++FSRn
MOVIW --FSRn
MOVIW FSRn++
MOVIW FSRn--
MOVIW k[FSRn]

Składnia (XC8):

MOVIW ++FSRn
MOVIW --FSRn
MOVIW FSRn++
MOVIW FSRn--
MOVIW [k]FSRn

Argumenty:

n = 0...1
m = (00,01,10,11)
k = -32...31

Operacja:

W ← (INDFn)

Adres efektywny jest wyliczany jako

FSR + 1 (preinkrementacja)
FSR - 1 (predekrementacja)
FSR + k (przesunięcie względne o stałą k)

Po wykonaniu przesłania wartość użytego rejestru adresowania pośredniego FSR będzie równa:

FSR + 1 (wszystkie inkrementacje)
FSR - 1 (wszystkie dekrementacje)
niezmieniona (indeksowanie)

Modyfikowane znaczniki stanu: Z

Kod (MOVIW n,mm): 00 0000 0001 0nmm
Kod (MOVIW k[n]): 11 1111 0nkk kkkk
Tryb Składnia mm
Preinkrementacja ++FSRn 00
Predekrementacja --FSRn 01
Postinkrementacja FSRn++ 10
Postdekrementacja FSRn-- 11

Opis: Instrukcja ta powoduje załadowanie do akumulatora komórki pamięci wskazywanej przez wybrany rejestr wskaźnika FSR0 lub FSR1 (ang. File Select Register). Rejestry te są 16 bitowe i pozwalają adresować liniowo całą przestrzeń pamięci danych oraz pamięci programu (zobacz do danych producenta danego mikrokontrolera PIC) . Z rejestrami FSR skojarzone są dwa rejestry wirtualne INDF0 i INDF1. Nie są to rejestry fizyczne. Każda instrukcja adresująca rejestr INDFn w rzeczywistości uzyska dostęp do komórki pamięci o adresie w powiązanym z nim rejestrze FSRn.

Instrukcja MOVIW posiada dwie odmiany, które posiadają różną składnię:

MOVIW n,mm – wybiera rejestr FSRn oraz tryb dostępu do pamięci mm, pokazany w tabelce powyżej. W asemblerze MPASM instrukcje te zapisujemy jako:
MOVIW ++FSRn   Zawartość rejestru FSRn zostaje zwiększona o 1, a następnie spod nowego adresu wskazywanego przez FSRn  będzie pobrana dana i umieszczona w akumulatorze W. Jest to tzw. tryb preinkrementacji.
MOVIW --FSRn   Zawartość rejestru FSRn zostaje zmniejszona o 1, a następnie spod nowego adresu  wskazywanego przez FSRn  będzie pobrana dana i umieszczona w akumulatorze W. Jest to tzw. tryb predekrementacji.
MOVIW FSRn++   Spod adresu wskazywanego przez rejestr FSRn zostaje pobrana dana i umieszczona w akumulatorze W. Następnie zawartość rejestru FSRn jest zwiększana o 1. Jest to tzw. tryb postinkrementacji.
MOVIW FSRn--   Spod adresu wskazywanego przez rejestr FSRn zostaje pobrana dana i umieszczona w akumulatorze W. Następnie zawartość rejestru FSRn jest zmniejszona o 1. Jest to tzw. tryb postdekrementacji.

MOVIW k[FSRn] - wybiera rejestr FSRn, następnie dodaje do jego zawartości stałą k i tak otrzymany adres zostaje użyty do pobrania danej z pamięci. Dana jest umieszczana w akumulatorze W. Sam rejestr FSRn nie jest zmieniany.

Zamiast FSRn można użyć INDFn, np: MOVIW --INDFn, MOVIW k[INDFn] lub po prostu numeru n: MOVIW ++n, MOVIW k[n].

Uwaga: w asemblerze wbudowanym w kompilator XC8 obowiązuje składnia MOVIW [k]FSRn (tutaj Microchip namieszał).

Zakres adresów przechowywanych w rejestrach FSRn wynosi 0000h...FFFFh. Jeśli operacja spowoduje wyjście poza ten zakres, to adres zostanie odpowiednio przewinięty:

0000h-- → FFFFh
FFFFh++ → 0000h

Zwiększanie/zmniejszanie adresu w FSRn nie wpływa na znaczniki stanu procesora.

Liczba cykli rozkazowych: 1/2

Jeśli najstarszy bit rejestru FSRn jest ustawiony na 1, to instrukcja wymaga dodatkowego cyklu.


MOVLB (ang. Move Literal to BSR – Przesłanie stałej do BSR)

Składnia: MOVLB k

Argumenty: k = 0...31

Operacja: BSR ← k

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 001k kkkk

Opis: 5-bitowa stała k jest umieszczana w rejestrze wyboru banku pamięci (ang. Bank Select Register BSR).

Liczba cykli rozkazowych: 1


MOVLP (ang. Move Literal to PCLATH – Przesłanie stałej do PCLATH)

Składnia: MOVLP k

Argumenty: k = 0...127

Operacja: PCLATH ← k

Modyfikowane znaczniki stanu: żaden

Kod: 11 0001 1kkk kkkk

Opis: 7-bitowa stała k jest umieszczana w rejestrze zatrzaskowym górnych bitów licznika programu PCLATH.

Liczba cykli rozkazowych: 1


MOVLW (ang. Move Literal to W – Przesłanie stałej do W)

Składnia: MOVLW k

Argumenty: k = 0...255

Operacja: W ← k

Modyfikowane znaczniki stanu: żaden

Kod: 11 0000 kkkk kkkk

Opis: 8-bitowa stała k jest umieszczana w rejestrze akumulatora W.

Liczba cykli rozkazowych: 1


MOVWF (ang. Move W to f – Przesłanie W do f)

Składnia: MOVWF f

Argumenty: f = 0...127

Operacja: f ← W

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 1fff ffff

Opis: Przesłanie danych z akumulatora W do rejestru f.

Liczba cykli rozkazowych: 1


MOVWI (ang. Move W to INDFn – Przesłanie pośrednie W do INDFn)

Składnia (MPASM):

MOVWI ++FSRn
MOVWI --FSRn
MOVWI FSRn++
MOVWI FSRn--
MOVWI k[FSRn]

Składnia (XC8):

MOVWI ++FSRn
MOVWI --FSRn
MOVWI FSRn++
MOVWI FSRn--
MOVWI [k]FSRn

Argumenty:

n = 0...1
m = (00,01,10,11)
k = -32...31

Operacja:

(INDFn) ← W

Adres efektywny jest wyliczany jako

FSR + 1 (preinkrementacja)
FSR - 1 (predekrementacja)
FSR + k (przesunięcie względne o stałą k)

Po wykonaniu przesłania wartość użytego rejestru adresowania pośredniego FSR będzie równa:

FSR + 1 (wszystkie inkrementacje)
FSR - 1 (wszystkie dekrementacje)
niezmieniona (indeksowanie)

Modyfikowane znaczniki stanu: żaden

Kod (MOVWI n,mm): 00 0000 0001 1nmm
Kod (MOVWI k[n]): 11 1111 1nkk kkkk
Tryb Składnia mm
Preinkrementacja ++FSRn 00
Predekrementacja --FSRn 01
Postinkrementacja FSRn++ 10
Postdekrementacja FSRn-- 11

Opis: Instrukcja ta powoduje przesłanie zawartości akumulatora W do komórki pamięci wskazywanej przez wybrany rejestr wskaźnika FSR0 lub FSR1 (ang. File Select Register). Rejestry te są 16 bitowe i pozwalają adresować liniowo całą przestrzeń pamięci danych oraz pamięci programu (zobacz do danych producenta danego mikrokontrolera PIC) . Z rejestrami FSR skojarzone są dwa rejestry wirtualne INDF0 i INDF1. Nie są to rejestry fizyczne. Każda instrukcja adresująca rejestr INDFn w rzeczywistości uzyska dostęp do komórki pamięci o adresie w powiązanym z nim rejestrze FSRn.

Instrukcja MOVWI posiada dwie odmiany, które posiadają różną składnię:

MOVWI n,mm – wybiera rejestr FSRn oraz tryb dostępu do pamięci mm, pokazany w tabelce powyżej. W asemblerze MPASM instrukcje te zapisujemy jako:
MOVWI ++FSRn   Zawartość rejestru FSRn zostaje zwiększona o 1, a następnie zawartość akumulatora W jest przesyłana do komórki o nowym adresie w FSRn. Jest to tzw. tryb preinkrementacji.
MOVWI --FSRn   Zawartość rejestru FSRn zostaje zmniejszona o 1, a następnie zawartość akumulatora W jest przesyłana do komórki o nowym adresie w FSRn. Jest to tzw. tryb predekrementacji.
MOVWI FSRn++   Zawartość akumulatora jest umieszczana w komórce wskazywanej przez rejestr FSRn. Następnie zawartość rejestru FSRn jest zwiększana o 1. Jest to tzw. tryb postinkrementacji.
MOVWI FSRn--   Zawartość akumulatora jest umieszczana w komórce wskazywanej przez rejestr FSRn. Następnie zawartość rejestru FSRn jest zmniejszona o 1. Jest to tzw. tryb postdekrementacji.

MOVWI k[FSRn] - wybiera rejestr FSRn, następnie dodaje do jego zawartości stałą k i tak otrzymany adres zostaje użyty do umieszczenia zawartości akumulatora W w komórce pamięci. Sam rejestr FSRn nie jest zmieniany.

Zamiast FSRn można użyć INDFn, np: MOVWI --INDFn, MOVWI k[INDFn] lub po prostu numeru n: MOVWI ++n, MOVWI k[n].

Uwaga: w asemblerze wbudowanym w kompilator XC8 obowiązuje składnia MOVWI [k]FSRn (tutaj Microchip namieszał).

Zakres adresów przechowywanych w rejestrach FSRn wynosi 0000h...FFFFh. Jeśli operacja spowoduje wyjście poza ten zakres, to adres zostanie odpowiednio przewinięty:

0000h-- → FFFFh
FFFFh++ → 0000h

Zwiększanie/zmniejszanie adresu w FSRn nie wpływa na znaczniki stanu procesora.

Liczba cykli rozkazowych: 1/2

Jeśli najstarszy bit rejestru FSRn jest ustawiony na 1, to instrukcja wymaga dodatkowego cyklu.


NOP (ang. No Operation – Brak działania)

Składnia: NOP

Argumenty: brak

Operacja: brak działania

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 0000

Opis: Instrukcja pusta, brak operacji.

Liczba cykli rozkazowych: 1


OPTION (ang. Load OPTION_REG Register – Załadowanie rejestru OPTION_REG)

Składnia: OPTION

Argumenty: brak

Operacja: OPTION_REG ← W

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0110 0010

Opis: Przesłanie danych z akumulatora W do rejestru OPTION_REG.

Liczba cykli rozkazowych: 1


RESET (ang. Software Reset – Reset programowy)

Składnia: RESET

Argumenty: brak

Operacja: Wykonanie resetu mikrokontrolera. Resetuje znacznik nRI rejestru PCON.

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 0001

Opis: Instrukcja umożliwia dokonanie resetu mikrokontrolera z poziomu programu.

Liczba cykli rozkazowych: 1


RETFIE (ang. Return from Interrupt – Powrót z przerwania)

Składnia: RETFIE

Argumenty: brak

Operacja:

PC ← TOS
GIE ← 1

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 1010

Opis: Powrót z przerwania. Adres powrotny jest pobierany ze szczytu stosu (TOS) i ładowany do rejestru licznika programu PC. Przerwania zostają włączone przez ustawienie bitu GIE (ang. Global Interrupt Enable) w INTCON[7]. Instrukcja wykonywana jest w ciągu 2 cykli rozkazowych.

Liczba cykli rozkazowych: 2


RETLW (ang. Return with Literal in W – Powrót z podprogramu ze stałą w W)

Składnia: RETLW k

Argumenty: k = 0...255

Operacja:

W ← k
PC ← TOS

Modyfikowane znaczniki stanu: żaden

Kod: 11 0100 kkkk kkkk

Opis: Powrót z podprogramu. 8-bitowa stała k zostaje umieszczona w akumulatorze W. Licznik programu PC zostaje załadowany adresem ze szczytu stosu TOS. Instrukcja wykonuje się przez 2 cykle.

Liczba cykli rozkazowych: 2


RETURN (ang. Return from Subroutine – Powrót z podprogramu)

Składnia: RETURN

Argumenty: brak

Operacja: PC ← TOS

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 1000

Opis: Powrót z podprogramu. Licznik programu PC zostaje załadowany adresem ze szczytu stosu TOS. Instrukcja zajmuje 2 cykle.

Liczba cykli rozkazowych: 2


RLF (ang. Rotate Left f through Carry – Obrót bitów f w lewo poprzez przeniesienie)

Składnia: RLF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: Zobacz na opis poniżej.

Modyfikowane znaczniki stanu: C

Kod: 00 1101 dfff ffff

Opis: Bity rejestru f są obracane w lewo poprzez znacznik przeniesienia. Jeśli d = 0, to wynik trafi do rejestru roboczego W, jeśli d = 1, to wynik trafi z powrotem do rejestru f.

Liczba cykli rozkazowych: 1


RRF (ang. Rotate Right f through Carry – Obrót bitów f w prawo poprzez przeniesienie)

Składnia: RRF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: Zobacz na opis poniżej.

Modyfikowane znaczniki stanu: C

Kod: 00 1100 dfff ffff

Opis: Bity rejestru f są obracane w prawo poprzez znacznik przeniesienia. Jeśli d = 0, to wynik trafi do rejestru roboczego W, jeśli d = 1, to wynik trafi z powrotem do rejestru f.

Liczba cykli rozkazowych: 1


SLEEP (Uśpienie)

Składnia: SLEEP

Argumenty: brak

Operacja:

WDT ← 00h
Preskaler WDT ← 0
TO ← 1
PD ← 0

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0110 0011

Opis: Opis: Zostaje ustawiony znacznik zakończenia zliczania TO (ang. Time-out Status bit). Znacznik wyłączenia zasilania PD (ang. Power-down Status bit) jest zerowany. Licznik zegarowy i jego preskaler są zerowane. Procesor zostaje wprowadzony w tryb uśpienia z zatrzymanym oscylatorem. Szczegóły trybu uśpienia znajdziesz w dokumentacji danego mikrokontrolera.

Liczba cykli rozkazowych: 1


SUBLW (ang. Subtract W from Literal – Odjęcie W od stałej)

Składnia: SUBLW k

Argumenty: k = 0...255

Operacja: W ← k - W

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 11 1100 kkkk kkkk

Opis: Zawartość akumulatora W zostaje odjęta od 8-bitowej stałej k (metodą uzupełnień do 2). Wynik jest umieszczany w akumulatorze W.

C = 0 W > k
C = 1 W ≤ k
DC = 0 W[3:0] > k[3:0]
DC = 1 W[3:0] ≤ k[3:0]

Liczba cykli rozkazowych: 1


SUBWF (ang. Subtract W from f – Odjęcie W od f)

Składnia: SUBWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f - W

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 00 0010 dfff ffff

Opis: Zawartość akumulatora W zostaje odjęta od rejestru f (metodą uzupełnień do 2). Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

C = 0 W > f
C = 1 W ≤ f
DC = 0 W[3:0] > f[3:0]
DC = 1 W[3:0] ≤ f[3:0]

Liczba cykli rozkazowych: 1


SUBWFB (ang. Subtract W from f with Borrow – Odjęcie W od f z pożyczką)

Składnia: SUBWFB f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f - W - C

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 11 1011 dfff ffff

Opis: Zawartość akumulatora W oraz pożyczka (zaprzeczony znacznik przeniesienia) zostają odjęte od rejestru f (metodą uzupełnień do 2). Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


SWAPF (ang. Swap Nibbles in f – Wymiana połówek f)

Składnia: SWAPF f,d

Argumenty: f = 0...127, d = 0...1

Operacja:

dest[7:4] ← f[3:0]
dest[3:0] ← f[7:4]

Modyfikowane znaczniki stanu: żaden

Kod: 00 1110 dfff ffff

Opis: Górna i dolna połówka (4 bity) rejestru f zostają zamienione miejscami. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1


TRIS (ang. Load TRIS register – Załadowanie rejestru TRIS)

Składnia: TRIS f

Argumenty: f = 5...7

Operacja: rejestr TRIS f ← W

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0110 0fff

Opis: Zawartość akumulatora W zostaje załadowana do rejestru TRIS f.

f = 5 Ładowany jest rejestr TRISA
f = 6 Ładowany jest rejestr TRISB
f = 7 Ładowany jest rejestr TRISC

Liczba cykli rozkazowych: 1


XORLW (ang. Exclusive OR Literal with W – Suma modulo 2 stałej z W)

Składnia: XORLW k

Argumenty: k = 0...255

Operacja: W ← W ^ k

Modyfikowane znaczniki stanu: Z

Kod: 11 1010 kkkk kkkk

Opis: Zawartość akumulatora W zostaje poddana operacji sumy modulo 2 z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1


XORWF (ang. Exclusive OR W with f – Suma modulo 2 W z f)

Składnia: XORWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W ^ f

Modyfikowane znaczniki stanu: Z

Kod: 00 0110 dfff ffff

Opis: Zawartość akumulatora W zostaje poddana operacji sumy modulo 2 z rejestrem f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2023 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.