各種システム開発・WEBコンテンツ制作・WEBデザイン・ホームページ制作・インフラ設計・構築・レンタルサーバー・ソフトウェア技術者のアウトソーシング事業を行っております。

7 月
31

レジスタの種類と役割

技術スタッフ


おそらく、汎用系もしくはWeb系のソフトウェアを開発している人、組み込み系でもアプリ
ケーションを担当している人は、レジスタという言葉を知らないかもしれません。
レジスタとは、マイクロプロセッサに内蔵されている、演算や実行状態の保持に用いる
記憶素子のことです。
レジスタは、演算などの処理を実行するためのデータをメインメモリ(RAM)から読み出して
置いたり、計算結果や途中経過などを保持したり、読み込みや書き出しを実行するメモリ上の
アドレスを指し示したりするために用いられます。
また、レジスタはメモリ内の記憶素子のように番地で識別されるのではなく、それぞれ個別の
識別名が与えられています。
そして、レジスタはプログラムの見えないところで動いています。
以下、その動きを合わせてレジスタの説明をしていきます。

 

アキュムレータ
論理演算や算術演算の結果を一時的に保持しておくレジスタで、プロセッサの内部にあるため、
高速にデータの受け渡しをすることができます。
ちなみに、代入式の”a = b”は、領域bから直接領域aにデータを移動していません。
データは必ずアキュムレータを介さないとできないので、”b → アキュームレータ → a”と
移動しています。

 

プログラムカウンタ
次に実行する命令が格納されているメモリ上の番地(アドレス)を保存しています。
マイクロプロセッサは、プログラムのどこを実行しているのかを記憶しておく必要があり、
それをプログラムカウンタが保存しています。
プログラムカウンタは、メモリから命令が読み出されると、その分だけプログラムカウンタの
値を増やして、次に実行する命令が保存されている番地を指し示すようになります。
そして、プログラムの分岐やサブルーチン呼び出しは、プログラムカウンタを飛び先の
アドレスに書き換えることで実現されます。

 

スタックポインタ
スタックと呼ばれるメモリ領域のうち、最も最近参照された位置のアドレスを保持しています。
スタックは積み重ねるという意味で、最初に格納したデータを最後に、最後に格納したデータを
最初に取り出す構造になっています(机上に本を積み上げて上から取っていくイメージです)。
スタック領域は、主にサブルーチン呼び出しの時に使います。
その流れは、サブルーチンを呼び出す直前にデータと戻りのアドレスを保管、サブルーチンの
処理が終わると、保管していたアドレスとデータを取り出して処理の続きを実行します。

 

ステータスレジスタ(フラグレジスタ)
例えば、8ビットマイコンのアキュームレータであれば、そこには0~255の数値が入ります。
もし、100が入っているアキュームレータに200を加算すると、アキュームレータは255を超えて
しまいます(これをオーバーフローと言います)。
ステータスレジスタは、そのオーバーフローを補うためにが存在します。
前述の計算結果は、アキュームレータが45となり、桁上がりはステータスレジスタのキャリー
フラグを1にすることで表します。

 

汎用レジスタ
汎用レジスタは、上記のレジスタのように特定の目的を持っていません。
毎回RAMに保存していると処理に時間がかかるので、計算途中の値は汎用レジスタに置いて、
計算結果をRAMに保尊します。

 

レジスタは、プログラムを動かす根本の部分です。
ここを理解できれば、プログラムが何故動くのかが分かると思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

月別アーカイブ

カテゴリ