【プログラムメモリの変更】
プログラムカウンタを従来の13ビット幅から15ビット幅に変更しました。
したがってプログラムメモリ空間が8kワードから32kワードに拡大する
ことになります。
命令の構成は14ビット幅で変わりませんので、2kワード単位のページは
そのまま残っており、PCLATHレジスタで切替を行うことも変わりません
しかし、ジャンプ命令が新たに追加され、よりページを渡ったジャンプが
やりやすくなっています。
【PCLATHレジスタの変更】
まず、バイト処理命令でPCLを演算対象とした場合には下図(1)のように
PCLATHの下位7ビットがそのままPCHにコピーされるようになりました。
これまでの5ビットから2ビット追加となりました。
また、GOTOとCALLのジャンプの場合は下図(2)のようになり
PCLATHレジスタのページ切替用ビットが4ビットになって2ビット追加
されました。
【新規追加のジャンプ命令】
あらたに相対ジャンプ命令が3個追加されました。
CALLW : PCLATH:Wのアドレスにジャンプ
(PCLATH+0~PCLATH+255の範囲にジャンプ)
BRW : PC+W+1のアドレスにジャンプ
(現在PC~現在PC+256の範囲にジャンプ)
BRA : PC+命令リテラルのアドレス(符号+8ビット)にジャンプ
(現在PC-256から現在PC+255の範囲にジャンプする)
これらの命令の場合のPCLATHとPCの間の関係は下図のようになります。
CALLW命令の場合には単純に現状のPCLATHが上位PCHにコピーされ
下位にWレジスタが代入されてジャンプします。したがって現在のページの
xx00番地からxxFF番地の範囲にジャンプすることになります。
BRW命令の場合には、PCとWレジスタが15ビット幅で演算されます。
Wレジスタは正の8ビットデータとして加算されますので、常に上位側に
ジャンプすることになります。この場合にはページをまたがっても問題なく
ジャンプできます。
BRAの場合には、命令のオペランドが9ビットの符号付データとしてPCに
加算されてジャンプします。したがって現在位置から前後256番地の範囲に
ジャンプできることになります。この場合のジャンプもページにまたがっても
可能となります。