今回はアセンブリ言語について紹介したいと思います。
アセンブラは低水準言語と呼ばれていています。今どきアセンブリなんて学ぶのは少数派で「時代遅れ」という意見もあるとも言われますが。というのも今はJava、C#、PHPなどの高級言語を使い統合開発環境で効率的にソフトウェアを開発するのが一般的だからです。
photo by Perica
なぜ、今アセンブリ言語なのか?
Javaなどの高級言語があるのになぜアセンブリなのか?
それはアセンブリはコンピュータの持っている性能を100%引き出す言語だからです。
ちなみにC言語、Javaなどの高級言語ではフルに発揮するということまではできないと言われます。
他にも高級言語から覚えるよりもアセンブリから学んだ方がコンピューターの理解度が深まる、そして理解しやすいのではないかとの意見もあります。コンピューターというものを根本から理解するのがアセンブリ言語を学ぶ目的です。
機械語とアセンブラ言語
photo by Thomas Vandenberghe
コンピューター (CPU) が直接理解し処理しているプログラムは機械語です。マシン語またはネイティブ語とも呼ばれます。
高級言語によるメソッドや変数をコンピュータは直接理解できるというわけではありません。コンパイラにより翻訳を行いはじめて処理できるものです。
「例」… 1001 1011 0110 1110
0と1のビットによるデータです。コンピューターの根っこの部分は0 (OFF/Low) と1 (ON/High) でしか表現できないのです。この0と1の組み合わせが機械語なので人間からみて何を意味するのかわかりせん。
これを見やすく16進数で表すまでが機械語ですがこれでもまだ人間が直接見てそれをどんな動作を意味するものなのか理解できるものではありません。またCPUのメーカーによっても仕様が違ってきます。
「例」… 1100 1010 (2進数) → CA (16進数)
その機械語を人間でも理解できるようになっているのがアセンブラ言語です。機械語の数値だけで意味するものをニーモニック (後述) に割り当てられています。
\ 関連記事を読む /
【図解】「2進数=10進数=16進数」変換するための計算方法を解説
【図解】「8進数=10進数」に変換するための計算方法を解説
もっとアセンブリ
前述したようにプログラミング言語にはCPUが直接理解できる機械語と、人間から見て理解しやすいようになっている高級言語とあります。
アセンブリ言語はその中間のどちらかとえば機械語寄りに位置していて低級言語と呼ばれています。アセンブリ言語以外のプログラミング言語は全て
例えばC言語で処理する一つの命令文にはいつくものアセンブラが含まれています。例えばプログラミング言語を学ぶ時にお決まりの「Hello World」を表示させるというプログラムがありますよね?
それをアセンブラで同じく「Hello World」と出力させる処理をするためにはニーモニックによる複数の処理が必要になってきます。
アセンブリ、アセンブラ、アセンブルの違い
まず覚えておきたいのが「アセンブラ」「アセンブリ」「アセンブル」の違いでしょう。
コンパイラ、コンパイルに似ている気がします。また語尾が「ラ・リ・ル」になっているのでその違いで覚えるとわかりやすいです。気になるのがそれぞれがどんな意味を指しているのかという疑問です。
「その1」アセンブリ / assembly
assemblyという英単語が組み立てを意味する言葉です。組み立てを意味するのですから、プログラミング言語という意味を指してアセンブリ、アセンブリ言語と呼びます。
また、同じ意味でアセンブラと呼ばれる場合もあります。この辺あいまいな認識だとどちらが正しいのか解らずややこしいです。
余談ですが自動車、機械業界の用語で機械を組み立てるという意味としても使われているようです。この場合アッシーとも呼ばれています。
「その2」アセンブル / Aassemble
アセンブリで書いたプログラムを機械語に翻訳する事。
「その3」アセンブラ / Assembler
アセンブルするために使用するソフトウェアの事。
「番外」ハンドアセンブル / hand assemble
かつてはアセンブリのプログラムから機械語への翻訳が人間の手により手動で行われていました。これをハンドアセンブルと呼びます。ニーモニックから機械語への対応表を見ながら手打ちで16進数に直すという作業ですから大変手間のかかる作業です。
このハンドアセンブルによる手動部分を自動で行われるように開発されたソフトウェアがアセンブラです。
という事でまとめると、プログラミング言語という意味で使われるのがアセンブリ言語/アセンブリ、またはアセンブラです。アセンブリかアセンブラと覚えておけば問題ありません。
ニーモニック
「ニーモニック/mnemonic」は英語で記憶術を意味し、古代ギリシア語「mnemonikos/記憶」から発展したとされている単語です。そんな単語の由来からかアセンブリでいう所のニーモニックとは機械語による数字を人間から見てわかりやすいように変換した簡易記憶記号になります。
このニーモニックにより記号化したアセンブリ言語と機械語による数字の羅列は全て1対1の関係にあります。仕組みは2進数、または16進数で意味する数字の羅列をニーモニックという記号に置き換えたというだけです。1対1というのは1つのアセンブリを翻訳すると1つの機械語になるというように、3つの意味なら機械語でも3つの意味、5つなら5つ… という仕組みです。
アセンブリの特徴

アセンブリ言語には以下のような特徴があります。アセンブリは処理速度が速いといわれているが、大きなプログラムを作るという場合には向いていません。
またCPUが異なるとニーモニックの記述方法すら変わってきます。これはCPUメーカーごとの著作権の問題が関わってくる事からです。高級言語になりこの問題は解決されています。
あと下記のハードウェアの知識とは主にCPUの事だと思います。それはCPU内部にあるレジスタなどをアセンブリによって操作するからです。またI/Oポート (アイオーポート/Input Outputの略語) またの名を入出力ポートと呼ばれるものもあります。この部分の操作は高級言語などでは特に意識する必要がないようになっている仕組みです。
photo by Uwe Hermann
- 処理速度が速い
- 機械語と1対1で対応している
- CPUが異なるとアセンブリの種類も変わる
- I/Oポートの操作ができる
- ハードウェアの知識が求められる
まとめ
アセンブリはCPUを把握していない事には使えないとおもうので、レジスタやメモリの関係など気が向いたら記事にしていきたいと思います。