« 「天文屋のためのマイコン入門」PICの命令を設計しようその1 | トップページ | 「天文屋のためのマイコン入門」転送命令続き »

2014年3月26日 (水)

「天文屋のためのマイコン入門」転送命令を設計しよう

それでは、PICの命令表を設計してみたいとおもいます。まずはデータの転送命令です。マイコンの基本構成図を見てください。

マイコンの命令解析機が対象とするのは、主にデータメモリです。PICではレジスタファイルというらしいです。

プログラムはプログラムメモリに格納されていますが、データはデータメモリに格納されています。1403231

さて、この図のようにマイコンの命令解析機は、データメモリからデータをいろいろアクセスしてあれこれします。

ただ、もっと効率よく命令を処理する方式があります。ワーキングレジスタという、データの一時格納領域を用意しておきます。1403232_2

マイコンはメモリ上のデータを直接操作してもいいのですが、ワーキングレジスタにいったん、データをコピーしておき、そこで計算したほうが効率が良いことがあります。

理由は次のとおりです。

1 メモリはマイコンの外部にある場合があり、アクセスが遅い。一方ワーキングレジスタはマイコン内部の、命令解析機の近くにあるので、アクセスが早い。

2 メモリはデータをアクセスするのに、いちいち番地を指定する。特に連続演算の場合は効率が悪い。たとえば、

100番地のデータを3倍する
100番地のデータに2を足す
100番地のデータを100と比較する

などです。一方、ワーキングレジスタは一個しかないので、番地を指定する必要がなく、結果としてプログラムを小さくできる。

さて、このようにマイコンが対象とするものは、メモリとワーキングレジスタと、それともうひとつ、上の例のように、3とか2とか、数そのものがあります。

つまりマイコンの対象とするものは、この3つということになります。さて、この3つを記号で表します。

ワーキングレジスタ Wとします。
データメモリ PICではレジスタファイルというみたいなので、Fとします。
数 PICではリテラルというらしいので、L(エル)とします。

さて、この3つの間の転送ですが、論理的に考えられるものをすべて列挙します。

1403244_2 

1403241_2

最後のF->Fは説明が必要です。これはメモリからメモリへの転送です。たとえば10番地のデータを20番地のメモリへ転送するなどです。

あと、3と5はありえないです。Lは数ですが、数は2とか3とかデータそのもので、データを入れておくものではありません。3という数に5を入れておくことはできません。

よって次の5通りになります。

1403245_2 

1403242

命令コストとは

命令コストという言葉は私の造語ですが、非常に重要な概念なので、理解してください。

●データメモリ(L)
データメモリに関する命令はメモリの番地を付帯情報として必要とするので、命令コストは1です。

●ワーキングレジスタ(W)
ワーキングレジスタは一つしかないので、区別する必要がなく付帯情報もない。したがって、命令コストは0です。

●数(L)
数を扱う命令は、その数(100とか5)自体を付帯情報にする必要があるので、命令コストは1です。

さて、これらの命令コストを先の1~4の組み合わせで計算してみましょう。

1403246_2

4は、命令コストが2です。それで、ここからが重要ですが、PICは命令コストが2は許されません。

なぜ、許されないか、それがPICの設計思想なのです。命令コストを制限することにより、処理速度を高速化する、これがPICの設計なのです。(RISCマイコンといますが)

また、5ですが、違う番地の転送は確かに命令コストが2ですが、同じ番地の転送なら番地指定は一つしかなく命令コストは1です。

したがって、5は同じ番地間の転送という限定条件つきで、OKです。

同じ番地の転送?
たとえば10番地のデータを10番地のメモリへ転送? これに何の意味があるの?と思われるかも知れません。実は、少し意味があるのです。今後機会があれば説明したいと思います。

とうことで、転送命令で許されるのは以下の4つの組み合わせです。

1403247

1403243_2 

さて、それでは、実際に命令を作ってみましょう。

データの転送の命令なので、英語のMOVEを借用して、MOVという記号を作り、上の1から4の組み合わせを語尾につけます。そうすると、

1403248●付帯情報

命令には付帯情報がつき物です。たとえばメモリを操作する命令ならメモリの番地を指定しなければいけません。

たとえば1のMOVWFはワーキングレジスタからメモリへの転送命令ですが、メモリの番地を指定しなければなりません。

したがって、ワーキングレジスタから10番地のメモリへの転送は次のように書かなければなりません。

MOVWF   10

同様に数(L)も付帯情報を必要とします。たとえば数20をワーキングレジスタに転送する命令は次のように付帯情報をつけます。

MOVLW   20

メモリの番地の付帯情報を記号fと書きます。
数の付帯情報を記号kと書きます。

そうすると付帯情報を含めた命令の記法は次のようになります。(小文字のfは番地に置き換えます、kは数値に置き換えます)

1403249

4はメモリからメモリの転送ですが同じ番地なので、付帯情報は一つです。

これでPICの転送命令が完成です。

どうでしょうか、命令というものがほぼ自動的に決まるのがわかると思います。じつは話はこれで終わりではなく、ここがPICの難しいとことですが、実は上の1~4のうち、2と4ですが、

2 MOVFW  f
4 MOVFF  f

PICでは、これを一つ命令にしてしまって、最後のWとFの違いを第二付帯情報として区別するのです。

MOVF  f, w
MOVF  f, f

なんでこんなわかりにくいことするのでしょう。実は第二付帯情報にはデータの格納先の意味合いがあり、後で説明する演算命令で詳しく説明します。いずれのせよわかりずらいことは確かです。

したがって、PICの転送命令は次の4つです。

14032410_5

次回、もうちょと転送命令について説明します。

|

« 「天文屋のためのマイコン入門」PICの命令を設計しようその1 | トップページ | 「天文屋のためのマイコン入門」転送命令続き »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 「天文屋のためのマイコン入門」PICの命令を設計しようその1 | トップページ | 「天文屋のためのマイコン入門」転送命令続き »