マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、超初級者の方からよく質問される「CCR(Condition Code Register: 条件コードレジスタ)の役割」についてです。
素朴な疑問から技術トラブルなどマイコンユーザーのあらゆる悩みに対し、マイコンメーカーのエンジニアが回答していく連載「Q&Aで学ぶマイコン講座」。
今回は、超初心者から多く寄せられる質問です。
マイコンにはCCR(Condition Code Register:条件コードレジスタ)*というレジスタがありますが、レジスタなのにユーザーは読み書きできません。そもそもCCRとは何ですか? どんな役割を持っているのでしょうか? どのようにして使えばよいでしょうか?
*マイコンによって名称が異なります。
本記事では、STマイクロエレクトロクス(以下、ST)の汎用8ビットマイコンSTM8ファミリー*1)を例にして解説します。
CCRは、実行直後の命令の結果とプロセッサの状態を示す8ビットレジスタです。ユーザーが直接読み書きはできませんが、間接的にCCRの各ビットの状態を知ることは可能です。STM8ファミリーのCCRには、以下のビットが含まれています。
(1)V(オーバーフロー):最後の符号付き算術演算中に、オーバーフローが発生したことを示します。
(2)I1&I0(割り込みマスクレベル1および0):割り込み可能レベルを定義します。(STM8ファミリー特有機能)
(3)H(ハーフキャリービット):加算命令(ADDなど)の実行中に、ビット3とビット4の間でキャリー(Carry:桁上がり、繰り上がり)が発生したときにセットされます。
(4)N(ネガティブ):最後の算術演算、論理演算、またはデータ操作の結果が負であることを示します。
(5)Z(ゼロ):最後の算術演算、論理演算、またはデータ操作の結果がゼロであることを示します。
(6)C(キャリー):最後の算術演算中に、キャリーまたはボロー(Borrow:桁下がり、繰り下がり)が発生したことを示します。
CCRは、C言語のプログラム中でwhile文の条件式が成立するかどうかを判定する際に自動的に使用されます。
以下のwhile文では、“i”という変数をインクリメント(1を加算)していき、定数n以下である間「文」が実行されます。この場合、CPUはn - i(nマイナスi)の計算を繰り返し、CCRのN(ネガティブ)がセットされることを常に判定しています。Nがセットされるとwhile文を抜けます。すなわち、iがnよりも大きくなったことを判定します。
i=0; while (i <= n) { 文 ++ i ; }
このように、CCRはユーザーが直接読み書きするのではなく、間接的に使われます。
*1)STM8ファミリー
Copyright © ITmedia, Inc. All Rights Reserved.