メディア

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

» 2021年10月29日 10時00分 公開
前のページへ 1|2|3|4       

CCRの使用例

(1)C(キャリー)

 例えば、STM8ファミリーのような8ビットマイコンで16ビットの演算を行いたい時にCを活用できます。

 8ビットマイコンで16ビットの演算を行う場合、1回の演算では不可能なので、2回演算を行います(図4)

図4:16ビットの演算を8ビットマイコンで行う[クリックで拡大]

 1回目の演算で、数字の下位8ビットだけを計算します。このとき、キャリーまたはボローが発生するとC(キャリー)にセットされます。2回目の演算で、上位8ビットの演算を行うのですが、先ほどのC(キャリー)も一緒に演算します。マイコンの命令には、1つ前の演算結果のキャリーまたはボローを含んで演算できる命令があるので、それを使います。すると8ビットマイコンでも、2回の演算で16ビット相当の演算が行えます。

(2)N(ネガティブ)

 N(ネガティブ)は、プログラム中でwhile文の条件式が成立するかどうかを判定する際に使用されます。

 次に示すwhile文では、“i”という変数をインクリメント(1を加算)していき、定数n以下である間「文」が実行されます。この場合、CPUは「n - i」(nマイナスi)の計算を繰り返し、CCRのN(ネガティブ)がセットされることを常に判定しています。N(ネガティブ)がセットされるとwhile文を抜けます。すなわち、iがnよりも大きくなったと判定します。

i=0;
while(i <= n)
 {  文
++ i ; }

 while文はC言語ですが、アセンブリ言語の場合、条件分岐という命令を実行する際にN(ネガティブ)が参照されます。条件分岐命令の中にはN(ネガティブ)がセットされている場合は分岐し、セットされていない場合は分岐しない命令があります。まず、「n - i」の計算を行い、その後で条件分岐命令を実行すると、分岐によってiがnよりも大きくなることが分かります。

 while文の条件式は、C言語をアセンブルして、アセンブリ言語に変換すると条件分岐命令に変換されます。実際にSTM8ファミリーのwhile文をアセンブルした例を図5に示します。この図の中で条件分岐命令は、BGE.NとBLT.Nです。

図5:STM8ファミリーのwhile文をアセンブルした例[クリックで拡大]
「マイコン入門!! 必携用語集(7)マイコンにも言語力が必要!?」図3の再掲載

次の記事を読む

Q&Aで学ぶマイコン講座:過去の質問一覧はこちら

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.