X86アセンブラ/はじめに

出典: フリー教科書『ウィキブックス(Wikibooks)』
移動: 案内検索

なぜアセンブリ言語を学ぶのか?[編集]

アセンブリ言語はプログラマの道具箱の中で最も古くからある道具である。どんなソフトウェアも一行のアセンブリコードも見ることもなく書くことができる。そこで疑問が生まれてくる。なぜアセンブリ言語を学ぶのか? センブリ言語はコンピュータと人間のできるコミュニケーションのうち、最もコンピュータ寄りのものである。アセンブリ言語を理解することにより、プログラマはプログラム中のデータと実行の流れを人間の理解できる限り正確に追うことができる。また、もう一つのアセンブリ言語を学ぶ利点は、プログラムは一度コンパイルされると、コードをリバース・エンジニアリングし元の形に戻すことは、不可能ではないにしても難しいことだからである。結果として、すでにコンパイルされているプログラムを調べようとした場合、16進数や2進数のコードを読み解こうとするのでなければ、アセンブリ言語で調べなくてはならない。デバッガはしばしばアセンブリ言語でしかプログラムのコードを表示できないので、アセンブリ言語を学ぶ大きな理由の一つになる。

アセンブリ言語は低水準のタスク(ブートローダや低水準のカーネルコンポーネントなど)を実装するのに使用できるツールがそれだけではない場合でも、好んで使われている。アセンブリ言語で書かれたコードは高水準言語で書かれたコードに比較してオーバヘッドが小さく、アセンブリコードが他の言語で書かれたプログラムよりもずっと高速に実行できる場合がしばしばある。また、高水準言語で書かれたコードはアセンブリにコンパイルすることができ、ある部分からスピードを低下させているビットをしぼり出すために「手動で最適化」することもできる。インテルやAMDといったハードウェアメーカーがプロセッサに新しい機能や命令を追加すると、これらの機能にアクセスするための方法がアセンブリルーチンを使う以外にない場合も良くある。つまり、少なくとも、メジャーなコンパイラベンダがこれらの機能のサポートを追加するまでである。

しかし、アセンブリ言語でプログラムを開発するのは非常に時間のかかることである。新しいプロジェクトをアセンブリ言語で書くのは良い考えとは言えないが、アセンブリ言語について少しでも知っておくことに価値があるというのは確かである。

この本は誰のために書かれたか?[編集]

この本は、アセンブリ言語への入門のために書かれているが、アセンブリ言語についてすでに知っているがもう少しx86システムアーキテクチャについての情報が欲しい人にとっての良いリファレンスとしても役立つようにも書かれてる。x86アセンブリ言語の進んだ使い方についても、いくぶんか書いている。全ての読者にこの本を読むこと(そして貢献すること)をお薦めしたい。プログラミングについての予備知識は決して無駄にはならない。

この本はどのような構成か?[編集]

第1節では、x86ファミリのチップについて説明し、基本的な命令について紹介する。第2節では、アセンブラの違いによる文法上の違いについて説明する。第3節では、浮動小数点演算やMMX、SSEといった追加で使用できる命令セットについて詳しく扱う。

第4節では、x86アセンブリにおける先進的な話題を扱う。これにはブートローダを書くというような低水準プログラミングが含まれる。言語やC++言語といった高水準言語で書くことが簡単にはできないタスクは多く存在する。例えば、割り込みを有効化したり無効化したりすることや、プロテクト・モードを有効化すること、制御レジスタにアクセスすること、グローバル・ディスクリプタ・テーブルを作成することなどである。これらは全てアセンブリ言語で扱われる必要がある。第4節では、C言語やほかの高水準言語とアセンブリ言語とを組み合わせる場合についても説明する。一度アセンブリ言語で関数を書いたら(例えばプロテクト・モードを有効化する関数とする)、その関数を、C言語(C++言語の場合さえある)のカーネルとで使うことができる。第5節では、標準的なx86チップセットについて扱う。x86コンピュータアーキテクチャと一般的なハードウェアについての話題も含む。

現在のこの本の構成は、必要以上の努力をすることなく、読者にできるだけ多くの情報を提供できるように考えられている。とあるアセンブラでのアセンブリ言語を学びたい読者は、第1節とそのアセンブラに直接関連した第2節の各章を読めば良い。MMXまたはSSEの命令で異なるアルゴリズムを実装したいプログラマは、第3節を読むだけで良い。ブートローダやカーネル、ほかの低水準タスクを実装したいプログラマは、第4節を読むのが良い。本当にx86ハードウェアの設計の核心を知りたい読者は、第5節までを通して読むのが良い。