曖昧さ回避
- 麻宮騎亜の漫画『Compiler』とその続編『アセンブラOX』に登場するキャラクター。
- 『デュエル・マスターズ』に登場するクリーチャー。⇒アセンブラ(デュエル・マスターズ)
この記事ではコンピュータ用語の「アセンブラ」および「アセンブリ言語」を中心に、関連する概念である「機械語」や「逆アセンブラ」を含めて解説する。
アセンブリ言語とアセンブラ
アセンブリ言語は、CPU等のハードウェアを直接制御する「機械語」(後述)と、1対1で対応するプログラム言語。今日(こんにち)一般的に用いられる高級言語に対し、低級言語というカテゴリに分類される。これをコンピュータが直接解釈・実行できる「オブジェクトコード」に変換するのが「アセンブラ」である。
歴史
コンピュータの性能が低かった昔は、限られたハードウェアから少しでも性能を引き出すためにアセンブラがよく使われ、アセンブリ言語で書いたソースコードを見ながら機械語を手作業で打ち込む(ハンドアセンブル)ことすらあった。
黎明期のパソコンはBASIC言語を標準搭載していたが、機能が限られている上に動作が遅かったので、ハードウェアを直接弄れる(画面操作やI/O直接操作などの独自拡張が行われたBASICもあったが)アセンブラが重宝された。「インラインアセンブラ」といってBASICにアセンブリ言語を混ぜて書くことができる処理系もあった。
しかし、ハードウェアの高性能化とプログラムの複雑化によって、アセンブリ言語ではコーディングが煩雑になる(後述)という欠点が目立つようになり、使われる範囲が狭まっていった。
現在
今日のCPUは、機械語自体が高級言語前提に設計されている事も多く、パソコンや大規模システムの開発ではアセンブリ言語はまず使われない。しかし、組み込みシステムの世界では過去の資産の保守をする必要もあり、過去より大分狭まっているとはいえまだアセンブラの知識が求められる局面がある(C言語やC++はインラインアセンブラにも対応している)。基本情報技術者試験でもプログラミングの問題でアセンブラの選択ができる(出題されるのはCOMETⅡという仮想マイクロプロセッサの仕様に基づいたCASLⅡという言語である)。また、CPUの挙動を深く理解したいPCユーザー向けに、現在でもx86やx64のアセンブラの入門書が出ている。
GPUなどCPU以外のマイクロプロセッサも機械語を持つが、多くはその仕様を公開しておらず(API経由での利用が前提で、開発者がハードウェアを直接触れないようにしている)、アセンブリ言語でのコーディング自体ができない。ただし、NVIDIAはハードウェアを抽象化した擬似アセンブラPTXを提供している。
長所
- 高級言語で書かれたプログラムと比べて(上手に組めば)動作が速い。
- 高級言語で書かれたプログラムと比べて(上手く組めば)実行コードが小さい。
- ハードウェアの直接的な挙動が理解し易い。
1.と2.は高級言語前提に設計されたチップにはあてはまらない場合もある。
短所
- ハードウェアごとに命令体系が異なり、互換性が無い。
- 基本的に1つの命令語では単純な動作しか出来ない。簡単な処理でも、複数の命令文を組み合わせる必要がある。
- 可読性が低い。ハードウェアの仕様を深く理解していない人間にはコードを読んでも理解が困難であり、後の保守のために丁寧なコメントを残しておく必要性は、高級言語以上に高い。
機械語
ハードウェアに対する命令を16進数で記述したもの。16進数は、さらに2進数であるオブジェクトコードに対応し、最終的に電圧の高低に対応する。機械(主にCPU)は、入力電圧を基準値と比べ、出力電圧を変化させる事で、プログラムに沿った処理を実行する。つまりアセンブラとは、電圧の高低そのものを「2進数→16進数→英単語」の順に、単純に置き換えたものと言える。
逆アセンブラ
オブジェクトコードをアセンブリ言語に変換するソフトウェア。ソースコードが公開されていないプログラムの解析などに用いられる。