- - PR -
本連載のこれまでの4回で、自作LEDフラッシャボードを思いどおりに動かし、シミュレータと「AVR JTAGICE mkII」を用いて開発とデバッグを行えるようになった。センシングと制御の仕組みについてさらに学習を進めるために、まずは自作ボードを用いて、演算の基本を極めて原始的な方法によって身に付けよう。今回は足し算(加算と半加算)について解説する。
10進数整数の加算を復習する
足し算(加算)で重要なのは、「6+7=13」のように繰り上がりが発生するパターンだ。小学校1年生のとき(あるいはそれ以前)に学んでいるはずだが、ここでは繰り上がりを一応復習してみよう。
繰り上がりは、当たり前の話だが、けた上がりに対応して発生する。けたが上がるということは、1けたの数字の加算であれば、1のけたの合計が10を超えるということだ。この場合、小学1年生だったら、「6」から指を7回折って「13」にたどり着くところだろう。
10進数の1のけたには、0〜9の10個の数字がある。実は加算を行うために必要なのは、
- 結果として1のけたの数字は何になるか
- けたが上がったかどうか
の2つの情報だけである。整数の1のけたは0〜9のどれかなので、1のけたの数字が「3」になった場合、加算の結果は、けた上がりが行われなければ「3」、けた上がりがあれば「13」となる。けた上がりの有無を判断しない場合に加算の結果が「3」となったら、「3」なのか「13」なのか不明なのだが、そのどちらかではある。
10進数の「1のけた」に相当する部分だけの加算を「半加算」と呼ぶ。半加算の結果は「6+7=3」となり、小学1年生のテストであれば「10のけたを忘れた」ということで減点対象になるが、別途「けた上がりあり」と判断されているのであれば、結果を「13」と修正できる。
「キャリーフラグ」とは?
8ビットの2進数を扱っている場合、正の数を表現するのであれば、表現できる範囲は0〜255である。「128+129」という計算を行うと、結果は「257」となり、この範囲では表現できない。
「257」を2進数で表現すると、「100000001」となり、2進数では9ビットである。8ビットの2進数を扱っている場合、扱えるのは下位の「00000001」のみである。加算の結果が10進数の「1」であるか「257」であるかは、実は結果の「00000001」からは判断できない。ただし、半加算と組み合わせれば、9ビット目へのけた上がりがない場合に「1」、けた上がりがある場合に「257」であることが判明する(注1)。ここで、結果が「1100000001(10進数の769)」や「1000000001(10進数の513)」である可能性は考えなくてよい。なぜなら、8ビットの2進数の範囲で表現できる最大の数は「255」なので、2つの数の加算の結果は、最大で「255+255=510」である。
CPUには大抵「Cフラグ」と呼ばれるフラグがある。これは「Carry」、つまりけた上がりを示している。扱っている数値が8ビットの2進数である場合、加算の結果が256以上になると、Cフラグが「立って」0から1になる。8ビットの2進数で扱える正の整数を加算すると、結果は「0+0」〜「255+255」の範囲に収まる。10進数で0〜510、2進数で0〜111111110の範囲となる。これらはすべて、8ビットの2進数とキャリーフラグの組み合わせで表現できる。
注1:そもそも2進数の加算は、各けたの加算と半加算の組み合わせによって成立している。 参考: 完全マスター! 電子回路ドリル II(9)【問題9】ゲート回路の簡単化 |
関連記事 半導体/エレクトロニクス
組み込み開発フォーラム 新着記事
- 【問題17】 非同期カウンタと同期カウンタ(2008/5/29)
- 電圧定格2200Vの新ESBTファミリ発表(2008/5/28)
- 混沌とする2008年世界半導体市場その先行きは?(2008/5/27)
- 出荷4億個を突破したICの「グリーン」効果とは(2008/5/27)
- トヨタ!? 日産!? どうなるFlexRay普及への道(2008/5/26)
- H.264デコード機能搭載システムLSI出荷開始(2008/5/23)
- 【問題16】 D-FFでカウンタを作る(2008/5/22)
- 組み込みデータベースって必要? 不必要?(2008/5/20)
- 自動車メーカーの品質要求に応え、2倍2倍の体制作り(2008/5/20)
- 日産ハイブリッドカーに搭載される最新電池とは(2008/5/20)
- マイコンはどうやって足し算をしているのか?(2008/5/16)
- Answers Anywhereで車載向け音声ポータルを狙う!(2008/5/13)