レジスタ
今回はレジスタの話です。
レジスタは、RAMと同じデータの消去・書き換えが可能な記憶装置です。
レジスタとRAMの違いは、RAMはプログラムで扱うデータを格納する記憶装置に対して、
レジスタは主にマイコンの状態を保存および確認するための記憶装置です。
そして、レジスタにはあからじめ役割が決まっているものがあります。
※以下の説明は過去のブログから抜粋しています。
★アキュムレータ
論理演算や算術演算の結果を一時的に保持しておくレジスタで、プロセッサの内部にあるため、
高速にデータの受け渡しをすることができます。
ちなみに、代入式の”a = b”は、領域bから直接領域aにデータを移動していません。
データは必ずアキュムレータを介さないとできないので、”b → アキュームレータ → a”と
移動しています。
★プログラムカウンタ
次に実行する命令が格納されているメモリ上の番地(アドレス)を保存しています。
マイクロプロセッサは、プログラムのどこを実行しているのかを記憶しておく必要があり、
それをプログラムカウンタが保存しています。
プログラムカウンタは、メモリから命令が読み出されると、その分だけプログラムカウンタの
値を増やして、次に実行する命令が保存されている番地を指し示すようになります。
そして、プログラムの分岐やサブルーチン呼び出しは、プログラムカウンタを飛び先の
アドレスに書き換えることで実現されます。
★スタックポインタ
スタックと呼ばれるメモリ領域のうち、最も最近参照された位置のアドレスを保持しています。
スタックは積み重ねるという意味で、最初に格納したデータを最後に、最後に格納したデータを
最初に取り出す構造になっています(机上に本を積み上げて上から取っていくイメージです)。
スタック領域は、主にサブルーチン呼び出しの時に使います。
その流れは、サブルーチンを呼び出す直前にデータと戻りのアドレスを保管、サブルーチンの
処理が終わると、保管していたアドレスとデータを取り出して処理の続きを実行します。
★ステータスレジスタ(フラグレジスタ)
例えば、8ビットマイコンのアキュームレータであれば、そこには0~255の数値が入ります。
もし、100が入っているアキュームレータに200を加算すると、アキュームレータは255を超えて
しまいます(これをオーバーフローと言います)。
ステータスレジスタは、そのオーバーフローを補うためにが存在します。
前述の計算結果は、アキュームレータが45となり、桁上がりはステータスレジスタのキャリー
フラグを1にすることで表します。
★汎用レジスタ
汎用レジスタは、上記のレジスタのように特定の目的を持っていません。
毎回RAMに保存していると処理に時間がかかるので、計算途中の値は汎用レジスタに置いて、
計算結果をRAMに保存します。