PIC講習/アセンブリ言語の文法
概要
本章では、アセンブリ言語の文法を解説します。
一般的なプログラミング言語よりは簡単ですが、やはり覚えるべきことはあります。
重要語
命令文
命令と引数の組
引数
命令を詳しく修飾する値
インデント
行頭の字下げ
コメント
コンパイルされない注釈
定数
数値を名前で表したもの
必要語
命令
コンピュータへの指令の最小単位
命令文
命令文statementとは、命令と引数の組です。
プログラムは、実行させたい動作に対応する命令文を並べて作ります。
引数
引数ひきすう/operandとは、命令の内容を修飾する値です。
例えば、ADD
という命令は、2つの値を足せ、という意味です。
しかし、これでは計算に使う値や、結果を保存するレジスタがわかりません。
引数は、そのような内容を示します。
なお、単純な動作の命令文には、引数を持たないものもあります。
数値
プログラムには、数値が必要です。
今回のコンパイラでは、2/10/16進数に対応しています。
10進数はそのまま、0
や9
、107
のように記述します。
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をスリープ状態にするのと同じことです。
なお、休止状態から復帰するには、割り込みという機能を使います。
詳しくは対応する章を読んでください。