マイコンが実行可能なプログラムは、そのマイコンが持っている命令を、実行させたい順序に従って書き並べたものです。
Cなどの高級言語では、マイコン本来の命令を使わずにプログラムを書きます。しかし、マイコンは高級言語のプログラムをそのまま実行しているわけではありません。コンパイラを使ってマイコンが実行可能な機械語のプログラムに変換し、それを実行しています。今回は、マイコンの命令とその実行のしくみを探ってみましょう。
どんな機械語命令を持っているかはマイコンによって違います。20種類ぐらいの命令しか持たないマイコンもあれば、100種類以上の命令を持っているマイコンもあります。ただし、マイコンにとって本当に必要な基本命令はごく単純です。命令数を縮小して内部回路を簡素化したマイコンをRISC(Reduced Instruction Set Computer)と呼びますが、その方が高速動作や省電力に有利なので、現在はRISCが主流になっています。
マイコンの内部は、レジスタやメモリと呼ばれる多数の記憶場所で構成されています。レジスタは、それぞれが特定の機能を持った独立の記憶場所で、使い方もレジスタごとに決まっています。メモリは特定の機能を持たない単なる記憶場所で、同じ大きさの記憶場所が大量に並んでいます。マイコンの基本命令の大半は、レジスタやメモリに置かれたデータを別のレジスタやメモリに移動(コピー)する命令と、レジスタに置かれたデータに対して演算処理を行う命令です。
図1はメモリからレジスタにデータを移動(move)する命令の例です。この例ではメモリのアドレスを直接2進数で指定していますが、その他にもさまざまなアドレス指定の方法があります。
図2はレジスタにあるデータを加算(add)する命令の例です。高級言語では変数を定義して演算を行いますが、マイコンには変数という概念はありません。データはすべてメモリやレジスタに保持され、レジスタとレジスタの間で演算が行われます。
なお、機械語命令は2進数(0と1の組み合わせ)で定義されていて人間には読みにくいので、通常は読みやすいように各命令を英語の記号(ニーモニック)に置き換えます。これをアセンブリ言語と呼びます。ここでは、TIの超低消費電力マイコンMSP430™ファミリのニーモニックを用いて説明しています。
(注)アセンブリ言語では数値の後に"h"を付けて16進数を表現することが多い。
現在用いられているほとんどのコンピュータは、プログラムをデータと同じようにメモリに記憶させておき、1命令ずつ逐次読み出して実行する方式(プログラム内蔵方式)を採用しています。これを実現するために、CPUにはPC(プログラム・カウンタ)あるいはIP(命令ポインタ)などと呼ばれる特別なレジスタが用意されています。
図3のように、マイコンの動作中、PCは次に実行すべき命令のアドレスを保持しています。マイコンはPCが指し示すアドレスから次の命令を取り込み(これをフェッチと呼ぶ)、実行します。PCは取り込んだ命令のバイト数の分だけ自動的に加算されて、次の命令のアドレスを保持します。
逐次実行のしくみだけでは、プログラムを一直線に実行することしかできません。実際のプログラムには、元に戻ってループしたり、途中を飛ばしてジャンプしたり、条件によって処理を切り替えたり、という機能が必要です。マイコンにはそのためのジャンプ命令が用意されています。ジャンプ命令を実行すると、PCの値をジャンプ先アドレスに書き換えることによって、命令の流れを変更することができます。
図4はジャンプ命令を用いたループの例です。マイコンは電源が入っていれば常にプログラムの逐次実行を続けるので、終端に達したら元に戻ってループするようにプログラムを構成する必要があります。
図5は直前の演算命令の結果を自動的に判定して、ジャンプするかしないかを決めるジャンプ命令の例です。このようなジャンプ命令を条件ジャンプと呼び、高級言語のif文、for文、while文などの条件分岐を実現することができます。
流れ図で表現すると次のようになる。
(注)JMP -10という書き方は、MSP430のアセンブラ文法とは若干異なっている。
流れ図で表現すると次のようになる。
マイコンの機能は、通常は単純な基本命令だけを用いて実行できます。例えば、基本命令としてADD(加算)とSUB(減算)があれば、乗算は加算を繰り返し用いて、また除算は減算を繰り返し用いて実現できます。しかし、アセンブラ言語でプログラミングするなら1命令で乗算や除算ができる方が便利ですし、機械語のプログラムも短くなってROM容量を節約できます。1970年代から80年代にかけて登場したマイコンには各種の複合命令が次々に追加され、命令数が増えていきました。
しかし、命令数が増えるとマイコンの内部回路は複雑になり、クロックの高速化が困難になってきました。そこで注目されるようになったのが、命令数を縮小して内部回路を簡素化し、高速化を可能にしたRISC(Reduced Instruction Set Computer)です。それに対して、命令数の多いマイコンはCISC(Complex Instruction Set Computer)と呼ばれるようになりました。その後は、どちらも互いの利点を取り入れるようになり、RISCとCISCの区別は次第にあいまいになってきています。
1990年代から2000年代には、組み込み用のマイコンでもRISCの考え方が主流です。TIのMSP430ファミリは、16ビットRISCの代表的なマイコン・ファミリです。
※MSP430はTexas Instruments Incorporatedの商標です。その他すべての商標および登録商標はそれぞれの所有者に帰属します。
TIのマイコン製品の詳細はこちら
宮崎 仁のマイコン基礎の基礎 第4回「プログラム言語とは何か」は、1/25(金)の公開を予定しています。
Copyright © ITmedia, Inc. All Rights Reserved.
提供:日本テキサス・インスツルメンツ株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2013年3月31日
宮崎 仁のQ&Aでよく分かるマイコン基礎の基礎:
第24回 割り込みっていろいろあるのですか?どんな種類があるか教えてください。
今回は、外部割り込み、内部割り込み、ソフトウェア割り込みについて詳しく解説しています
●全文を読む
電源IC選択のヒント集
電源IC 使用時の注意点をわかりやすく説明しているほか、使用時に発生する可能性のあるさまざまなトラブルとその対処法についても紹介しています。ぜひご利用ください。ダウンロードには myTI アカウントが必要です。
●Part 1をダウンロード
●Part 2をダウンロード
アナログ回路設計式一覧ポケット・ガイド
日本語版 PDF
英語版で高い評価を受けてきたポケット・ガイドの日本語版が完成しました。基板レベルやシステム・レベルの回路設計でよく使われるアナログ設計式を紹介しています。ダウンロードには myTI アカウントが必要です。
●ダウンロード