キャリーフラグ 【carry flag】
概要
キャリーフラグ(carry flag)とは、CPU(マイクロプロセッサ)のフラグレジスタ(ステータスレジスタ)に用意されているビットの一つで、加算命令で最上位桁からの繰り上がりが起きたことを示すもの。大きな数の加算処理などに用いられる。CPUには加算命令が用意されており、レジスタに格納された値を下位ビットから順に加算していく。このとき、最上位桁の加算が「1」+「1」だと結果は一桁繰り上がって「10」となるはずだが、これ以上桁がないため下位側の「0」しか格納することができない。このようなときに、キャリーフラグの値を「1」にして、最上位桁からの繰り上がりが生じたことを知らせる。
これとは逆に、減算で最下位桁から繰り下がりが生じた場合には「ボローフラグ」を「1」にすることによって知らせる。CPUによってはキャリーフラグとボローフラグが共通になっている場合や、キャリーフラグをさらに他の用途にも転用する場合がある。
レジスタ長を超える加算
キャリーフラグがない場合にはレジスタ長を超える結果になる加算を行うことは困難だが、キャリーフラグの値を用いることで、長い桁の加算を容易に実装できる。例えば、レジスタ長が8ビットのCPUで16ビット値の加算を行いたければ、8ビットずつに区切り、まず下位8ビットの加算を行う。
下位側で繰り上がりがあればキャリーフラグに反映されるため、上位8ビットの加算を行う際に最下位ビットにキャリーフラグの値を加算してやれば、繰り上がりを反映した加算を行うことができる。より長いビット数の場合でも、一つ手前の加算で生じたキャリーフラグの値を最下位ビットに足していけば容易に全体を加算することができる。
これはちょうど複数桁の2つの数の足し算を筆算で計算する手順に似ている。筆算では小さい桁から順に同じ桁同士で一桁の足し算を行い、結果が10を超えたら左隣の桁の上に「1」と書き入れ、3つの値で足し算を行う。レジスタのビット長ごとに加算を繰り返すのはこの操作と同じであり、繰り上がりを「1」と書き入れるスペースがキャリーフラグにあたる。
(2024.1.25更新)