Special
» 2012年12月25日 00時00分 UPDATE

宮崎 仁のマイコン基礎の基礎:第3回 命令と実行のしくみ 〜 命令を知ればマイコンが分かる 〜

[PR/EDN Japan]
PR

 マイコンが実行可能なプログラムは、そのマイコンが持っている命令を、実行させたい順序に従って書き並べたものです。

 Cなどの高級言語では、マイコン本来の命令を使わずにプログラムを書きます。しかし、マイコンは高級言語のプログラムをそのまま実行しているわけではありません。コンパイラを使ってマイコンが実行可能な機械語のプログラムに変換し、それを実行しています。今回は、マイコンの命令とその実行のしくみを探ってみましょう。

どんな命令があるか

 どんな機械語命令を持っているかはマイコンによって違います。20種類ぐらいの命令しか持たないマイコンもあれば、100種類以上の命令を持っているマイコンもあります。ただし、マイコンにとって本当に必要な基本命令はごく単純です。命令数を縮小して内部回路を簡素化したマイコンをRISC(Reduced Instruction Set Computer)と呼びますが、その方が高速動作や省電力に有利なので、現在はRISCが主流になっています。

 マイコンの内部は、レジスタやメモリと呼ばれる多数の記憶場所で構成されています。レジスタは、それぞれが特定の機能を持った独立の記憶場所で、使い方もレジスタごとに決まっています。メモリは特定の機能を持たない単なる記憶場所で、同じ大きさの記憶場所が大量に並んでいます。マイコンの基本命令の大半は、レジスタやメモリに置かれたデータを別のレジスタやメモリに移動(コピー)する命令と、レジスタに置かれたデータに対して演算処理を行う命令です。

 図1はメモリからレジスタにデータを移動(move)する命令の例です。この例ではメモリのアドレスを直接2進数で指定していますが、その他にもさまざまなアドレス指定の方法があります。

 図2はレジスタにあるデータを加算(add)する命令の例です。高級言語では変数を定義して演算を行いますが、マイコンには変数という概念はありません。データはすべてメモリやレジスタに保持され、レジスタとレジスタの間で演算が行われます。

 なお、機械語命令は2進数(0と1の組み合わせ)で定義されていて人間には読みにくいので、通常は読みやすいように各命令を英語の記号(ニーモニック)に置き換えます。これをアセンブリ言語と呼びます。ここでは、TIの超低消費電力マイコンMSP430™ファミリのニーモニックを用いて説明しています。

mm121225_ti_miconbasic3_fig1.jpg 図1 メモリからレジスタにデータを移動する命令
MOV命令は、レジスタやメモリにあるデータを別のレジスタやメモリに移動(コピー)する。対象となるレジスタはR0、R1、R2、…、などの名前で指定し、メモリはアドレス(番地)で指定する。MOV &1114h,R5 を実行すると、メモリの1114h番地に入っていたデータ1234hが、レジスタR5に書き込まれる。&1114hが転送元(ソース)、R5が転送先(デスティネーション)を示す。

(注)アセンブリ言語では数値の後に"h"を付けて16進数を表現することが多い。

mm121225_ti_miconbasic3_fig2.jpg 図2 レジスタにあるデータに別のレジスタのデータを加算する命令
ADD R5,R6 を実行すると、レジスタR5のデータ1234hとレジスタR6のデータ3456hを加算器に転送して加算を行い、結果はレジスタR6に書き込まれる。R5が転送元(ソース)、R6が転送先(デスティネーション)を示す。

逐次実行のしくみ

 現在用いられているほとんどのコンピュータは、プログラムをデータと同じようにメモリに記憶させておき、1命令ずつ逐次読み出して実行する方式(プログラム内蔵方式)を採用しています。これを実現するために、CPUにはPC(プログラム・カウンタ)あるいはIP(命令ポインタ)などと呼ばれる特別なレジスタが用意されています。

 図3のように、マイコンの動作中、PCは次に実行すべき命令のアドレスを保持しています。マイコンはPCが指し示すアドレスから次の命令を取り込み(これをフェッチと呼ぶ)、実行します。PCは取り込んだ命令のバイト数の分だけ自動的に加算されて、次の命令のアドレスを保持します。

mm121225_ti_miconbasic3_fig3.jpg 図3 PCを用いたプログラムの逐次実行の例
メモリの6000h番地から、MOV #1234h,R5、MOV #3456h,R6、ADD R5,R6という三つの命令が置かれている。メモリ内容は機械語(2進数)で、MOV &1114h,R5とMOV #3456h,R6は4バイト、ADD R5,R6は2バイト。

ジャンプとループのしくみ

 逐次実行のしくみだけでは、プログラムを一直線に実行することしかできません。実際のプログラムには、元に戻ってループしたり、途中を飛ばしてジャンプしたり、条件によって処理を切り替えたり、という機能が必要です。マイコンにはそのためのジャンプ命令が用意されています。ジャンプ命令を実行すると、PCの値をジャンプ先アドレスに書き換えることによって、命令の流れを変更することができます。

 図4はジャンプ命令を用いたループの例です。マイコンは電源が入っていれば常にプログラムの逐次実行を続けるので、終端に達したら元に戻ってループするようにプログラムを構成する必要があります。

 図5は直前の演算命令の結果を自動的に判定して、ジャンプするかしないかを決めるジャンプ命令の例です。このようなジャンプ命令を条件ジャンプと呼び、高級言語のif文、for文、while文などの条件分岐を実現することができます。

mm121225_ti_miconbasic3_fig4.jpg 図4 ジャンプ命令を用いたループの例
メモリの6008h番地に、6000h番地に戻るジャンプ命令が置かれている。6008h番地まで逐次実行すると、ジャンプ命令がPCを書き換えて6000h番地に戻る。

流れ図で表現すると次のようになる。

mm121225_ti_miconbasic3_fig4a.jpg

(注)JMP -10という書き方は、MSP430のアセンブラ文法とは若干異なっている。

mm121225_ti_miconbasic3_fig5.jpg 図5 条件ジャンプ命令の例
メモリの6000h番地に、R5とR6の値を比較するCMP命令が置かれている。メモリの6002h番地に、直前のCMP命令の結果を参照する条件ジャンプ命令が置かれている。

流れ図で表現すると次のようになる。

mm121225_ti_miconbasic3_fig5a.jpg

コラム:RISCとCISC

 マイコンの機能は、通常は単純な基本命令だけを用いて実行できます。例えば、基本命令として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© 2017 ITmedia, Inc. All Rights Reserved.


提供:日本テキサス・インスツルメンツ株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2013年3月31日

設計に役立つヒント集

宮崎 仁のQ&Aでよく分かるマイコン基礎の基礎:
第24回 割り込みっていろいろあるのですか?どんな種類があるか教えてください。

今回は、外部割り込み、内部割り込み、ソフトウェア割り込みについて詳しく解説しています
全文を読む


電源IC選択のヒント集
電源IC 使用時の注意点をわかりやすく説明しているほか、使用時に発生する可能性のあるさまざまなトラブルとその対処法についても紹介しています。ぜひご利用ください。ダウンロードには myTI アカウントが必要です。
Part 1をダウンロード
Part 2をダウンロード


アナログ回路設計式一覧ポケット・ガイド
日本語版 PDF

英語版で高い評価を受けてきたポケット・ガイドの日本語版が完成しました。基板レベルやシステム・レベルの回路設計でよく使われるアナログ設計式を紹介しています。ダウンロードには myTI アカウントが必要です。
ダウンロード



facebook & twitter

製品情報、セミナーや展示会などのイベント情報をお知らせしています。

RSSフィード

EDN 海外ネットワーク

All material on this site Copyright © 2005 - 2017 ITmedia Inc. All rights reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.