「プログラミング言語」タグアーカイブ

マイクロコンピュータとC言語

 マイクロコンピューター(マイコン)のプログラムは、当初はコンピューターごとの二進数の命令(バイナリーコード)で作っていました。

 バイナリーコードはマシン語または機械語ともいわれ、二進数なので人間との相性は最悪で、しかもコンピューターが変わるとゼロから作り直さないとなりません。

 しかも、コンピューターの命令は種類が少なく、4ビットの足し算、4ビットの引き算、+1する、-1する、ゼロで分岐、マイナスで分岐、ビットシフト(1ビット左にずらす=2倍になる、1ビット右にずらす=半分になる)、AND、OR、NOT程度しかなく、掛け算や割り算をするだけでも数十個の命令を組み合わせないと実現できないなど非常に面倒でした。

 そして苦労して作ったプログラムはコンピューターが変わると使えず、また作り直さなくてはならず、他人が作ったプログラムに手を加えたりするのは困難に困難を重ねていました。

 そこで、コンピューターで良く使う計算などの機能を簡単に数式で表すことのできる人間に理解しやすい「高級言語」として、FORTRAN(FORmular Translation=数式変換)や会計処理や伝票の作成などに適したCOBOL(COmputer Business Oriented Language=コンピュータービジネス属性言語)などが考え出され、利用されてきました。

ベーシック言語

 しかし、FORTRANやCOBOLなどの高級言語は、覚えないといけないことや書き方の制約が多く、使いこなせるようになるまで何年もかかります。

 そこで、学生などの学習用や素人でも使えるようなベーシック(BASIC)言語が考え出され、教育機関などで使われていました。ちなみにBASICはBeginner’s All-purpose Symbolic Instrucation Code=初心者向け汎用命令符号の略だと言われていますが、こじつけのようです。

 このベーシック言語は、覚えるのが簡単で、プログラムも短くて済むうえに、コンピューターが変わっても基本的にそのまま動くなど、非常に優れたプログラム言語で、かの有名なコンピューターの天才であるビル・ゲイツ氏がパソコンで使えるように作ったのが有名になり、現在のマイクロソフトにつながる歴史的な言語です。

 しかし、当時のベーシック言語は「インタープリター」と呼ばれる1行ごとにプログラムを解読して処理する方式をとっていたため、非常に処理速度が遅く、ゲームなどのソフトウェア(プログラム)は、依然としてバイナリーコードで作られていました。

 その後、パソコンのメモリーの増加や処理速度などの性能の向上もあり、プログラムを一括してバイナリーコードに変換して実行する「コンパイラー」と呼ばれる処理方式も生み出されましたが、もともとミニコンピューターやパソコンを想定しているため、更に小型のマイクロコンピューターでは実行できず、マイコンのプログラムは依然としてバイナリーコードを略号に置き換え、変数などに二進数ではなくアルファベットの名前を使えたり、十進法で書けたりする「アセンブリ言語」が使われていました。

 ちなみにアセンブリ言語で書かれたプログラムをバイナリーコードに変換するソフトウェアと「アセンブラー」と呼びますが、アセンブラーで変換する前のアセンブリ言語のプログラムをアセンブラーと呼ぶ人もいますので注意が必要です。

 アセンブリ言語は、コンピューターの命令を略号(たとえばMOV,ADD,JMPなど)に置き換えただけなので、相変わらず他のコンピューターでは使うことができない「機種依存」なため、バイナリーコードの二進数または16進数を直接作るよりは「マシ」と言われていました。

C言語の登場

 C言語は、アメリカ最大手の電話会社であるAT&Tが電話交換機のマイコンのプログラムを作るためのプログラム言語として、○○大学と共同で開発したと言われていて、メモリーが少なくて処理速度の遅いマイクロコンピューターでも動くように考え出されたものですので、マイコンとの相性も良く、バイナリーコードには劣りますがベーシック言語よりはずっと高速で動き、命令後もシンプルで、独特のクセはありますが、マイコンにある+1するインクリメントや-1するデクリメントなどの命令を効率よく使えるように++や–などの計算するための演算子(えんざんし)を備えているなど、アセンブリ言語で苦労していたマイコンのプログラム作成を新天地に導いた画期的なプログラム言語で、電話交換機用でありながら、基本的な部分では機種依存せず、UNIX(Linuxの元になったワークステーションなどの基本ソフト)の標準プログラム言語として採用され、のちにUnix自体もC言語で作り直されたこともあって、どのコンピューターでも使えるプログラム言語として広がりました。

C言語での機種依存

 このように、マイコンのプログラムを作るのに非常に適したC言語ですが、当初はバイナリーコードに変換するソフトウェアが有料であったことや、開発に使えるコンピューターがUnixの基本ソフトで動かなければならないなどど制約が多く、とても趣味で使えるようなものではありませんでした。

 しかし、LinuxやGCC(Gnu C Comipler)などの無料で使うことができ、しかも自分で手を加えて改良したり改造したりできる「オープンソース」の基本ソフトやコンパイラーが出現したことから、GCCなどは色々なコンピューターで使えるように移植され、改造も自由で、商用利用も可能なことから、どのメーカーのマイコンもC言語でプログラムを作ることができるようになりました。

 たとえばオープンソースのマイコンであるArduinoなども中身はGCCを使っていたりして、互換性も十分ですし、不具合があったときなども世界中の誰かがボランティアで直してくれたりするので非常に便利になりました。

 もっとも、マイコンの場合はマイコンによって入出力の数やメモリーのサイズ、バイナリーコードも違いますし、付加機能も違いますので、基本的な部分はC言語ですが、機種依存する部分は「関数」によって実現されていたり、Arduino用の開発ソフトのArduino IDEがGCCに適合するように勝手にプログラムを編集してくれるので、本物のC言語よりも更に簡単にプログラムを作ることができるようになりました。

 ただし、前述したように、マイコンは機種による違いがありますので、他のマイコンではそのまま動かず、移植などの作業が必要になります。

 また、Arduino IDEなどではArduino独自の機能は日本語で使えるのですが、プログラムのミスなどを指摘してくれるコンパイルエラーはGCCそのままの英語で表示されますので、やっぱり英語力は必要です。

Arduinoマイコンについて知りたい方はdenshikan.comへ

Arduino公式ホームページarduino.ccへ