メディア
連載
» 2013年09月20日 10時00分 公開

マイコン入門!! 必携用語集(7):マイコンにも言語力が必要!? (4/4)

[菅井 賢,STマイクロエレクトロニクス]
前のページへ 1|2|3|4       

C言語

 ニーモニックを使うことで、かなり使いやすくなりますが、ニーモニックはマシン語と1対1に対応しており、それでもまだ使い難いので、コンピュータで使われている高級言語のC言語を用いるようになりました。

 アセンブリ言語とマシン語はCPU固有の言語なので、あるCPUで作ったプログラムは他のCPUでは使えません。しかし、C言語はCPUに依存せずに記述できるので、非常に便利です。

 このため、今ではCPUの言語はC言語が一般的になりました。

 C言語の命令の詳細は市販のC言語の教科書が数え切れないくらい出版されていますので、そちらを参照してください。

 ここではC言語とアセンブリ言語の関係を説明いたします。

 C言語のwhile文を使って、500回NOPを繰り返す記述を見てみましょう。図3を見てください。

【図3】C言語の例 (マシン語、アセンブリ言語と対比/クリックで拡大)

 変数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言語だけ分かっていればマイコンのプログラムは作れます。ですが、エンジニアとしては、マイコンがそのプログラムを実際にどのように実行しているかを理解しておく必要があります。

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.