アセンブラ言語のすすめ

アセンブラ言語とは

コンピュータは計算機です。そのため、CPUは計算をすることしかしません。決してCPUだけでは画面を表示したりはできません。※IntelAMDのようにCPUの中にGPU等を組み込んでいる場合はありますが。

CPUの命令は下記のようなものが主となります。 ・加算 ・減算 ・レジスタからメモリへのストア ・メモリからレジスタへのロード ・別の命令の場所にJUMP ・割り込みの設定

これらの命令を組み合わせることでコンピュータに複雑な処理を行わせることができます。この命令の組み合わせのことをマシン語と言って、人間には理解し難い16進数の数字列で表現され、コンピュータはマシン語でしか処理できません。

アセンブラ言語は、Wikiにはこんなふうに説明されています。

アセンブラは、アセンブリ命令ニーモニックをオペコードに変換し、シンボル名をメモリ位置や他の実体に変換することでオブジェクトコードを生成する[4]。

使われている用語を説明します。

  • アセンブリ命令ニーモニック・・・・「ADD」とか「LOAD]のように人間の目で見てわかりやすいアセンブラ言語の命令行のこと
  • オペーコード・・・・・・・・・・・命令「ADD」に対応した16進数で表現されるデータ。ちなみに命令の対象となるパラメータを「オペラント」と言います。
  • シンボル名・・・・・・・・・・・アセンブラ言語ではCPUへの命令以外にJUMP先を番地ではなく読みやすいラベル名で書くことができます。このラベルのことをシンボル名といいます。
  • メモリ位置・・・・・・・・・・・番地を意味します。データが格納されているメモリ番地やJUMP先はこの番地で指定する必要があります。
  • オブジェクトコード・・・・・・・16進数の数値で羅列したバイトコードデータ。マシン語になります。ちなみに、このオブジェクトコード単体ではプログラムの実行はできません。このオブジェクトコードに、OS上で実行するために必要な情報を追加することで実行プログラムになります。

アセンブラ言語の良さ

前述の通り、アセンブラ言語はマシン語に直接に変換できます。 つまり、アセンブラ言語を理解するということはCPUの動作を理解する必要があるということです。

私が大学時代(1997年前後)にはアセンブラ言語(IBM System/370用アセンブラ)を勉強しましたが、この経験は現代においてもとても役立っております。

何に役立っているの?

仕事では、プログラムのデバッグで役立っています。 例えば開発したソフトウェアが異常終了すると「コアダンプ」ファイルを作ることがあります。このファイルから原因を探す際にアセンブラ言語(マシン語)の理解が必要です。

他にもコンピュータの話題に対して情弱と言われなくて済むかもしれません。

例えば、「64ビットOSは何が良いのか」と聞かれたら答えられますでしょうか?アセンブラやCPUの動作原理がわかると回答ができるかと思います。

最初にアセンブラを勉強するならば

Intel CPU用のアセンブラを勉強するのが良いかと思います。 個人的には8086アセンブラがわかりやすいと思いますが、8086は16ビットCPU命令しかないため現代ではあまり活用できないかもしれません。もう少し現代に合わせた64ビットCPU用アセンブラでも良いかと思います。

ちなみに、アセンブラを勉強するためにはアセンブラソフトウェアが必要ですが、Linuxならば無料で「as」「gas」といったアセンブラが利用できますし、WindowsでもVC++コンパイラに同梱されていたりするので勉強しやすいと思います。