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

2014年3月27日 (木)

「天文屋のためのマイコン入門」転送命令続き

前回転送命令の設計をしました。もう一度出してみましょう。

14032410

これを見ると、数値をデータメモリ(レジスタファイル)に転送(つまり書き込み)することだけができないのがわかります。

数値をデータメモリに書き込むためには、ワークレジスタを仲介させて、2回命令で書き込みます。たとえば、数値12をデータメモリの60番地に書き込みたい場合は、

MOVLW     12        12->W
MOVWF     60        W->F(60番地)

1403271

となります。

命令コストを下げるため、数->Fの転送を禁じたのに、2命令使ってしまうなら、結局は同じではないか。と思うかもしれません。

しかし、それでも、これの方が処理が早いのです。マイコンというのは、次から次へと命令を処理していきます。一つの命令を解析している間にも次の命令の読み込みに取り掛かっています。したがって、各命令のコストが一定していた方が処理がしやすいのです。

さて、数値をメモリに書き込むだけで2命令必要なわけですが、確かに面倒であり、プログラムサイズ的にも増えてしまいます。せめて、メモリの初期化など0を書き込むことはよくあるので、それだけでも一命令でできないかと思うでしょう。

これを解決するには、メモリを0クリアする命令を作ればよいのです。つまり数値を転送する命令ではなく、メモリをクリアする命令です。

メモリクリアと0を転送するとはまったく同じことですが、転送する数は0しか許されません。したがって、付帯情報にわざわざ0と指定する必要はなく、命令コストも増えません。

よって、次の2命令をこの転送命令グループに加えることにします。

1403272

ちなみに、

CLRW

MOVLW 0

は、動作的にはまったく同じです。命令コストもまったく同じです。本来必要ない命令ですが、良く見るとフラグ(そのうち説明)の変化だけ異なっています。フラグを変化させたくない場合はMOVLWを使えということでしょうか。いずれにしても上級者編で、初心者は同じものと考えて差し支えありません。

|

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

コメント

コメントを書く



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




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