PIC 명령 일람(바이트 처리 명령)


[기호 설명]
아래 설명에서 사용하고 있는 기호, 약호의 의미는 다음과 같다.
 

기호

의미 내용

기호

의미 내용

f

레지스터의 어드레스

Wreg

워킹 레지스터

b

비트의 어드레스(0-7)

k

리터럴 데이터(1byte)

x

Don't care(0으로 해둔다)

d

저장처 지정(0 or 1)

label

레이블명

PC

프로그램 카운터

dest

d와 같은 의미

 

[ ]

생략 가능

( )

내용

< >

레지스터 비트 위치

 


[바이트 처리 명령의 해설]


[ADDWF]   Wreg와 f 레지스터와의 계산

    서식               [label]       ADDWF         f, d
    오퍼랜드         f: 레지스터 어드레스(00∼127)
                         d: 저장처(0 또는 1)
    실행내용         (Wreg)+( f ) → (dest) 
    영향 플래그    C, DC, Z 
    사이클           1사이클
    기계어           0 0   0 1 1 1   d f f f   f f f f
    실행내용        Wreg의 내용에 f 레지스터의 내용을 가산하여,
                         결과를 d=0이면 Wreg에, d=1이면 f 레지스터에 써올린다.
     

[ANDWF]    Wreg와 f 레지스터와의 논리 AND 연산

    서식               [label]        ANDWF        f, d 
    오퍼랜드         f: 레지스터 어드레스(00∼127) 
                         d: 저장처(0 또는 1) 
    실행내용         (Wreg)  .AND.  ( f ) → (dest)
    영향 플래그    Z
    사이클           1사이클
    기계어           0 0   0 1 0 1   d f f f   f f f f
    실행내용        Wreg의 내용과 f 레지스터 내용과의 논리 AND 연산을 하여, 결과를 d=0이라면
                         Wreg에, d=1이라면 f 레지스터에 써올린다.
     

[CLRF]   f 레지스터를 zero clear한다

    서식              [label]         CLRF             f 
    오퍼랜드        f: 레지스터 어드레스(00∼127) 
    실행내용        00H → ( f ) 
    영향 플래그    1 → Z
    사이클           1사이클
    기계어           0 0   0 0 0 1   1 f f f   f f f f
    실행내용        f 레지스터의 내용을 0으로 클리어하고, Z 플래그를 세트한다.
     

[CLRW]   Wreg를 zero clear한다

    서식               [label]        CLRW 
    오퍼랜드         없음
    실행내용         00H → (Wreg)
    영향 플래그     1 → Z 
    사이클            1사이클
    기계어            0 0   0 0 0 1   0 0 0 0   0 0 1 1
    실행내용         Wreg 레지스터의 내용을 0으로 클리어하고, Z 플래그를 세트한다. 
     

[COMF]   f 레지스터의 보수 연산

    서식               [label]        COMF           f, d 
    오퍼랜드         f: 레지스터 어드레스(00∼127) 
                          d: 저장처(0 또는 1) 
    실행내용         complement ( f ) → (dest) 
    영향 플래그     Z 
    사이클            1사이클
    기계어            0 0   1 0 0 1   d f f f   f f f f
    실행내용         f 레지스터 내용의 2의 보수를 연산하여, 결과를 d=0이라면
                          Wreg에, d=1이라면 f 레지스터에 써올린다.
     

[DECF]   f 레지스터의 카운트 다운

    서식               [label]         DECF             f, d
    오퍼랜드         f: 레지스터 어드레스(00~127)
                         d: 저장처(0 또는 1) 
    실행내용         ( f )-1 → (dest)
    영향 플래그     Z
    사이클            1사이클
    기계어            0 0   1 0 1 1   d f f f   f f f f
    실행내용         f 레지스터의 내용으로부터 1을 감산하고, 
                          결과를 d=0이면 Wreg에, d=1이면 f 레지스터에 써올린다.
     

[DECFSZ]   f 레지스터를 감산하여 결과가 0이면 skip

    서식                [label]         DECFSZ        f, d 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                           d: 저장처(0 또는 1)
    실행내용          ( f )-1 → (dest) ; skip if result=0
    영향 플래그      없음
    사이클             1사이클, skip할 때는 2사이클
    기계어             0 0   1 0 1 1   d f f f   f f f f
    실행내용          f 레지스터의 내용으로부터 1을 감산하여, 
                          결과를 d=0이라면 Wreg에, d=1이라면 f 레지스터에 써올린다. 
                          그리고 만일 결과가 0이면 다음 명령을 NOP로 바꾸어 실행한다(skip).
                          따라서 skip시는 2사이클 명령으로 된다.
     

[INCF]   f 레지스터의 카운트 업

    서식                [label]        INCF             f, d 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                          d: 저장처(0 또는 1)
    실행내용          ( f )+1 → (dest)
    영향 플래그      Z 
    사이클            1사이클
    기계어            0 0   1 0 1 0   d f f f   f f f f
    실행내용         f 레지스터의 내용에 1을 가산하고, 결과를 d=0이면
                          Wreg에, d=1이면 f 레지스터에 써올린다.
     

[INCFSZ]   f 레지스터를 가산하여 결과가 0이면 skip

    서식               [label]        INCFSZ        f, d 
    오퍼랜드         f: 레지스터 어드레스(00∼127) 
                          d: 저장처(0 또는 1)
    실행내용         ( f )+1 → (dest) ; skip if result=0
    영향 플래그     없음
    사이클            1사이클, skip할 때는 2사이클
    기계어            0 0   1 1 1 1   d f f f   f f f f
    실행내용         f 레지스터의 내용에 1을 가산하고, 결과를 d=0이면
                          Wreg에, d=1이면 f 레지스터에 써올린다. 
                          그리고 만일 결과가 0이면 다음 명령을 NOP로 바꾸어 실행한다(skip).
                          따라서 skip시는 2사이클 명령으로 된다. 
     

[IORWF]   Wreg와 f 레지스터와의 논리합 연산

    서식                [label]       IORWF          f, d 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                           d: 저장처(0 또는 1)
    실행내용          (Wreg) .OR. ( f ) → (dest)
    영향 플래그      invert Z 
    사이클             1사이클
    기계어             0 0   0 1 0 0   d f f f   f f f f
    실행내용          Wreg의 내용과 f 레지스터 내용과의 논리합 연산을 하여, 결과를 d=0이면
                           Wreg에, d=1이면 f 레지스터에 써올린다.
     

[MOVF]   f 레지스터의 이동

    서식                [label]       MOVF          f, d
    오퍼랜드          f: 레지스터 어드레스(00∼127)
                           d: 저장처(0 또는 1)
    실행내용          ( f ) → (dest)
    영향 플래그      Z
    사이클             1사이클
    기계어             0 0   1 0 0 0   d f f f   f f f f
    실행내용          f 레지스터의 내용을 dest로 이동한다.
                           즉 d=0이면 Wreg에, d=1이라면 f 레지스터에 써올린다.
     

[MOVWF]   Wreg를 f 레지스터로 이동

    서식                [label]         MOVWF       f 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
    실행내용          (Wreg) → ( f )
    영향 플래그      없음
    사이클             1사이클
    기계어             0 0   0 0 0 0   1 f f f f   f f f f
    실행내용          Wreg의 내용을 f 레지스터로 이동한다. 
     

[NOP]   아무것도 하지 않고 다음으로 진행한다

    서식               [label]        NOP 
    오퍼랜드         f: 레지스터 어드레스(00∼127)
    실행내용         없음
    영향 플래그     없음
    사이클            1사이클
    기계어            0 0   0 0 0 0   0 x x 0   0 0 0 0
    실행내용        아무것도 하지 않고 다음으로 진행한다.
     

[RLF]   f 레지스터의 내용을 carry를 포함하여 좌측 회전

    서식               [label]         RLF            f, d 
    오퍼랜드         f: 레지스터 어드레스(00∼127)
                         d: 저장처(0 또는 1)
    실행내용         f<n> → d<n+1>     (n은 0부터 6) 
                          f<7> → C,       C→d<0>
    영향 플래그     C
    사이클            1사이클
    기계어            0 0   1 1 0 1   d f f f   f f f f
    실행내용         f 레지스터의 내용을 1비트 carry도 포함하여 좌측으로 이동한다.
                          그 결과를 d=0이면 Wreg에, d=1이면 f 레지스터에 써올린다.
     

[RRF]   f 레지스터의 내용을 carry를 포함하여 우측 회전

    서식                [label]          RrF            f, d 
    오퍼랜드          f: 레지스터 어드레스(00∼127)
                           d: 저장처(0 또는 1)
    실행내용          f<n> → d<n-1>       (n은 0부터 6) 
                           f<0> → C,      C → d<7>
    영향 플래그      C
    사이클             1사이클
    기계어             0 0   1 1 0 0   d f f f   f f f f
    실행내용          f 레지스터의 내용을 1비트 carry도 포함하여 우측으로 이동한다. 
                           그 결과를 d=0이면 Wreg에, d=1이면 f 레지스터에 써올린다.
     

[SUBWF]   Wreg와 f 레지스터와의 감산

    서식                [label]          SUBWF      f, d
    오퍼랜드          f: 레지스터 어드레스(00∼127)
                           d: 저장처(0 또는 1)
    실행내용          ( f ) - (Wreg) → (dest) 
    영향 플래그      C, DC, Z 
    사이클             1사이클
    기계어             0 0   0 0 1 0   d f f ff   f f f
    실행내용          f 레지스터의 내용에 Wreg의 2의 보수를 가산하고, 결과를 d=0이라면
                           Wreg에, d=1이라면 f 레지스터에 써올린다.
     

[SWAPF]   f 레지스터의 상/하위 교체

    서식                 [label]          SWAPF      f, d 
    오퍼랜드           f: 레지스터 어드레스(00∼127)
                           d: 저장선(0 또는 1)
    실행내용          ( f<3:0>) → ( f<7:4>) 
                                    ( f<7:4>) → ( F<3:0>)
    영향 플래그       없음
    사이클              1사이클
    기계어               0 0   1 1 1 0   d f f f   f f f f
    실행내용            f 레지스터 내용의 상위와 하위 4비트를 교체를 하고, 결과를 d=0이면
                            Wreg에, d=1이라면 f 레지스터에 써올린다.
     

[XORWF]   Wreg와 f 레지스터와의 배타적 논리합 연산

    서식                 [label]          SUBWF      f, d
    오퍼랜드           f: 레지스터 어드레스(00∼127)
                            d: 저장처(0 또는 1)
    실행내용           (Wreg) .XOR. ( f ) → (dest) 
    영향 플래그       Z
    사이클              1사이클
    기계어              0 0   0 1 1 0   d f f f   f f f f
    실행내용           Wreg의 내용과 f 레지스터 내용의 배타적 논리합을 연산하여,
                           결과를 d=0이면 Wreg에, d=1이면 f 레지스터에 써올린다.

     

    PIC 명령 일람 (비트 처리 명령)


    [기호 설명]
    아래 설명에서 사용하고 있는 기호, 약호의 의미는 다음과 같다.

    기호

    의미 내용

    기호

    의미 내용

    f

    레지스터의 어드레스

    Wreg

    워킹 레지스터

    b

    비트의 어드레스(0-7)

    k

    리터럴 데이터(1byte)

    x

    Don't care(0으로 해둔다)

    d

    저장처 지정(0 or 1)

    label

    레이블명

    PC

    프로그램 카운터

    dest

    d와 같은 의미

     

    [ ]

    생략 가능

    ( )

    내용

    < >

    레지스터 비트 위치

     


    [비트 처리 명령 해설]
     

    [BCF]    f 레지스터의 지정 비트를 0으로 한다

    서식                [label]        BCF          f,  b 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                           b: 비트 지정(0∼7)
    실행내용          0  →  f, b>
    영향 플래그      없음 
    사이클             1사이클
    기계어             0 0   0 0 b b   b f f f    f f f f
    실행내용          f 레지스터의 제 b비트째를 0으로 한다.
                           플래그의 변화는 없다.
     

    [BSF]   f 레지스터의 지정 비트를 1로 한다

    서식                [label]        BSF          f,  b 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                           b: 비트 지정(0∼7)
    실행내용          1  →  f, b>
    영향 플래그      없음 
    사이클             1사이클
    기계어             0 0   0 1 b b   b f f f    f f f f
    실행내용          f 레지스터의 제 b비트째를 1로 한다.
                           플래그의 변화는 없다.
     

    [BTFSC]    f 레지스터의 제 b비트째가 0이었다면 스킵

    서식                [label]        BTFSC          f,  b 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                           b: 비트 지정(0∼7)
    실행내용          skip if   (f<b>) = 0
    영향 플래그      없음 
    사이클             1사이클, 스킵할 때는 2사이클
    기계어             0 1   1 0 b b   b f f f    f f f f
    실행내용          f 레지스터의 제 b비트째가 0이었다면, 
                           다음의 명령을 NOP로 바꾸어 실행한다(skip).
                           따라서 스킵시에는 2사이클 명령으로 된다.
     

    [BTFSS]    f 레지스터의 제 b비트째가 1이었다면 스킵

    서식                [label]        BTFSS          f,  b 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                           b: 비트 지정(0∼7)
    실행내용          skip if   (f<b>) = 1
    영향 플래그      없음 
    사이클             1사이클, 스킵할 때는 2사이클
    기계어             0 1   1 1 b b   b f f f    f f f f
    실행내용          f 레지스터의 제 b비트째가 1이었다면, 
                           다음의 명령을 NOP로 바꾸어 실행한다(skip).
                           따라서 스킵시에는 2사이클 명령으로 된다.
     

    [IORWF]    Wreg와 f 레지스터와의 논리합 연산

    서식                [label]        IORWF          f,  d 
    오퍼랜드          f: 레지스터 어드레스(00∼127) 
                           d: 저장처 지정(0 또는 1)
    실행내용          (Wreg)  .OR.  ( f )   →   (dest)
    영향 플래그      invert  Z
    사이클             1사이클
    기계어             0 0   0 1 0 0   d f f f   f f f f
    실행내용          Wreg의 내용과 f 레지스터 내용의 논리합, 연산을 하여,
                           결과를 d=0이면 Wreg에, d=1이면 f 레지스터에 써올린다.

     

    PIC 명령 일람 (리터럴 처리 명령)


    [기호 설명]
    아래 설명에서 사용하고 있는 기호, 약호의 의미는 다음과 같다.

    기호

    의미 내용

    기호

    의미 내용

    f

    레지스터의 어드레스

    Wreg

    워킹 레지스터

    b

    비트의 어드레스(0-7)

    k

    리터럴 데이터(1byte)

    x

    Don't care(0으로 해둔다)

    d

    저장처 지정(0 or 1)

    label

    레이블명

    PC

    프로그램 카운터

    dest

    d와 같은 의미

     

    [ ]

    생략 가능

    ( )

    내용

    < >

    레지스터 비트 위치

     

     

    [리터럴 처리 명령 해설]
     

    [ADDLW]    Wreg에 리터럴 데이터를 가산한다.

    서식                [label]        ADDLW          k 
    오퍼랜드          k: 리터럴 데이터 (00∼256) 
    실행내용          (Wreg) + k    →   (Wreg) 
    영향 플래그      C, DC, Z
    사이클             1사이클
    기계어             1 1   1 1 1 x   k k k k    k k k k
    실행내용          Wreg의 내용에 8비트의 literal 데이터를 가산하여,
                           결과를 Wreg에 써올린다.
     

    [ANDLW]    Wreg와 리터럴 데이터의 AND를 취한다

    서식                [label]        ANDLW          k 
    오퍼랜드          k: 리터럴 데이터 (00∼256) 
    실행내용          (Wreg)  .AND. ( k )  →  (Wreg) 
    영향 플래그      Z
    사이클             1사이클
    기계어             1 1   1 0 0 1   k k k k    k k k k
    실행내용          Wreg의 내용과 8비트의 literal 데이터의 AND를 취하고,
                           결과를 Wreg에 써올린다.
     

    [CLRWDT]    watchdog timer를 리셋한다

    서식                [label]        CLRWDT
    오퍼랜드          없음 
    실행내용          0   →   (WDT prescaler) 
                           1   →   TO,      1   →   PD
    영향 플래그      TO, PD
    사이클             1사이클
    기계어             0 0   0 0 0 0   0 1 1 0    0 1 0 0
    실행내용          watchdog timer를 리셋하고, 게다가 연동하는 prescaler도                        zero clear한다.
                           status bit의 TO와 PD를 1로 세트한다.
     

    [IORLW]    Wreg와 리터럴 데이터의 OR을 취한다

    서식                [label]        IORLW      k
    오퍼랜드          k: 리터럴 데이터(00~256)
    실행내용          (Wreg)  .OR. ( k )  →  (Wreg) 
    영향 플래그      Z
    사이클             1사이클
    기계어             1 1   1 0 0 0   k k k k    k k k k
    실행내용          Wreg의 내용과 8비트의 리터럴 데이터의 OR을 취하고,
                           결과를 Wreg에 써올린다.
     

    [MOVLW]    리터럴 데이터를 Wreg에 꺼낸다

    서식                [label]        MOVLW      k
    오퍼랜드          k: 리터럴 데이터(00~256)
    실행내용          ( k )  →  (Wreg) 
    영향 플래그      없음
    사이클             1사이클
    기계어             1 1   0 0 x x   k k k k    k k k k
    실행내용          8비트의 리터럴 데이터를 Wreg에 로드한다.
     

    [SLEEP]    프로세서를 sleep mode로 한다

    서식                [label]        SLEEP      k
    오퍼랜드          없음
    실행내용          0  →  WDT
    영향 플래그      TO, PD
    사이클             1사이클
    기계어             0 0   0 0 0 0   0 1 1 0    0 0 1 1
    실행내용          power down status bit(PD)를 리셋하하고,
                           time out status bit(TO)를 세트한다.
                           그리고 watchdog timer를 리셋한다. 
                           그 후, 오실레이터를 정지시켜 프로세서를 
                           sleep mode로 한다.
     

    [SUBLW] 리터럴 데이터로부터 Wreg를 감산한다

    서식                [label]        SUBLW      k
    오퍼랜드          k: 리터를 데이터(00∼256)
    실행내용          ( k ) - (Wreg)  →  (Wreg) 
    영향 플래그      C, DC, Z
    사이클             1사이클
    기계어             1 1   1 1 0 x   k k k k    k k k k
    실행내용          8비트의 리터럴 데이터로부터 Wreg를 감산하여,
                           결과를 Wreg에 써올린다.
     

    [XORLW]    Wreg와 리터럴 데이터의 XOR을 취한다

    서식                [label]        XORLW      k
    오퍼랜드          k: 리터를 데이터(00∼256)
    실행내용          (Wreg)  .XOR. ( k )  →  (Wreg)
    영향 플래그      Z
    사이클             1사이클
    기계어             1 1   1 0 1 0   k k k k    k k k k
    실행내용          Wreg의 내용과 8비트의 리터럴 데이터의 XOR을 취하고,
                           결과를 Wreg에 써올린다.

    PIC 명령 일람 (점프 명령)


    [기호 설명]
    아래 설명에서 사용하고 있는 기호, 약호의 의미는 다음과 같다.

    기호

    의미 내용

    기호

    의미 내용

    f

    레지스터의 어드레스

    Wreg

    워킹 레지스터

    b

    비트의 어드레스(0-7)

    k

    리터럴 데이터(1byte)

    x

    Don't care(0으로 해둔다)

    d

    저장처 지정(0 or 1)

    label

    레이블명

    PC

    프로그램 카운터

    dest

    d와 같은 의미

     

    [ ]

    생략 가능

    ( )

    내용

    < >

    레지스터 비트 위치

     

     

    [점퍼 명령 해설]
     

    [CALL]    서브루틴에 점프한다

    서식                [label]        CALL          k 
    오퍼랜드          k: 리터럴 데이터 (00∼2048) 
    실행내용          (PC) + 1    →   스택 
    영향 플래그      없음
    사이클             2사이클
    기계어             1 0   0 k k k   k k k k    k k k k
    실행내용          서브루틴을 콜한다.
                          우선 복귀 번지(PC+1)를 stack에 저장하고, 
                          11비트의 리터럴 어드레스를 PC 레지스터에 써올리며,
                          게다가 PC의 상위에 PCLATH를 써올림으로써 점프한다. 
     

    [GOTO]    서브루틴에 점프한다

    서식                [label]        GOTO          k 
    오퍼랜드          k: 리터럴 데이터 (00∼2048) 
    실행내용          k   →   PC<10:0> 
    영향 플래그      없음
    사이클             2사이클
    기계어             1 0   1 k k k   k k k k   k k k k
    실행내용          무조건으로 지정번지에 점프한다.
                           11비트의 리터럴 어드레스를 PC 레지스터에 써올리고,
                           더구나 PC의 상위에 PCLATH를 써올림으로써 점프한다.
     

    [RETURN]    서브루틴에서 무조건 복귀한다

    서식                [label]        RETURN          k 
    오퍼랜드          없음 
    실행내용          스택   →   PC 
    영향 플래그      없음
    사이클              2사이클
    기계어              0 0   0 0 0 0   0 0 0 0    1 0 0 0 
    실행내용          서브루틴에서 무조건 복귀한다.
     

    [RETFIE]    인터럽트로부터 복귀한다

    서식                [label]        RETFIE 
    오퍼랜드          없음
    실행내용          스택   →  PC
    영향 플래그      없음
    사이클             2사이클
    기계어             0 0   0 0 0 0   0 0 0 0   1 0 0 1
    실행내용          인터럽트 처리로부터 복귀한다.
                           stack에 저장되어 있던 복귀 번지를 PC 레지스터에
                           써넣음으로써 점프함과 동시에,
                           글로벌 인터럽트 허가 비트인 GIE에 1을 세트하여
                           인터럽트를 허가한다. 
     

    [RETLW]    리터럴 데이터를 Wreg에 세트하고 복귀한다

    서식                [label]        RETLW          k 
    오퍼랜드          k: 리터럴 데이터 (00∼256) 
    실행내용          k    →   Wreg,    스택    →  PC
    영향 플래그      없음
    사이클             2사이클
    기계어             1 1   0 1 x x   k k k k    k k k k
    실행내용          서브루틴으로부터 복귀한다.
                          그때 Wreg에 리터럴 데이터를 가지고 돌아간다.
                          우선 8비트의 리터럴 데이터를 Wreg에 로드하고,
                          다음에 stack에 저장되어 있던 복귀 번지를
                          PC 레지스터에 써올림으로써 점프한다