「天文屋のためのマイコン入門」転送命令を設計しよう
それでは、PICの命令表を設計してみたいとおもいます。まずはデータの転送命令です。マイコンの基本構成図を見てください。
マイコンの命令解析機が対象とするのは、主にデータメモリです。PICではレジスタファイルというらしいです。
プログラムはプログラムメモリに格納されていますが、データはデータメモリに格納されています。
さて、この図のようにマイコンの命令解析機は、データメモリからデータをいろいろアクセスしてあれこれします。
ただ、もっと効率よく命令を処理する方式があります。ワーキングレジスタという、データの一時格納領域を用意しておきます。
マイコンはメモリ上のデータを直接操作してもいいのですが、ワーキングレジスタにいったん、データをコピーしておき、そこで計算したほうが効率が良いことがあります。
理由は次のとおりです。
1 メモリはマイコンの外部にある場合があり、アクセスが遅い。一方ワーキングレジスタはマイコン内部の、命令解析機の近くにあるので、アクセスが早い。
2 メモリはデータをアクセスするのに、いちいち番地を指定する。特に連続演算の場合は効率が悪い。たとえば、
100番地のデータを3倍する
100番地のデータに2を足す
100番地のデータを100と比較する
などです。一方、ワーキングレジスタは一個しかないので、番地を指定する必要がなく、結果としてプログラムを小さくできる。
さて、このようにマイコンが対象とするものは、メモリとワーキングレジスタと、それともうひとつ、上の例のように、3とか2とか、数そのものがあります。
つまりマイコンの対象とするものは、この3つということになります。さて、この3つを記号で表します。
ワーキングレジスタ Wとします。
データメモリ PICではレジスタファイルというみたいなので、Fとします。
数 PICではリテラルというらしいので、L(エル)とします。
さて、この3つの間の転送ですが、論理的に考えられるものをすべて列挙します。
最後のF->Fは説明が必要です。これはメモリからメモリへの転送です。たとえば10番地のデータを20番地のメモリへ転送するなどです。
あと、3と5はありえないです。Lは数ですが、数は2とか3とかデータそのもので、データを入れておくものではありません。3という数に5を入れておくことはできません。
よって次の5通りになります。
命令コストとは
命令コストという言葉は私の造語ですが、非常に重要な概念なので、理解してください。
●データメモリ(L)
データメモリに関する命令はメモリの番地を付帯情報として必要とするので、命令コストは1です。
●ワーキングレジスタ(W)
ワーキングレジスタは一つしかないので、区別する必要がなく付帯情報もない。したがって、命令コストは0です。
●数(L)
数を扱う命令は、その数(100とか5)自体を付帯情報にする必要があるので、命令コストは1です。
さて、これらの命令コストを先の1~4の組み合わせで計算してみましょう。
4は、命令コストが2です。それで、ここからが重要ですが、PICは命令コストが2は許されません。
なぜ、許されないか、それがPICの設計思想なのです。命令コストを制限することにより、処理速度を高速化する、これがPICの設計なのです。(RISCマイコンといますが)
また、5ですが、違う番地の転送は確かに命令コストが2ですが、同じ番地の転送なら番地指定は一つしかなく命令コストは1です。
したがって、5は同じ番地間の転送という限定条件つきで、OKです。
同じ番地の転送?
たとえば10番地のデータを10番地のメモリへ転送? これに何の意味があるの?と思われるかも知れません。実は、少し意味があるのです。今後機会があれば説明したいと思います。
とうことで、転送命令で許されるのは以下の4つの組み合わせです。
さて、それでは、実際に命令を作ってみましょう。
データの転送の命令なので、英語のMOVEを借用して、MOVという記号を作り、上の1から4の組み合わせを語尾につけます。そうすると、
●付帯情報
命令には付帯情報がつき物です。たとえばメモリを操作する命令ならメモリの番地を指定しなければいけません。
たとえば1のMOVWFはワーキングレジスタからメモリへの転送命令ですが、メモリの番地を指定しなければなりません。
したがって、ワーキングレジスタから10番地のメモリへの転送は次のように書かなければなりません。
MOVWF 10
同様に数(L)も付帯情報を必要とします。たとえば数20をワーキングレジスタに転送する命令は次のように付帯情報をつけます。
MOVLW 20
メモリの番地の付帯情報を記号fと書きます。
数の付帯情報を記号kと書きます。
そうすると付帯情報を含めた命令の記法は次のようになります。(小文字のfは番地に置き換えます、kは数値に置き換えます)
4はメモリからメモリの転送ですが同じ番地なので、付帯情報は一つです。
これでPICの転送命令が完成です。
どうでしょうか、命令というものがほぼ自動的に決まるのがわかると思います。じつは話はこれで終わりではなく、ここがPICの難しいとことですが、実は上の1~4のうち、2と4ですが、
2 MOVFW f
4 MOVFF f
PICでは、これを一つ命令にしてしまって、最後のWとFの違いを第二付帯情報として区別するのです。
MOVF f, w
MOVF f, f
なんでこんなわかりにくいことするのでしょう。実は第二付帯情報にはデータの格納先の意味合いがあり、後で説明する演算命令で詳しく説明します。いずれのせよわかりずらいことは確かです。
したがって、PICの転送命令は次の4つです。
次回、もうちょと転送命令について説明します。
| 固定リンク
コメント