「命令」にはどんな種類がある?

【基本的な命令】

 コンピュータの命令にはどんなものがあるのでしょうか。実は、とても
複雑な機能を実行するコンピュータも非常に単純な命令の集まりから出来ています。
命令の種類をおおざっぱに分けると下記の様な種類になります。


(1) 演算命令

いわゆる「計算」をする命令です。この計算には加算、減算などの算術
演算や、AND、ORなどの論理演算、左右シフトなどの命令を含みます。
演算対象は主にレジスタですが、特徴的なのは、入出力ポートやタイマ
も対象に含まれることです。


(2) 分岐命令、条件判断分岐命令

これは命令の実行順序を変更する命令で、プログラムカウンタが変更
されます。
GOTOという無条件分岐と、「もし何々だったら」という条件分岐とがあり
ます。
特徴的なのは、別の場所に記憶されているプログラム群を実行したら
元に戻れ、というCALL命令とRETURN命令があることです。


(3)ビット処理命令

レジスタ、入出力ポートに対して、1ビットだけの書き込み、読み出しをする命令
で、コンピュータに特徴的な命令です。


(4) その他制御命令

特殊な制御を指定する命令で、いずれもコンピュータの内部機能の制御を行います。
これにはSLEEPとCLRWDTがあります。


【PICシリーズの命令一覧】
 PICシリーズのマイクロコンピュータで共通に使われる命令が下表で
非常に少ない数の命令で出来ているのが特徴です。

nemonic  : 内容       :影響Flag  :Cycle :オペコード
---------------------------------------------------------------------
ADDLW k  : w + k -> w    : C,DC,Z  :  1 : 11 111x kkkk kkkk
ADDWF f,d : w + f -> dest   : C,DC,Z  :  1 : 00 0111 dfff ffff
ANDLW k  : w AND k -> w   : Z     :  1 : 11 1001 kkkk kkkk
ANDWF f,d : w AND f -> dest  : Z     :  1 : 00 0101 dfff ffff
BCF  f,b : 0 -> f<b>     : None   :  1 : 01 00bb bfff ffff
BSF  f,b : 1 -> f<b>     : None   :  1 : 01 01bb bfff ffff
BTFSC f,b : skip if f<d>=0  : None   : 1(2) : 01 10bb bfff ffff
BTFSS f,b : skip if f<d>=1  : None   : 1(2) : 01 11bb bfff ffff
CALL adr : Subroutine Call  : None   :  2 : 10 0kkk kkkk kkkk
       PC+1 -> TOS  k -> PC<10:0> PCLATH<4:3> -> PC<12:11>
CLRF f  : 00h -> f     : Z(=1)   :  1 : 00 0001 1fff ffff
CLRW    : 00h -> w     : Z(=1)   :  1 : 00 0001 0xxx xxxx
CLRWDT   : 00h -> WDT    : PD,TO   :  1 : 00 0000 0110 0100
       0 -> WDT prescaler 1 -> PD(STATUS<3>) 1 -> TO(STATUS<4>)
COMF f,d : f -> dest     : Z     :  1 : 00 1001 dfff ffff
DECF f,d : f - 1 -> dest   : Z     :  1 : 00 0011 dfff ffff
DECFSZ f,d : f - 1 -> dest,  : None   : 1(2) : 00 1011 dfff ffff
       skip if result=0
GOTO k  : k -> PC<10:0>   : None   :  2 : 10 1kkk kkkk kkkk
       PCLATH<4:3> -> PC<12:11>
INCF f,d : f + 1 -> dest   : Z     :  1 : 00 1010 dfff ffff
INCFSZ f,d : f + 1 -> dest,  : None   : 1(2) : 00 1111 dfff ffff
       skip if result=0
IORLW k  : w OR k -> w    : Z     :  1 : 11 1000 kkkk kkkk
IORWF f,d : w OR f -> dest  : Z     :  1 : 00 0100 dfff ffff
MOVLW k  : k -> w      : None   :  1 : 11 00xx kkkk kkkk
MOVF f,d : f -> dest     : Z     :  1 : 00 1000 dfff ffff
MOVWF f  : w -> f      : None   :  1 : 00 0000 1fff ffff
NOP    : No Operation   : None   :  1 : 00 0000 0xx0 0000
RETFIE   : 割り込み処理から : None   :  2 : 00 0000 0000 1001
       のリターン     TOS -> PC,   1 -> GIE(INTCON<7>)
RETLW k  : k -> w して    : None   :  2 : 11 01xx kkkk kkkk
      リターン      TOS -> PC
RETURN   : サブルーチン   : None   :  2 : 00 0000 0000 1000
       からのリターン   TOS -> PC
RLF f,d  : 左回転      : C     :  1 : 00 1101 dfff ffff
       f<n> -> d<n+1> f<7> -> C C -> d<0>
RRF f,d  : 右回転      : C     :  1 : 00 1100 dfff ffff
       f<n> -> d<n-1> f<0> -> C C -> d<7>
SLEEP   : スリープモード  : PD,TO   :  1 : 00 0000 0110 0011
       00h -> WDT  1 -> PD(STATUS<3>)  0 -> TO(STATUS<4>)
SUBLW k  : k - w -> w    : C,CD,Z  :  1 : 11 110x kkkk kkkk
SUBWF f,d : f - w -> dest   : C,CD,Z  :  1 : 00 0010 dfff ffff
SWAPF f,d : f<0:3> -> d<4:7>, : None   :  1 : 00 1110 dfff ffff
       f<4:7> -> d<0:3>
XORLW k  : w XOR k -> w   : Z     :  1 : 11 1010 kkkk kkkk
XORWF f,d : w XOR f -> dest  : Z     :  1 : 00 0110 dfff ffff



次のページへ     目次へ