PIC의 명령 서식

[소스 코드의 서식]

PIC 시리즈의 어셈블러에서 사용되는 명령의 서식은 다음과 같이 되어 있다.
source code의 각 행은 다음과 같은 기본 포맷으로 쓴다.

    Label       Mnemonic           Operand            Comment

주1: Label은 행의 선두부터 시작할 것
주2: Mnemonic에서 Label이 없을 때는 선두에 1개 이상의 스페이스가 필요
주3: Comment는 어디에서 시작해도 좋다
주4: 1행은 255 문자 이하
주5: 각각의 항은 1개 이상의 스페이스로 분리한다
주6: 1행에 복수의 포맷을 ','로 단락지어 쓸 수 있다

Label

Label은 각 행의 선두로부터 시작하지 않으면 안된다.
또, 포함되는 문자는 알파벳이나 언드바(_)로 시작되는 영숫자여야 한다.
Label은 32 문자 이하의 길이까지이며, 대문자, 소문자의 구별이 있다.
단, 대소 문자의 구별은 환경 설정에서 없앨 수도 있다.

Mnemonic

어셈블러 명령과 지시명령(의사명령)은 행의 선두부터 1개 이상의 스페이스가 있어야 한다.
Label이 있는 경우는 Label 다음에 1개 이상의 스페이스나 콜론(:)이 필요하다.

Operand

Operand는 Mnemonic의 다음에 1개 이상의 스페이스나 타브로 분리된다. 또한 복수의 Operand가 필요한 경우에는 ','으로 분리한다.

Comment

세미콜론(;)에 이어지는 문절은 모두 코멘트로 된다.
그리고 어셈블에서는 무시되고 오브젝트에는 아무런 관계가 없다.
문자정수로 세미콜론을 사용하는 것은 문제가 없다.


[명령의 서식]

source code 중에서도 특히 명령을 쓸 때의 서식을 설명한다. 명령 가운데서 Operand에는 다음과 같은 데이터를 쓸 필요가 있다.
    f: register file address
    d: destination select
    b: bit address
    k: literal


 각 서식에 대해 자세히 설명한다.

  (1) f: register file address

register file address로서는 7비트의 폭이 있기 때문에 00부터 7F까지, 최대 128개의 레지스터를 지정할 수 있다. 그러나, 실제로 존재하는 레지스터는 PIC의 종류에 따라 다르다.

    (예) PIC16F84의 경우
          address     00∼0C        :시스템 레지스터
          address     0C∼4F        :범용 레지스터(68개)

이 레지스터 어드레스의 지정에는 어드레스 수치를 직접 지정하는 것에서는 실수도 많고 이해하기 어려워지므로 일반적으로는 EQU 명령 등으로 레이블을 설정하여 레이블로 지정한다.

  (예)
         COUNTER    EQU    0DH                 ;레이블 설정 정의
                     ---------------
                            INCR    COUNTER, F   ; 레이블 사용

  (2) d: destination select

이것은 명령을 실행한 결과를 어디에 저장할 것인가를 지정하는 것인데, 0이나 1의 2가지만 지정할 수 있다. 그리고 표준 include file로 W와 F가 정의되어 있으며 다음과 같이 된다.

W:  d=0에서 Wreg에 결과를 저장한다
F:   d=1에서 f로 지정하고 있는 레지스터에 저장한다.

(예)
DECF          COUNTER,W          COUNTER-1을 Wreg에 저장

(3) b: bit address

비트 위치를 지정하는 3비트의 어드레스로 1바이트 데이터의 몇 비트째인가를 지정할 수 있다.
이 b의 서식에는 직접 수치를 사용하여 지정하는 방법과, 별도로 설정된 레이블을 사용하여 지정하는 방법으로 2가지가 사용되고 있다.

(예)
            BSF            PORTA,3           포트 A의 4비트째(0부터 카운트한다)
RA3      EQU            3                      레이블 설정 정의
           BCF             PORTA,RA3       레이블의 사용

  (4) k: Literal

직접 고정의 값을 사용하는 경우에 사용한다. 1바이트(8비트)의 폭이 있으므로, 수치라면 0∼256,문자라면 ASCII 코드를 사용할 수 있다.

(예)
ADDLW          15          15를 가산
MOVLW         'C'         ASCII 문자 코드(3C)를 Wreg로


[표준 인클루드 파일의 내용]

file register 중에서도 시스템에서 사용하고 있는 어드레스 00부터 0C까지의 범위는 매회 같은 레이블 설정으로 된다.
그래서 이것을 가급적 편리하게 할 수 있도록 MPLAB 등의 어셈블러에는 시스템의 '표준 include file'로서 사전에 정의 파일이 준비되어 있다.
그래서, 시스템의 레지스터를 지정할 때에는 이 표준으로 설정되어 있는 레이블을 서식으로 지정하는 것이 편하다.
다음의 리스트가 이 표준 include file로 설정되어 있는 레이블의 일람이다.


;===============================================
;
;    Register  Definitions
;
;===============================================

W                     EQU         H'0000'
F                      EQU         H'0001'

;-----  Register  iles -------------------------

INDF                EQU          H'0000'
TMR0               EQU          H'0001'
PCL                 EQU          H'0002'
STATUS           EQU          H'0003'
FSR                 EQU          H'0004'
PORTA            EQU           H'0005'
PORTB            EQU           H'0006'
EEDATA           EQU          H'0008'
EEADR             EQU          H'0009'
PCLATH           EQU          H'000A'
INTCON           EQU           H'000B'

OPTION_REG   EQU           H'0081'
TRISA              EQU           H'0085'
TRISB              EQU           H'0086'
EECON1          EQU           H'0088'
EECON2          EQU           H'0089'

;----- STATUS Bits --------------------------

IRP                 EQU            H'0007'
RP1                EQU            H'0006'
RP0                EQU            H'0005'
NOT_TO         EQU            H'0004'
NOT_PD         EQU            H'0003'
Z                   EQU            H'0002'
DC                 EQU            H'0001'
C                   EQU            H'0000'

;-----   INTCON Bits  --------------------------

GIE                EQU             H'0007'
EEIE              EQU             H'0006'
T0IE               EQU             H'0005'
INTE              EQU             H'0004'
RBIE              EQU             H'0003'
T0IF               EQU             H'0002'
INTF              EQU              H'0001'
RBIF              EQU              H'0000'

;-----  OPTION Bits  --------------------------

NOT_RBPU    EQU               H'0007'
INTEDG         EQU               H'0006'
T0CS            EQU               H'0005'
T0SE            EQU               H'0004'
PSA              EQU               H'0003'
PS2              EQU               H'0002'
PS1              EQU               H'0001'
PS0              EQU               H'0000'

;-----  EECON1 Bits  --------------------------

EEIF            EQU                H'0004'
WRERR        EQU                H'0003'
WREN          EQU                H'0002'
WR              EQU                H'0001'
RD               EQU                H'0000'

;===============================================
;
;                RAM  Definition
;
;===============================================

                __MAXRAM       H'CF'
                __BADRAM        H'07',   H'50'-H'7F',  H'87'

;===============================================
;
;               Configuration Bits
;
;===============================================

_CP_ON          EQU                H'000F'
_CP_OFF         EQU                H'3FFF'
_PWRTE_ON    EQU                H'3FF7'
_PWRTE_OFF   EQU                H'3FFF'
_WDT_ON        EQU                H'3FFF'
_WDT_OFF       EQU                H'3FFB'
_LP_OSC         EQU                H'3FFC'
_XT_OSC         EQU                H'3FFD'
_HS_OSC         EQU                H'3FFE'
_RC_OSC         EQU                H'3FFF'


다음 페이지로      목차 페이지로