PIC講習/アセンブリ言語の文法

概要

本章では、アセンブリ言語の文法を解説します。
一般的なプログラミング言語よりは簡単ですが、やはり覚えるべきことはあります。

重要語

命令文

命令と引数の組

引数

命令を詳しく修飾する値

インデント

行頭の字下げ

コメント

コンパイルされない注釈

定数

数値を名前で表したもの

必要語

命令

コンピュータへの指令の最小単位

命令文

命令文statementとは、命令と引数の組です。
プログラムは、実行させたい動作に対応する命令文を並べて作ります。

引数

引数ひきすう/operandとは、命令の内容を修飾する値です。
例えば、ADDという命令は、2つの値を足せ、という意味です。
しかし、これでは計算に使う値や、結果を保存するレジスタがわかりません。
引数は、そのような内容を示します。
なお、単純な動作の命令文には、引数を持たないものもあります。

数値

プログラムには、数値が必要です。
今回のコンパイラでは、2/10/16進数に対応しています。
10進数はそのまま、09107のように記述します。
2進数は、先頭に%をつけることで表します。
先ほどの10進数は、%0%1001%1101011のようになります。
16進数には、$をつけて、$0$9$6Bと書きます。
なお、$08のように、桁数を揃えてもよいです。
負数を記述するには、$%よりも前に、-を置きます。
また、数値はスペースや改行を含んではいけません。

命令文の例

以下は、命令文の例です。
命令の後に、数値などの引数を、ドット.を挟んで並べます。
命令文の例
NOP
CLR.9
BCF.$2D.3

インデント

行の先頭の位置をずらすことを、インデントと言います。
日本語では字下げと言い、段落の最初の文字をずらしたりします。
プログラムでは、段落の全ての行で字下げをします。
具体的には、スペースやタブで位置をずらします。
これらは命令文などとして認識されないので、コンパイラの解釈に影響はありません。
しかし、段落が分からないプログラムは読みにくいので、インデントを付けるべきでしょう。

コメント

コメントとは、プログラムにつける注釈のことです。
コンパイラは、#から改行までを無視します。
コメントを残しておくことで、記述したときの意図を掴みやすくなります。
自分が読み返しやすいだけでなく、他の人にも理解しやすいです。
コメントの例
#ここはコメント
 #ここもコメント
ここはコメントでないので不正な命令文

NOP #左の命令は認識されるが右はされない NOP
  SLP #2字分インデント

定数

定数とは、数値に名前をつけたものです。
プログラムでは、たくさんの数値を記述する必要がありますが、数値だけではわかりにくく、覚えにくいです。
そこで、よく使う数値や、仕様上決まっている数値、わかりにくい数値に名前をつけて、書きやすくします。
具体的には、レジスタの番号や、オペコードのアドレスなどです。
定数の定義には、COL構文を使い、名前と値を引数にします。
命令のように書きますが、命令ではないので、オペコードにはなりません。
なお、値として、定義済みの別の定数を指定してもよいです。
簡単な定数の例
COL.ABC.0  #定数ABCの値は0
COL.D.-$20 #定数Dは-$20,つまり-32
COL.E.D    #定数Eの値も-32

簡単な命令

以下の命令には、引数がなく、計算も行いません。

NOP命令

NOP命令は、何も行いません。
ただ待機するだけですが、1サイクル分の時間を稼いで調整するのに使います。
1サイクル後には、次の命令から実行を続けます。

SLP命令

SLP命令は、PICマイコンを休止させます。
休止状態のPICは、命令を実行しなくなり、消費電力が減ります。
PCをスリープ状態にするのと同じことです。
なお、休止状態から復帰するには、割り込みという機能を使います。
詳しくは対応する章を読んでください。