検索
連載

CCR(Condition Code Register:条件コードレジスタ)の役割Q&Aで学ぶマイコン講座(66)(2/4 ページ)

マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、超初級者の方からよく質問される「CCR(Condition Code Register: 条件コードレジスタ)の役割」についてです。

Share
Tweet
LINE
Hatena

CCRとは?

 CCRは、実行直後の命令の結果とプロセッサの状態を示す8ビットレジスタです。マイコンによって名称が異なる場合もありますが、全てのマイコンが持っています。ほとんどのマイコンの場合、ユーザーが直接読み書きすることはできませんが、マイコンによっては読み書きできる製品もあります。CCRのビットをテストできる命令や、CCRのビットを参照する命令を実行して、間接的にCCRの各ビットの状態を知ることができます。

 例として、STM8SファミリーのCCRの各ビットを紹介します(図2)


図2:STM8ファミリーのCCR(詳細)[クリックで拡大]
STM8ファミリーのリファレンスマニュアルから抜粋

(1)V(オーバーフロー):

 最後の符号付き算術演算中に、オーバーフローが発生したことを示します。減算を行う際、マイコンではマイナス数値を「2の補数」にして加算します*2)。この時、演算結果が「2の補数」で表現可能な範囲に収まらないことをオーバーフローと呼びます。

(2)I1&I0(割り込みマスクレベル1および0):

 STM8ファミリー特有のビットで、割込み動作の条件を示します。具体的には、多重割込みの時に、どの割込みレベルにいるかを示します。また、さらに深く割り込みを受けることができるかどうかを示します。

(3)H(ハーフキャリービット):

 加算命令の実行中に、ビット3とビット4の間でキャリーが発生したときにセットされます。BCD(Binary-Coded Decimal:2進化10進数)演算で使用されます。BCDとは、10進法の1桁(0から9まで)を表す2進法の4桁で表現したものです。そのため、BCDの1桁のキャリーは、ビット3とビット4の間のキャリーに相当します。

(4)N(ネガティブ):

 最後の算術演算、論理演算、またはデータ操作の結果が負である(すなわち、最上位ビットが論理1である)ことを示します。2つの数字の大小を比較したいときに使用されます。

(5)Z(ゼロ):

 最後の算術演算、論理演算、またはデータ操作の結果がゼロであることを示します。実際のプログラム中での使用例としては、while文の条件式で変数が0になったことを検出するために使用されます。

(6)C(キャリー):

 最後の算術演算中にMSB演算結果ビットでキャリーまたはボローが発生したことを示します。主に、加算や減算命令で使用されます。シフトおよびローテート演算などでは、MSBから飛び出たビットの値が反映されます。

 また、除算演算では、実行中に問題(商のオーバーフローやゼロでの除算など)が発生したかどうかも示します。

 その他、ビットテスト、分岐(ブランチ)および、ロード命令でも使用されます。

*2)参考記事:マイコン入門!! 必携用語集(5):実は足し算しかできない!? 「補数」「シフト」で四則演算しているマイコン

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る