マイコンという名のLSIを知る ―― ディジタル機器に不可欠なデバイスの利点と仕組み

宮崎 仁

3.ソフトウェアの構成を知る

●CPUは機械語しか理解できない

 CPUは,メモリ(主記憶)に置かれたソフトウェアを,決められた順番通りに実行していきます.

 CPUやメモリが扱えるのは,2進数の列で表現された機械語コードだけです(図12).あらゆるコンピュータには,そのコンピュータが実行できる機械語命令の集合が定義されています.これを命令セットと呼びます.


図12 機械語とアセンブリ言語

機械語とアセンブリ言語は1対1で対応する.機械語は2進級の並びであり,そのまま主記憶に書き込まれて実行される.アセンブリ言語はニーモニック(略記号)で記述される.変数や数式を使用することはできない.

 

 コンピュータは,命令セットにない命令は実行できません.命令セットはマイコンのファミリごとに異なる場合が多く,機械語ソフトウェアを別のファミリのマイコンで実行しようとしてもうまくいきません.

●機械語を理解しやすくしたアセンブリ言語

 人間にとって,機械語のプログラムを読んだり書いたりするのは大変な苦労なので,もっと分かりやすい文字や数字でソフトウェアを記述できるようにプログラミング言語が工夫されてきました.

 最初に考えられたのは,機械語命令の一つずつに簡単な英語名(ニーモニック)を対応させることです.例えば,データをメモリに保存する命令はstoreを略してst,メモリを空に(値を0に)する命令はclearを略してclr,数値を加算する命令はaddというように,意味を類推できて記憶しやすい名前が工夫されています.命令セットの一覧表も,ニーモニックで書かれています.

 命令をニーモニックで表し,数値は16進数で書くという,書き方のさまざまな約束事を取り決めたものをアセンブリ言語と呼びます.アセンブリ言語は機械語命令と1対1で対応しており,簡単に自動変換できます.アセンブリ言語を機械語に変換するツール(道具)をアセンブラと呼びます(図13).


図13 アセンブリ言語の機械語への変換はアセンブラ(assembler)が自動的に行う

 

●人間の考えに近づけた高級言語

 アセンブリ言語のプログラムの流れ(アルゴリズム)は機械語と同じであり,人間が考える問題解決の手順とは大きなギャップがあります.そこで,もっと人間の考え方に近づけたプログラミング言語も作られています.

 最も早く(1950年代後半)実用化されたプログラミング言語として,科学技術計算向けのFORTRAN,事務計算向けのCOBOLなどがあります.その後,より汎用性の高いC言語やC++言語が広く普及し,さまざまな分野で標準的なプログラミング言語として用いられるようになりました.

 これらは総称して高級言語と呼ばれています.高級言語は人間の思考に近く,大規模で複雑なソフトウェアを容易に記述できます.機械語やアセンブラのように機種に依存せず,統一された文法で記述できるのも利点です.

 高級言語で書かれたソフトウェア・コードは,そのままではマイコンで実行できません.アセンブリ言語と同じようにツールを用いて機械語に変換します.

 高級言語を機械語に変換するツール(道具)は総称してコンパイラと呼ばれます(図14).コンパイラは,マイコンのファミリごとに用意する必要があります.また,高級言語と機械語は1対1に対応しないので,どのような変換が行われるかはコンパイラに依存します.



図14 高級言語とコンパイラ
高級言語は人間の思考に近く,読み書きが容易にできる.変数や数式,処理の流れを簡潔に記述できる.機械語への変換は,コンパイラ(Compiler)が自動的に行う.

 一般に,アセンブリ言語に比べて,高級言語ではソフトウェア開発はずっと簡単ですが,そのかわり機械語のコード・サイズが大きく,処理速度が遅くなることもあるといわれています.

●マイコンのソフトウェア開発もC言語が主流

 高級言語は,計算などデータ処理のための記述ができるだけで,ハードウェアを直接操作する機能を持ちません.コンピュータの機種によってハードウェアが異なるので,それを直接操作する文法を定義してしまうと高級言語の汎用性がなくなってしまうからです.どうしてもハードウェアを操作したいときは,高級言語の記述とアセンブリ言語の記述を組み合わせる方法が用いられてきました.

 組み込み用途では,マイコンは機器自体を制御する目的で用いられます.このため,高級言語だけではソフトウェアを記述できないとされていました.また,組み込み用途では低価格で小規模なマイコンが多く用いられていたことから,アセンブリ言語を使ってコンパクトで高速なソフトウェア・コードを書く方法が長い間用いられてきました.

 最近では機器制御に適したC言語が普及し,マイコンの性能向上も進んだことから,組み込み用途でもC言語で記述することはごく普通になっています.C言語は高級言語の中では構造が単純で,どのように機械語に変換されるかが分かりやすいという特徴があります.また,C言語とアセンブリ言語を組み合せて記述するのも比較的簡単です.

 マイコンがどのように動作するかを厳密に知りたい場合は,アセンブリ言語や機械語を参照し,マイコンのマニュアルで各命令の働きや使い方を調べる必要があります.


みやざき・ひとし

(有)宮崎技術研究所
 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日