例えば、STM8ファミリーのような8ビットマイコンで16ビットの演算を行いたい時にCを活用できます。
8ビットマイコンで16ビットの演算を行う場合、1回の演算では不可能なので、2回演算を行います(図4)
1回目の演算で、数字の下位8ビットだけを計算します。このとき、キャリーまたはボローが発生するとC(キャリー)にセットされます。2回目の演算で、上位8ビットの演算を行うのですが、先ほどのC(キャリー)も一緒に演算します。マイコンの命令には、1つ前の演算結果のキャリーまたはボローを含んで演算できる命令があるので、それを使います。すると8ビットマイコンでも、2回の演算で16ビット相当の演算が行えます。
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です。
Copyright © ITmedia, Inc. All Rights Reserved.