マイコンにも言語力が必要!?:マイコン入門!! 必携用語集(7)(4/4 ページ)
マイコンが実行する命令はROMなどのメモリの中に0/1のパターンで格納されています。しかし、0/1のパターンではユーザーが何の命令なのか分かり難く、不便です。そこで、0/1のパターンに言葉を定義して、ユーザーはその言葉を使ってプログラムを作ります。その言葉を“プログラム言語”と呼んでいます。言い換えると、ユーザーはプログラム言語をマスターしていないと、マイコンのプログラムを作れないことになります。プログラム言語にはいくつか種類があります。今回は、それらを説明します。
C言語
ニーモニックを使うことで、かなり使いやすくなりますが、ニーモニックはマシン語と1対1に対応しており、それでもまだ使い難いので、コンピュータで使われている高級言語のC言語を用いるようになりました。
アセンブリ言語とマシン語はCPU固有の言語なので、あるCPUで作ったプログラムは他のCPUでは使えません。しかし、C言語はCPUに依存せずに記述できるので、非常に便利です。
このため、今ではCPUの言語はC言語が一般的になりました。
C言語の命令の詳細は市販のC言語の教科書が数え切れないくらい出版されていますので、そちらを参照してください。
ここではC言語とアセンブリ言語の関係を説明いたします。
C言語のwhile文を使って、500回NOPを繰り返す記述を見てみましょう。図3を見てください。
変数mを定義して、最初、mに0を代入します。そして、NOPを1回実行(__asm("nop");)するたびにmに1を加算(++m)して、mが500以上(while (m<500))になるとwhile文のループを出るプログラムです。C言語の横に、マシン語が格納されているROMのアドレス、マシン語(16進数)、アセンブリ言語、説明の順に並べました。ここで、??main_5は、アドレス0x80001d4 に付けれた名前です。同じように??main_4 はアドレス0x80001e0 の名前です。アセンブリ言語では直接アドレスを扱わずにアドレスに付けられた名前で記述します。
まず、initで定義されたmはR8に割り当てられます。m=0でR8に0を入れます。CMP.WでR8が500よりも大きいかどうかチェックして、BGE.Nで、その結果が大きいときは??main_4へ分岐します。しかしここでは、R8は0ですので、分岐せずに??main_5に進みます。??main_5でR8に1を加えて、NOPを実行します。次に再びCMP.WでR8が500よりも大きいかどうかチェックします。今度はBLT.Nを使ってR8が500よりも小さいときに??main_5に分岐します。
R8は0から1,2,3…と1ずつ加算され増えていきます。500を超えると、BLT.Nで??main_5に分岐せずに、??main_4に進みます。これでNOP命令を500回繰り返すことができます。
この図を見ると、いかにC言語が読みやすいかが分かります。アセンブリ言語もマシン語に比べるとはるかに読みやすいですが、各ニーモニックを覚えていないと、すらすら読めません。C言語からアセンブリ言語、そしてマシン語への変換はPCのコンパイラが自動で行ってくれますので、ユーザーはC言語でプログラムを作ればいいことになります。
極端なことを言うと、C言語だけ分かっていればマイコンのプログラムは作れます。ですが、エンジニアとしては、マイコンがそのプログラムを実際にどのように実行しているかを理解しておく必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- CPUの中枢「ALU」を作ってみよう
CPUはマイコンの中枢ですが、さらにその中で演算を行うユニットがALU(Arithmetic and Logic Unit)です。マイコンの核に相当するといってもよいでしょう。実際の算術演算、論理演算はALUで行われます。今回は、ALUの中身がどうなっているかを説明します。 - 実は足し算しかできない!? 「補数」「シフト」で四則演算しているマイコン
皆さんご存じのように、マイコンはいろいろな演算を行います。でも、実は算術演算の中では足し算しかできないんです。マイコンは足し算と、論理反転とシフトを組み合わせて、その他の算術演算(引き算、掛け算、割り算)を実現しています。では、どうやって演算しているのかを説明します。 - マイコンのソフト開発って、どうやるの? ――「マイコン開発」で知っておきたい用語
マイコンについて、ある程度分かってきたところで、今回は、「マイコン開発」で覚えておきたいいくつかの用語を紹介します。同時に、マイコン開発で使用する開発ツール(開発環境)や全体的な開発の流れも解説します。