ステータスレジスタとは?
ステータスレジスタ、またはコンディションコードレジスタとは、コンピュータのプロセッサが演算を行った際に、その演算結果に応じて設定されるフラグを格納するためのレジスタです。プログラムの制御フローを切り替えるために利用されます。
例えば、四則演算を行った際に、結果がゼロかどうか、符号が正か負か、桁あふれが発生したかどうかなどを判定したい場合、ステータスレジスタに演算結果に応じたビットをセットしておくことで、プログラムが判定できるようになります。
ステータスレジスタの種類
ステータスレジスタには、プロセッサのアーキテクチャによって異なる種類が存在します。代表的なものとして、以下のようなものがあります。
- ゼロフラグ(ZF):演算結果がゼロの場合にセットされるフラグ
- サインフラグ(SF):演算結果の符号が負の場合にセットされるフラグ
- キャリーフラグ(CF):桁あふれが発生した場合にセットされるフラグ
- オーバーフローフラグ(OF):符号付き演算で桁あふれが発生した場合にセットされるフラグ
ステータスレジスタの利用方法
ステータスレジスタは、プログラム内で条件分岐を行う際に利用されます。例えば、以下のようなC言語のコードを考えてみましょう。
“`c
int x = 10;
int y = 20;
int z;
z = x + y;
if (z == 0) {
printf(“z is zero”);
} else if (z < 0) {
printf("z is negative");
} else {
printf("z is positive");
}
``` このコードでは、変数zの値に応じて、条件分岐を行っています。しかし、プロセッサが演算結果に応じてセットするステータスレジスタを利用することで、以下のように簡潔に書くことができます。 ```c
int x = 10;
int y = 20;
int z; z = x + y;
if (__builtin_add_overflow(x, y, &z)) {
printf("overflow");
} else if (z < 0) {
printf("negative");
} else if (z == 0) {
printf("zero");
} else {
printf("positive");
}
``` __builtin_add_overflowは、C言語の組み込み関数で、加算結果が桁あふれするかどうかを判定するために利用されます。この関数がtrueを返す場合、演算結果のオーバーフローフラグがセットされているため、その結果を利用して条件分岐を行うことができます。
まとめ
ステータスレジスタ、またはコンディションコードレジスタは、プロセッサが演算結果に応じてセットするフラグを格納するためのレジスタです。条件分岐などのプログラムの制御フローを切り替えるために利用されます。各種のフラグについて、また、ステータスレジスタの利用方法について解説しました。
参考記事
合わせて読みたい
【Google Chrome】右クリックで翻訳がでなくなった時の対策方法の決定版