ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
マイクロプロセッサーで演算処理結果等を表わすために特に専用に用意されたレジスターのこと。専用レジスターの一つ。
実際にはプロセッサーにより様々な呼ばれ方をするが、8080の頃からの慣わしで、総じてフラグレジスターと呼ばれる。
格納される内容などはプロセッサーの設計を大きく反映しており、プロセッサーごとに様々である。
特殊な設計のものを除き、一般的にプログラムを組む上で必要となるため、たいていのプロセッサーで専用レジスターとして用意されている。例外としては、MIPSのようにコンセプトとしてフラグレジスターを廃したものや、Intel ItaniumのIA-64モードように複数命令を同時実行するためにありふれたフラグレジスターが用意できなかったものなどがある。
フラグは、条件分岐などに使うための演算結果を保存するビットと、CPUの動作を決める情報を保存するビットとがある。
初期のCPUは特権モードを持たないためプログラムから任意に変更できたが、昨今のCPUは特権モードを持ち、オペレーティングシステムからしか制御できないようにしていることが多い。
値を比較して、一致・不一致や、大小などに応じて分岐する必要がある。
CPUに応じて、これは大きく二種類にコンセプトが分かれる。
8080/Z80などから普及が始まる初期のCPUでは前者、RISCなど構成をシンプルにするものは後者が採用されることがある。
フラグは、0か1かの1ビットで表現されるものが多い。
この時、1にすることを「セット」、0にすることを「クリア」というほか、1にセットされることを「フラグを立てる」ともいう。
各フラグの状態が0か1かを見るには、専用の命令を用いたり、ビットマスク演算を用いたりする。
プロセッサーごとの実装の差は次のとおり(順不同)。
8080の上位互換である。8ビットで「Fレジスター」と呼ばれ、8080にはない裏レジスター「F'レジスター」が存在する。
アキュームレーターであるAレジスターと共にAFレジスターとして16ビット処理できた。
8080と比して、ビット2がP/Vとなり、命令によってオーバーフローフラグとしても使われるようになった。
また8080で未使用だったビット1が拡張され、N=サブトラクトフラグとして使用されている。この謎のNフラグは、Z80で拡張されたDAA命令のためだけに存在する。
下位8ビットは8080を引き継ぎ、16ビット化した「FLAGS」とした。
i386以降は32ビットの「EFLAGS」、AMD64以降は64ビットの「RFLAGS」とされている。
以下は8086の「FLAGS」。32ビット化されたものは「EFLAGS」を参照のこと。
Z80がオーバーフローフラグをビット2としてパリティフラグと共用にしたのに対して、x86ではビット11に新たに定義した。
8ビットで「CCレジスター」(コンディションコードレジスター)と呼ばれた。
6800の拡張であり、未定義だったビット6と7に新たなフラグを割り当てた。
16ビットで「SR」(ステータスレジスター)と呼ばれた。
このうち、下位8ビットがユーザーバイト、上位8ビットがシステムバイトと呼ばれている。
下位4ビットの配列は、6800や6809の影響があると思われる。
PowerPCは「CR」(コンディションレジスター)と呼ばれ、4ビット8組で総計32ビットである。
8組のCRは、CR0からCR7まであり、演算の際にどのCRに結果を格納するかを選択できる。これは、分岐命令の前に複数の演算をあらかじめ実施しておくことができることを意味する。
Intel ItaniumのIA-64は、複数命令を同時実行するため、一般的なフラグレジスターを用意しない。
代わりに、64ビット長でフラグ目的に使う汎用レジスターであるプレディケートレジスターを用意した。
比較命令は、プレディケートレジスターのどのビットに結果を格納するかを選択する。
条件分岐命令は、プレディケートレジスターの指定されたビットを参照する。
32ビットで「SR」(ステータスレジスター)と呼ばれた。
条件分岐のフラグは「T」しかなく、演算や比較命令を実行する際に条件をつけ、結果をTに入れる方式だった。
レジスターファイルと呼ばれる領域の中に「STATUSレジスター」がある(ページ0で03h、ページ1で83h、ページ2で103h、ページ4で183h)。
ARMではCPSR(カレントプログラムステータスレジスタ)と呼ばれている。
MIPSアーキテクチャーにはフラグレジスター相当がない。
演算結果は常に汎用レジスターに格納され、分岐命令は汎用レジスターの値を参照して0か非0かによって動作する。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます