「天文屋のためのマイコン入門」バイトとは
さて、以前マイコンのデータは0か1で表現できると説明しました。この0か1の情報の単位をビットといいます。
マイコンはビットを単位として処理してもいいのですが、ビット単位ではあまりにも効率が悪いので、ビットを8個集めた、バイトを処理単位とします。(ビットが処理単位の命令もある、ビット命令という)
これがバイトです。
命令の説明でワーキングレジスタというのが出てきましたが、ワーキングレジスタはまさにこのバイトそのものです。
また、データメモリやポートもこのバイトが基本単位です。
バイトは8ビットの情報単位ですから、2の8乗=256通りの数を表現できます。そこで、この256通りに0~255を割り当てればマイコンのデータとなります。
その様子を下の図に示します。
バイトの各ビットの0か1をそのまま2進数表現とすれば数を表すことができます。2進数を10進数に変換するのはちょっと面倒なので、16進数を仲介させたり、最初から16進数で表したりします。なぜ16進数が便利かというと、桁数が固定できるからです。2進数の4桁が16進数の1桁になります。進数の詳しい話は別のところで勉強して下さい。この連載では分かりやすい2進数でなるべく表現するようにします。またあまり16進数は使わないようにします。
さて、256通りの表現を0から255に割り当てましたが、-128から127に割り当てれば、正負の数を表すことができます。この連載では負数は扱わないので、これ以上詳しくは説明しませんが、数の割り当て方で、いろんな数(小数も含む)を扱うことができます。ただ、どんな割り当て方をしてもそれは人間の解釈であって、マイコン自体はやっていることは同じです。
さて、バイトは255までの数しか格納できません。ではそれを超えたらどうなるでしょうか?
以下の図は255の数が入ったバイトを表してします。これに1を足してみましょう。
各ビットは次々と桁上がりしていき、最後は'1'がバイトから溢れてしまい(桁上がり)バイトには0が残ります。
つまり溢れた分は、バイトには収まらないので、これは0と同じです。つまり
255+1=0
なのです。256と0は等しいのです。これは覚えておいてください。
ちなみに溢れた'1'、どこへ行くのでしょうか? バイトに収まらないので捨てられるのでしょうか?
実は捨てられないで、ステータスレジスタ(これもバイトですが)というところに、一時的にですが保存されます。これがあるため、実はバイトを超える大きな数の計算もできるのです。詳しくはいずれ、話をすることがあるかもしれません。
今日はちょっと難しい話が続いたのでここまで。
| 固定リンク
コメント