Komut | Açıklama | Etkilenen Flag'ler | Komut Döngüsü Sayısı |
---|---|---|---|
ADDWF FR, H | FR+W⇒W (H=0 ise), FR+W⇒FR (H=1 ise) W ile FR'yi toplar ve sonucu hedef H'ye yazar. |
Z, DC, C | 1 |
ANDWF FR, H | FR&W⇒W (H=0 ise), FR&W⇒FR (H=1 ise) W ile FR'yi AND (VE) mantık işleminden geçirir ve sonucu hedef H'ye yazar. |
Z | 1 |
CLRF FR | FR=0 FR'nin içeriğini siler (sıfırlar). |
Z | 1 |
CLRW | W=0 W'yu siler (sıfırlar). |
Z | 1 |
COMF FR, H | FR⇒W (H=0 ise), FR
⇒FR (H=1 ise) FR'nin her bir bitinin tersini alır ve sonucu hedef H'ye yazar. |
Z | 1 |
DECF FR, H | FR-1⇒W (H=0 ise), FR-1⇒FR (H=1 ise) FR'yi bir azaltır ve sonucu hedef H'ye yazar. |
Z | 1 |
DECFSZ FR, H | FR-1⇒W (H=0 ise), FR-1⇒FR (H=1 ise) FR'yi bir azaltır ve sonucu hedef H'ye yazar. Eğer sonuç 0 ise bir sonraki satır atlanır. |
Hiçbiri | 1 (FR≠1) 2 (FR=1) |
INCF FR, H | FR+1⇒W (H=0 ise), FR+1⇒FR (H=1 ise) FR'yi bir artırır and sonucu hedef H'ye yazar. |
Z | 1 |
INCFSZ FR, H | FR+1⇒W (H=0 ise), FR+1⇒FR (H=1 ise) FR'yi bir artırır and sonucu hedef H'ye yazar. Eğer sonuç 0 (FR=255) ise bir sonraki satır atlanır. |
Hiçbiri | 1 (FR≠255) 2 (FR=255) |
IORWF FR, H | FR|W⇒W (H=0 ise), FR|W⇒FR (H=1 ise) W ile FR'yi OR (VEYA) mantık işleminden geçirir ve sonucu hedef H'ye yazar. |
Z | 1 |
MOVF FR, H | FR⇒W (H=0 ise), FR⇒FR (H=1 ise) FR içeriğini hedef H'ye kopyalar. |
Z | 1 |
MOVWF FR | W⇒FR W'yi FR'ye kopyalar. |
Hiçbiri | 1 |
NOP | İşlem Yok Hiçbir şey yapmaz. |
Hiçbiri | 1 |
RLF FR, H | FR<1⇒W (H=0 ise), FR<1⇒FR (H=1 ise) Carry Flag üzerinde FR'yi bir bit sola kaydırır ve sonucu hedef H'ye yazar. |
C | 1 |
RRF FR, H | FR>1⇒W (H=0 ise), FR>1⇒FR (H=1 ise) Carry Flag üzerinde FR'yi bir bit sola kaydırır ve sonucu hedef H'ye yazar. |
C | 1 |
SUBWF FR, H | FR-W⇒W (H=0 ise), FR-W⇒FR (H=1 ise) FR'den W'yu çıkarır ve sonucu hedef H'ye yazar. |
C, DC, Z | 1 |
SWAPF FR, H | FR'nin ilk ve son dört bitini blok halinde yer değiştirir ve sonucu hedef H'ye yazar. | Hiçbiri | 1 |
XORWF FR, H | FR^W⇒W (H=0 ise), FR^W⇒FR (H=1 ise) W ile FR'yi XOR mantık işleminden geçirir ve sonucu hedef H'ye yazar. |
Z | 1 |
BCF FR, B | FR'nin B. bitini sıfır yapar. | Hiçbiri | 1 |
BSF FR, B | FR'nin B. bitini bir yapar. | Hiçbiri | 1 |
BTFSC FR, B | FR'nin B. bitinin 0 olup olmadığını kontrol eder. Eğer 0 ise bir sonraki satır atlanır. | Hiçbiri | 1 (if 1) 2 (if 0) |
BTFSS FR, B | FR'nin B. bitinin 1 olup olmadığını kontrol eder. Eğer 1 ise bir sonraki satır atlanır. | Hiçbiri | 1 (if 0) 2 (if 1) |
ADDLW N | N+W⇒W Sabit Sayı N ile W'yi toplar ve sonucu W'ya yazar. |
Z, DC, C | 1 |
ANDLW N | N&W⇒W Sabit Sayı N ile W'yi, AND (VE) mantık işleminden geçirir ve sonucu W'ya yazar. |
Z | 1 |
CALL ETİKET | ETİKET rutinini çağırır. | Hiçbiri | 2 |
CLRWDT | Watchdog Timer'ı siler. | TO, PD | 1 |
GOTO ETİKET | Programı etiketin hemen altındaki koda atlatır. | Hiçbiri | 2 |
IORLW N | N|W⇒W Sabit Sayı N ile W'yi, OR (VEYA) mantık işleminden geçirir ve sonucu W'ya yazar. |
Z | 1 |
MOVLW N | N⇒W N sabit sayısını W'ya kopyalar. |
Hiçbiri | 1 |
RETFIE | Program kesmeden (interrupt'tan) döner. | Hiçbiri | 2 |
RETLW N | Rutin'den döner ve W'ya N sabit sayısını kopyalar. | Hiçbiri | 2 |
RETURN | Rutin'den döner. | Hiçbiri | 2 |
SLEEP | Uyku moduna geçer. | TO, PD | 1 |
SUBLW N | N-W⇒W N sabit sayısından W'yu çıkarır ve sonucu W'ya yazar. |
Z, DC, C | 1 |
XORLW N | N^W⇒W Sabit Sayı N ile W'yi, XOR mantık işleminden geçirir ve sonucu W'ya yazar. |
Z | 1 |
ADDLW N sabit sayısını W'ya ekler ve sonucu W'ya yazar.
Örnek: Diyelim ki
aşağıdaki komuttan önce W=D'15' olsun.
ADDLW D'63'
komutu W'yu 15+63=78 yapar.
Not: ADDLW yanına eğer sayı yerine bir register ismi yazılmışsa, bu işlemde W ve bu registerın (değeri değil) adresi toplanır.
Örnek:
SAYAC EQU 0X05
...
MOVLW D'15' ; W=15
ADDLW SAYAC ; W=15+5=20
ADDLW Z, DC ve C flag'lerini etkiler.
Zero Flag (Z) Eğer toplam sonucu sıfırsa (veya 256 ise) Z=1 olur.
Aşağıdaki örnekte sonuç 78 (0'dan farklı) olduğu için Z=0 olur.
Örnek:
MOVLW D'15' ; W=15
ADDLW D'63' ; W=15+63=78
Fakat, aşağıdaki örnekte sonuç 0 (8-bitlik hafıza alanı en fazla 255 sayısına erişebilir ve bu alanlar için 255'in bir fazlası 0'dır.) olduğu için Z=1 olur.
Örnek:
MOVLW D'193' ; W=193
ADDLW D'63' ; W=193+63=256=0
Örnek:
MOVLW 0X0F ; W=0X0F
ADDLW 0X01 ; W=0X01+0X0F=0X10
Fakat aşağıdaki örnekte, F ve W için en düşük dört bitin toplamı F'dir, dolayısıyla DC=0 olur.
Örnek:
MOVLW 0X0E ; W=0X0E
ADDLW 0X01 ; W=0X01+0X0E=0X0F
Örnek:
MOVLW D'50' ; W=50
ADDLW D'250' ; W=50+250=300=45
Fakat, aşağıdaki örnekte sonuç 255'ten küçük çıktığından C=0 olur.
Örnek:
MOVLW D'190' ; W=190
ADDLW D'63' ; W=190+63=253
Not: Tek bir ADDLW işleminden sonra her üç flag'de etkilenir. Aşağıdaki örnekte, sonuç sıfır olmadığından, Z=0'dır. Sonuç 255'ten büyük olduğundan C=1 olur. En düşük dört bitin toplamı 15'ten büyük olduğundan DC=1'dir.
Örnek:
MOVLW 0XFF ; W=0XFF
ADDLW 0X0F ; W=0X0F+0XFF=0X0E
ADDWF FR ile W'yu toplar ve sonucu hedef H'ye yazar.
Örnek: Diyelim ki
aşağıdaki komuttan önce W=D'15' ve SAYAC=D'63' olsun.
ADDWF SAYAC, 0
komutu W=15+63=78 olmasına neden olur.
Not: ADDWF, FR'nin adresini değil içeriğini toplar. Aşağıdaki örnekte SAYAC'ın adresi 0X20, içeriği ise MOVLW ve MOVWF komutları ile 0X05 yapılmıştır. 0x20 adresi sonucu etkilemez.
Örnek:
SAYAC EQU 0X20
...
MOVLW 0X05 ; W=0X05
MOVWF SAYAC ; SAYAC=0X05
ADDWF SAYAC, 1 ; SAYAC=SAYAC+W=0X05+0X05=0X0A
ADDWF Z, DC ve C flag'lerini etkiler.
Not: Hedef H'nin (=0, W, 1 veya F) ne olduğu flag'ler üzerinde etkili değildir.
Zero Flag (Z) Eğer toplam sıfırsa (veya 256) Z=1 olur. Aşağıdaki örnekte sonuç 78 (0'dan farklı) olduğundan ADDWF komutundan sonra Z=0 olur. Örnek:
W=15 ve SAYAC=63 olsun.
ADDWF SAYAC, F
komutu SAYAC=78 olmasını sağlar. W aynı kalır. Eğer hedef W (or 0) olsaydı, W=78 olur ve SAYAC aynı kalır.
Fakat, aşağıdaki örnekte sonuç 0 (8-bitlik hafıza alanı en fazla 255 sayısına erişebilir ve bu alanlar için 255'in bir fazlası 0'dır.) olduğu için Z=1 olur.
Örnek:
W=193 ve SAYAC=63 olsun.
ADDWF SAYAC,1 ;SAYAC=193+63=256=0
Örnek:
W=0X01 ve SAYAC=0X0F olsun.
ADDWF SAYAC, 0 ;W=0X01+0X0F=0X10
Fakat aşağıdaki örnekte, F ve W için en düşük dört bitin toplamı F'dir, dolayısıyla DC=0 olur.
Örnek:
W=0X01 ve SAYAC=0X0E olduğunu düşünelim.
ADDWF SAYAC, W ;W=0X01+0X0E=0X0F
Örnek:
W=D'50' ve SAYAC=D'250' olsun.
ADDWF SAYAC, 0 ;W=50+250=300=45
Fakat, aşağıdaki örnekte sonuç 255'ten küçük çıktığından C=0 olur.
Örnek:
W=D'190' ve SAYAC=D'63' olsun.
ADDWF SAYAC, W ;W=190+63=253
Not: Tek bir ADDWF işleminden sonra her üç flag'de etkilenir. Aşağıdaki örnekte, sonuç sıfır olmadığından, Z=0'dır. Sonuç 255'ten büyük olduğundan C=1 olur. En düşük dört bitin toplamı 15'ten büyük olduğundan DC=1'dir.
Örnek:
W=0X0F ve SAYAC=0XFF olsun.
ADDWF SAYAC, 0 ;W=0X0F+0XFF=0X0E
W'yu N'den çıkarır, ve sonucu W'ya yazar.
Örnek: Başlangıçta W=D'15' olsun.
SUBLW D'63'
komutu W'yu 63-15=48 olur.
Not: Eğer bir register ismi SUBLW'nun yanına yazılmışsa, W bu register'ın adresinden çıkarılır.
Örnek:
SAYAC EQU 0X05
...
MOVLW D'3' ; W=3
SUBLW SAYAC ; W=5-3=2
SUBLW Z, DC ve C flag'lerini etkiler.
Zero Flag (Z) Çıkarmanın sonucu 0 ise Z=1 olur.
Aşağıdaki örnekte sonuç 48 (0'dan farklı) olduğundan, SUBLW komutunun sonunda Z=0 olur.
Örnek:
MOVLW D'15' ; W=15
SUBLW D'63' ; W=63-15=48
Fakat, aşağıdaki örnekte sonuç 0 olduğundan, SUBLW sonucunda Z=1 olur.
Örnek:
MOVLW D'63' ; W=63
SUBLW D'63' ; W=63-63=0
Örnek:
MOVLW 0X0F ; W=0X0F
SUBLW 0X01 ; W=0X01-0X0F=0XF2
Fakat aşağıdaki örnekte W'nin en düşük dört biti daha küçük olduğundan DC=1 olur.
Örnek:
MOVLW 0X01 ; W=0X01
SUBLW 0X0F ; W=0X0F-0X01=0X0E
Örnek:
MOVLW D'50' ; W=50
SUBLW D'250' ; W=250-50=200
Fakat, aşağıdaki örnekte W>N'dir ve C=0 olur.
Örnek:
MOVLW D'190' ; W=190
SUBLW D'63' ; W=63-190=-127=129
Not: Tek bir SUBLW komutu her üç flag'i de aynı anda etkiler.
Aşağıdaki örnekte, sonuç sıfırdan farklı olduğundan Z=0'dır. N Örnek:
MOVLW 0XFF ; W=0XFF
SUBLW 0X0F ; W=0X0F-0XFF=0X10
SUBWF W'yu FR'den çıkarır ve hedef H'ye yazar.
Örnek: Başlangıçta W=D'15'
ve SAYAC=D'63' olsun.
SUBWF SAYAC, 0
komutu W=63-15=48 olmasına neden olur.
Not: SUBWF W'yu FR'nin adresinden değil içeriğinden çıkarır. Aşağıdaki örnekte SAYAC'ın adresi 0X20'dir ve içeriği 0X05'tir. 0x20 adresi sonucu etkilemez.
Örnek:
SAYAC EQU 0X20
...
MOVLW 0X05 ; W=0X05
MOVWF SAYAC ; SAYAC=0X05
SUBWF SAYAC, 1 ; SAYAC=SAYAC-W=0X05-0X05=0X00
SUBWF Z, DC ve C flag'lerini etkiler.
Zero Flag (Z) Eğer çıkarmanın sonucu 0 ise Z=1 olur.
Aşağıdaki örnekte sonuç 48 (0'dan farklı) olduğundan, SUBWF işlemi sonucunda Z=0 olur.
Örnek:
W=15 ve SAYAC=63 olsun.
SUBWF SAYAC, F
komutu SAYAC=63-15=48 olmasını sağlar. W aynı kalır. Hedef W (veya 0) olursa, W=48 olur ve SAYAC aynı kalır.
Fakat, aşağıdaki örnekte, sonuç sıfır olduğundan, SUBWF komutu sonucunda Z=1 olur.
Örnek:
W=63 ve SAYAC=63 olsun.
SUBWF SAYAC,1 ;SAYAC=63-63=0
Örnek:
W=0X1F ve SAYAC=0X20 olsun.
SUBWF SAYAC, 0 ;W=0x20-0X1F=0X01
Fakat aşağıdaki örnekte W'nin en düşük dört biti daha küçük olduğundan DC=1 olur.
Örnek:
W=0X01 ve SAYAC=0X0E olsun.
SUBWF SAYAC, W ;W=0X0E-0X01=0X0D
Örnek:
W=D'50' ve SAYAC=D'250' olsun.
SUBWF SAYAC, 0 ;W=250-50=200
Fakat, aşağıdaki örnekte W>N'dir ve C=0 olur.
Örnek:
W=D'190' ve SAYAC=D'63' olsun.
SUBWF SAYAC, W ;W=63-190=-127=129
Not: Tek bir SUBLW komutu her üç flag'i de aynı anda etkiler.
Aşağıdaki örnekte, sonuç sıfırdan farklı olduğundan Z=0'dır. FR
Örnek:
W=0X0F ve SAYAC=0XFF olsun.
SUBWF SAYAC, 0 ;W=0XFF-0X0F=0XF0
INCF, FR'ye 1 ekler ve sonucu hedef H'ye yazar.
Örnek: Başlangıçta
SAYAC=D'63' olsun.
INCF SAYAC, 0
komutu W=63+1=64 olmasına neden olur.
Not: INCF, FR'nin adresini değil içeriğini 1 artırır. Aşağıdaki örnekte SAYAC'ın adresi 0X20 fakat içeriği 0X05'dir. 0x20 adresi sonucu değiştirmez.
Örnek:
SAYAC EQU 0X20
...
MOVLW 0X05 ; W=0X05
MOVWF SAYAC ; SAYAC=0X05
INCF SAYAC, 1 ; SAYAC=0X05+1=0X06
INCF sadece Z'yi etkiler.
Zero Flag (Z) Eğer işlemden önce FR=255 ise Z=1 olur. 8-bitlik register'lar için
255'in bir fazlası 0 yapar. Diğer durumlarda Z=0 olur.
Aşağıdaki örnekte sonuç 78 (255'ten farklı) olduğundan INCF sonucunda Z=0 olur.
Örnek:
Başlangıçta SAYAC=77 olsun.
INCF SAYAC, F
komutu SAYAC=78 olmasına neden olur. W aynı kalır. Hedef W (veya 0) olsaydı, W=78 olurdu ve SAYAC aynı kalır.
Fakat aşağıdaki örnekte sonuç 0 olduğundan (8-bitlik registerlar için 256=0'dır), INCF komutu sonucunda Z=1 olur.
Örnek:
SAYAC=255(veya 0XFF) olsun.
INCF SAYAC,1 ;SAYAC=255+1=256=0
DECF, FR'den 1 azaltır ve sonucu hedef H'ye yazar.
Örnek: Başlangıçta
SAYAC=D'63' olsun.
DECF SAYAC, 0
komutu W=63-1=62 olmasına neden olur.
Not: DECF, FR'nin adresini değil içeriğini 1 azaltır. Aşağıdaki örnekte SAYAC'ın adresi 0X20 fakat içeriği 0X05'dir. 0x20 adresi sonucu değiştirmez.
Örnek:
SAYAC EQU 0X20
...
MOVLW 0X05 ; W=0X05
MOVWF SAYAC ; SAYAC=0X05
DECF SAYAC, 1 ; SAYAC=0X05-1=0X04
DECF sadece Z'yi etkiler.
Zero Flag (Z) Eğer işlemden önce FR=255 ise Z=1 olur. 8-bitlik register'lar için
255'in bir fazlası 0 yapar. Diğer durumlarda Z=0 olur.
Aşağıdaki örnekte sonuç 76 (255'ten farklı) olduğundan INCF sonucunda Z=0 olur.
Örnek:
Başlangıçta SAYAC=77 olsun.
DECF SAYAC, F
komutu SAYAC=76 olmasına neden olur. W aynı kalır. Hedef W (veya 0) olsaydı, W=76 olurdu ve SAYAC aynı kalır.
Fakat aşağıdaki örnekte sonuç 0 olduğundan (8-bitlik registerlar için 256=0'dır), DECF komutu sonucunda Z=1 olur.
Örnek:
SAYAC=1 olsun.
DECF SAYAC,1 ;SAYAC=1-1=0
DECFSZ FR'yi 1 azaltır ve sonucu hedef H'ye yazar. Sonuç sıfırsa, program bir sonraki komutu atlar.
Örnek: Başlangıçta SAYAC=D'63', olsun.
INCFSZ SAYAC, 1
GOTO LOOP1
GOTO LOOP2
SAYAC değerini 63-1=62 yapar ve sonuç 0 olmadığı için, program bir sonraki satırı işler ve LOOP1'ye atlar.
Örnek: Bu örnekte ise,
başlangıçta SAYAC D'255',olsun.
INCFSZ SAYAC, 1
GOTO LOOP1
GOTO LOOP2
SAYAC'ı =255+1=0 yapar ve sonuç 0 olduğu için bir sonraki satır atlanır ve program LOOP2'ye geçer.
INCFSZ hiçbir flag'i etkilemez.
DECFSZ FR'yi 1 azaltır ve sonucu hedef H'ye yazar. Sonuç sıfırsa, program bir sonraki komutu atlar.
Örnek: Başlangıçta SAYAC=D'63', olsun.
DECFSZ SAYAC, 1
GOTO LOOP1
GOTO LOOP2
SAYAC değerini 63-1=62 yapar ve sonuç 0 olmadığı için, program bir sonraki satırı işler ve LOOP1'ye atlar.
Örnek: Bu örnekte ise,
başlangıçta SAYAC D'1',olsun.
DECFSZ SAYAC, 1
GOTO LOOP1
GOTO LOOP2
SAYAC'ı =1-1=0 yapar ve sonuç 0 olduğu için bir sonraki satır atlanır ve program LOOP2'ye geçer.
DECFSZ hiçbir flag'i etkilemez.
ANDWF W ile FN'yi AND (VE) mantık işleminden geçirir (bknz. Doğruluk Tablosu) ve sonucu W'ya yazar.
Örnek: Başlangıçta W=0XAA=B'10101010',
olsun.
ANDLW 0X0F
makes W=0X0F&0XAA=0X0A (see figure below)
ANDLW sadece Z'yi etkiler.
Zero Flag (Z) AND işleminin sonucunda 0 bulunuyorsa, Z=1 olur.
Yukarıdaki örnekte sonuç 0X0A (0'dan farklı) olduğu için ANDWF komutu sonucunda Z=0 olur. Fakat aşağıdaki örnekte Z=1 olur.
Örnek:
MOVLW 0X0F ;
ADDLW 0XF0 ; W=0
ANDWF W ile FR'yi AND (VE) mantık işleminden geçirir (bknz. Doğruluk Tablosu) ve sonucu hedef H'ye yazar.
Örnek: Başlangıçta W=0XAA=B'10101010',
olsun.
ANDWF SAYAC, 0
W=0X0F&0XAA=0X0A olmasına neden olur.
ANDWF sadece Z'yi etkiler.
Zero Flag (Z) AND işleminin sonucunda 0 bulunuyorsa, Z=1 olur.
Yukarıdaki örnekte sonuç 0X0A (0'dan farklı) olduğu için ANDWF komutu sonucunda Z=0 olur. Fakat aşağıdaki örnekte Z=1 olur.
Örnek:
SAYAC=0XF0 olsun.
MOVLW 0X0F ;
ANDWF SAYAC, 0 ; W=0
IORLW, W ile N'yi OR (VEYA) mantık işleminden (bknz. Doğruluk Tablosu) geçirir ve sonucu W'ya yazar.
Örnek: Başlangıçta W=0XAA=B'10101010',
olsun.
IORLW 0X0F
W=0X0F|0XAA=0XAF olmasına neden olur.
IORLW sadece Z'yi etkiler.
Zero Flag (Z) OR işleminin sonucunda 0 bulunuyorsa, Z=1 olur.
Bu ancak FR ve W'den en az birininin 0 olduğu durumda gerçekleşir.
Yukarıdaki örnekte sonuç 0XAF (0'dan farklı) olduğu için IORWF komutu sonucunda Z=0 olur. Fakat aşağıdaki örnekte Z=1 olur.
Örnek:
MOVLW 0X00 ;
IORLW 0X00 ; W=0
IORWF W ile FR'yi OR (VEYA) mantık işleminden (bknz. Doğruluk Tablosu) geçirir ve sonucu hedef H'ye yazar.
Örnek: Başlangıçta W = 0XAA = B'10101010'
ve SAYAC=0x0F=B'00001111' olsun.
IORWF SAYAC, 0
W=0X0F|0XAA=0XAF olmasına neden olur.
IORWF sadece Z'i etkiler.
Zero Flag (Z) OR işleminin sonucunda 0 bulunuyorsa, Z=1 olur.
Bu ancak FR ve W'den en az birininin 0 olduğu durumda gerçekleşir.
Yukarıdaki örnekte sonuç 0XAF (0'dan farklı) olduğu için IORWF komutu sonucunda Z=0 olur. Fakat aşağıdaki örnekte Z=1 olur.
Örnek:
Diyelimki SAYAC=0X00 olsun,
MOVLW 0X00 ;
IORWF SAYAC, 0 ; W=0
W ile N'yi XOR mantık işleminden (bknz. Doğruluk Tablosu) geçirir ve sonucu W'ya yazar.
Örnek: Başlangıçta W = 0XAA = B'10101010'
olsun.
XORLW 0X0F
W=0X0F^0XAA=0XA5 olmasına neden olur.
XORLW yalnızca Z'i etkiler.
Zero Flag (Z) XOR işleminin sonucunda 0 bulunuyorsa, Z=1 olur
(Bu yalnızca W=N olduğu durumda gerçekleşir).
Yukarıdaki örnekte sonuç 0XA5 (0'dan farklı) olduğu için XORWF komutu sonucunda Z=0 olur. Fakat aşağıdaki örnekte Z=1 olur.
Örnek:
MOVLW 0XF3 ;
XORLW 0XF3 ; W=0
W ile FR'yi XOR mantık işleminden geçirir (bknz. Doğruluk Tablosu) ve sonucu hedef H'ye yazar.
Örnek: Başlangıçta W = 0XAA = B'10101010'
ve SAYAC = 0x0F = B'00001111' olsun.
XORWF SAYAC, 0
komutu W=0X0F^0XAA=0XA5 olmasını sağlar.
XORWF sadece Z'i etkiler.
Zero Flag (Z) XOR işleminin sonucunda 0 bulunuyorsa, Z=1 olur
(Bu yalnızca FR=W olduğu durumda gerçekleşir).
Yukarıdaki örnekte sonuç 0XA5 (0'dan farklı) olduğu için XORWF komutu sonucunda Z=0 olur. Fakat aşağıdaki örnekte Z=1 olur.
Örnek:
Diyelimki SAYAC=0XF3 olsun,
MOVLW 0XF3 ;
XORWF SAYAC, 0 ; W=0
COMF FR'nin her bir bitinin tersini alır ve sonucu hedef H'ye yazar.
Örnek:
Başlangıçta SAYAC=0XAA=B'10101010' olsun.
COMF SAYAC, 0
W= SAYAC=0XAA=0X55 olmasına neden olur.
COMF sadece Z flag'ini etkiler.
Zero Flag (Z) FR'nin tersi 0 olduğu zaman Z=1 olur. Bu durum sadece
FR=0XFF olduğu zaman gerçekleşir. Diğer tüm durumlarda Z=0 olur.
MOVLW N sabit sayısını W'ya kopyalar.
Örnek:
MOVLW 0X75
komutu W'yu 0X75 yapar.
Sonucun 0 olduğu durumda dahi, herhangi bir flag etkilenmemektedir.
MOVWF, W'yu FR'ye kopyalar.
Örnek:
Komut dizisinde sabit bir sayıyı bir register'a kopyalayacak bir komut bulunmamaktadır.
Genellikle bunu gerçekleştirmek için aşağıdaki ikili kullanılmaktadır.
MOVLW 0X75
MOVWF SAYAC
Bu örnekteki ilk satır W'yu 0X75 yapar ve ikinci satır ise bu sayıyı SAYAC'a kaydeder. Bu iki satırın sonunda SAYAC=0X75.
Sonucun 0 olduğu durumda dahi, herhangi bir flag etkilenmemektedir.
MOVF FR'yi hedefe (H) bağlı olarak W'ya ve kendi üzerine kopyalar
Örnek:
Eğer SAYAC=0X75 ise
MOVF SAYAC, 0
W'yu 0X75'e eşitler.
Not:
"MOVF FR, 1"
komutunun FR veya W üzerine bir etkisi yoktur. Hedef 1 (veya F) olarak seçilirse MOVF komutu genellikle FR'nin 0 olup olmadığını kontrol eder.
MOVF sadece Z'yi etkiler.
FR=0 ise, Z=1 olur.
BCF FR'nin B. bitini 0 yapar.
Örnek:
Başlangıçta SAYAC=B'10101111' olsun.
BCF SAYAC, 3
komutu SAYAC=B'10100111' olmasını sağlar. Aşağıdaki şekli inceleyiniz.
Not:
Eğer FR'nin B. biti haluhazırda 0 ise, BCF komutu bir değişiklik yapmaz.
BCF hiçbir flag'i etkilemez.
BSF FR'nin B. bitini 1 yapar.
Örnek:
Başlangıçta SAYAC=B'10101111' olsun.
BCF SAYAC, 4
komutu SAYAC=B'10111111' olmasını sağlar. Aşağıdaki şekli inceleyiniz.
Not:
Eğer FR'nin B. biti haluhazırda 1 ise, BSF komutu bir değişiklik yapmaz.
BSF hiçbir flag'i etkilemez.
Carry Flag üzerinde FR'yi bir bit sağa kaydırır ve sonucu hedef H'ye yazar. En düşük (en sağdaki) bit Carry Flag'e (C) aktarılır. Carry flag FR'nin en yüksek (en soldaki) bite aktarılır. Aradaki tüm bitler bir basamak sağa kaydırılır.
Örnek:
Başlangıçta SAYAC=B'10101111' ve C=1 olsun.
RRF SAYAC, F
komutu SAYAC=B'11010111' ve C=1 olmasına neden olur. Aşağıdaki şekli inceleyiniz.
RRF sadece C flag'ini etkiler.
FR'nin en düşük biti C'ye taşınır.
Carry Flag üzerinde FR'yi bir bit sola kaydırır ve sonucu hedef H'ye yazar. En yüksek (en soldaki) bit Carry Flag'e (C) aktarılır. Carry flag FR'nin en düşük (en sağındaki) bite aktarılır. Aradaki tüm bitler bir basamak sola kaydırılır.
Örnek:
Başlangıçta SAYAC=B'10101111' ve C=1 olsun.
RLF SAYAC, F
komutu SAYAC=B'01011111' ve C=1 olmasına neden olur. Aşağıdaki şekli inceleyiniz.
RLF sadece C flag'ini etkiler.
FR'nin en yüksek biti C'ye taşınır.
CLRW W'i siler (sıfırlar) ve Zero Flag'i 1 yapar.
CLRW sadece Z'i etkiler.
CLRW'den sonra, Z=1 olur.
CLRF FR'yi siler (sıfırlar) ve Zero Flag'i (Z) 1 yapar.
Örnek:
Önceki değeri ne olursa olsun,
CLRF SAYAC
komutundan sonra SAYAC=0 olur.
CLRF sadece Z'yi etkiler.
CLRF'den sonra, Z=1 olur.
Hiç bir şey yapmaz, sadece program bu komutta bir komut sürelik (instruction cycle) zaman geçirir. Genellikle gecikme sağlamak için kullanılır.
NOP hiçbir flag'i etkilemez.
BTFSC FR'nin B. bitinin 0 olup olmadığını kontrol eder. Eğer bu bit 0 ise, programda bir sonraki komut işlenmeden atlanır.
BTFSC herhangi bir değerde değişiklik yapmaz, sadece ilgili biti kontrol eder. B bitin register içerisindeki yerini göstermektedir.
En düşük (en sağdaki) bit için, B=0'dır.
En yüksek (en soldaki) bit için, B=7'dir.
Her zaman olmasa da çoğunlukla BTFSC Z, C ve/veya DC flag'lerinin durumunu kontrol etmek için kullanılır ( örneğin BTFSC STATUS, 2 Z flag'inin
durumunu kontrol etmek için kullanılır).
Örnek:
SAYAC=B'10101111' ise
BTFSC SAYAC, 3
GOTO DONGU1
GOTO DONGU2
, SAYAC'ın 3. biti 1 olduğu için program bir sonraki adımda GOTO DONGU1 komutuna atlar.
Örnek:
Yine SAYAC=B'10101111' ise.
BTFSC SAYAC, 4
GOTO DONGU1
GOTO DONGU2
4. bit 0 olduğundan, program bir sonraki adımda GOTO DONGU2 komutuna atlar.
BTFSC hiçbir flag'i etkilemez.
BTFSS FR'nin B. bitinin 1 olup olmadığını kontrol eder. Eğer bu bit 1 ise, programda bir sonraki komut işlenmeden atlanır.
BTFSS herhangi bir değerde değişiklik yapmaz, sadece ilgili biti kontrol eder. B bitin register içerisindeki yerini göstermektedir.
En düşük (en sağdaki) bit için, B=0'dır.
En yüksek (en soldaki) bit için, B=7'dir.
Her zaman olmasa da çoğunlukla BTFSS Z, C ve/veya DC flag'lerinin durumunu kontrol etmek için kullanılır ( örneğin BTFSS STATUS, 2 Z flag'inin
durumunu kontrol etmek için kullanılır).
Örnek:
SAYAC=B'10101111' ise
BTFSS SAYAC, 3
GOTO DONGU1
GOTO DONGU2
, SAYAC'ın 3. biti 1 olduğu için program bir sonraki adımda GOTO DONGU2 komutuna atlar.
Örnek:
Yine SAYAC=B'10101111' ise.
BTFSS SAYAC, 4
GOTO DONGU1
GOTO DONGU2
4. bit 0 olduğundan, program bir sonraki adımda GOTO DONGU1 komutuna atlar.
BTFSS hiçbir flag'i etkilemez.
SWAPF FR'nin ilk ve son dört bitini yer değiştirir ve sonucu hedef H'ye yazar.
Örnek:
Aşağıdaki komuttan önce SAYAC=B'00001111' ise,
SWAPF SAYAC, 1
komutundan sonra şekilde gösterildiği gibi SAYAC=B'11110000' olur.
SWAPF hiçbir flag'i etkilemez.
GOTO programı ETİKET'in bir altındaki satıra yönlendirir.
Örnek:
Aşağıdaki programda, DONGU1, DONGU2 ve DONGU3 etiketleri temsil etmektedir. Program 2. satırdayken GOTO DONGU3 komutundan dolayı DONGU3
ile etiketlenen 6. satıra atlar. Daha sonra GOTO DONGU2 komutundan dolayı DONGU2 ile etiketlenmiş olan 4. satıra atlar. Sonrasında ise
bu satırda bulunan GOTO DONGU2 komutundan dolayı tekrar 2. satıra döner ve bu süreç sonsuz defa tekrarlanır.
1 DONGU1
2 GOTO DONGU3
3 DONGU2
4 GOTO DONGU1
5 DONGU3
6 GOTO DONGU2
GOTO hiçbir flag'i etkilemez.
SLEEP komutundan sonra mikrodenetleyici uyku moduna geçer. Uyku modu düşük akım ve düşük güç çeker. Kullanıcı uyku modundan mikrodenetleyiciyi
SLEEP komutundan sonra TO=1 ve PD=0 olur.
CLRWDT, Watch Dog Timer'ı siler.
TO ve PD bu komuttan sonra 1 olur.
ETİKET ile tanımlanmış rutini çağırır.
CALL hiçbir flag'i etkilemez.
Çağrılan rutinden dönmeyi sağlar.
RETURN hiçbir flag'i etkilemez.
Kesme (Interrupt) rutininden dönmek için kullanılır.
RETFIE hiçbir flag'i etkilemez.
Rutinden dönmek için kullanılır. Bu komuttan sonra W, N'ye eşit olur.
RETLW hiçbir flag'i etkilemez.