ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

2進数から、コンピューターの教え方が飛びすぎている気がする

2013-08-09 20:05:49 | Weblog
一般に、コンピューターを教えるとき、
2進数までは教える。
AND、OR,NAND,NOR、XORについては教える。

で、その先・・・

この話はぶっ飛んで、いきなり、プログラムの話とかにいっていないだろうか?
あんなに覚えた、2進数は、どこに使われているの?
みたいな・・・

その間を埋めないと、arduinoとか、組み込みとかをC言語で、何で制御
できるのか、よくわかんないことになるので、ちょっと、この間について
触れてみたい。




■記憶回路と周辺機器

 コンピューターは結局、情報処理をするものであるが、これは、
   情報:データを
   処理:処理加工する
 ことである。

 そして、データは、記憶装置に置かれる。
 入出力したデータも、記憶装置に置かれる。
 記憶装置というのは、フリップフロップを使うと作れて、こいつは、1といれたら、
 電気が入っている間、書き換えない限り1になる。0も同じ。

 で、いろんなロボットも、通信も、ディスクの書き換えも、結局は、電気信号の
0,1→電気的なスイッチON,OFFで行われ、それは、記憶装置のどこかに
つながっていて、そこのON,OFF(1,0)で決まる。

 だから、この、いろんな装置に繋がる記憶装置の0、1を、コンピューターで
制御できれば、コンピューターでいろんな装置が制御できることになる。
 じゃあ、このコンピューターで、いろんな装置に繋がる記憶装置の0、1をセット
できるのか・・・




■アドレス

 これら、いろんな装置に繋がる記憶装置の0、1の場所には、名前がついている。
 そう、アドレス。
 アドレスを指定して、ON,OFFを設定すればいい。
 ここでC言語。

 C言語では、ポインタという、アドレスを指定して、その中身を(*変数で)
みたり、セットしたりできたりする。
こんなかんじ。

volatile unsigned int *PINSEL0;
PINSEL0=0xE002C000;

こうすると、*PINSEL0で、アドレスE002C000の中身が見れる。
*PINSEL0=1で、アドレスE002C000の値を1にセットできる。
このアドレスE002C000が、ハードウェアの装置の入出力するところとつながると、
その装置を操作できる。

OS上だと、そういうところはアクセスできないが(OSで禁止されるので)
OSが無ければ、アクセスOKとなる。




■加算機

これで、いろんなロボット、センサー、入出力装置なんかのデータは、
取ったりセットしたりできるようになった。

つぎに、これを処理する。

結局、処理は、積分だろうが微分だろうが、最終的には、四則演算になり、
四則演算は、結局+に帰着する。なので、2進数の足し算ができればよい。

2進数の足し算は、

  信号Aと信号Bがあり、これが、Oと1のときがある。
  そのとき、桁上がりCと、答えXは、こんなかんじのくみあわせ

  AB|CX
----------
  00|00
  10|01
  01|01
  11|10

ここで、ABとCだけみると、ABが1のときのみCが1、
つまり、ANDなので、ABとCをAND回路で結べばよい
ACとXをみると、ABがどちらか1のとき1、
つまり、XORなので、ABとXをXOR回路で結べばよい

ANDやXORの回路はICとして売っているので、これを
線でつなぐ。こいつが加算機

現実には、こんなものが、果てしなくいっぱい並んでいる。
そして、計算している。これが、CPU(のアキュムレーター)




こんなかんじで、線から値をとってきて、計算して、その結果をまた線に返して
・・・を繰り返している。

ざっくり説明すると、こんなかんじ。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« mrubyの事例とか | トップ | ミクシィ、上場来初の赤字転落 »
最新の画像もっと見る

Weblog」カテゴリの最新記事