FE EXAM

アセンブラ(機械語への変換役)

アセンブリ言語で書かれたプログラムを機械語に変換するプログラム。

INTERACTIVE VISUALIZATION
ニーモニック
命令コード
オペランド
処理中の命令
機械語(16進)
対応関係
1対1
シナリオ
ステップ1 / 7
STEP 1/7変換の前(アセンブリ命令)まだ変換していない状態です。入力はアセンブリ言語で書かれた命令「MOV A, 5」と「ADD A, 3」です。アセンブリ言語は機械語にとても近い低水準の言語で、人間が覚えやすい英字の記号で命令を書きます。アセンブラがこれを機械語に変換します。
▶ を押すと変換が始まります
命令と機械語の対応
ニーモニック意味機械語(2進)16進
MOV A, 5レジスタ A に 5 を入れる0001 0000 01010x1005
ADD A, 3レジスタ A に 3 を足す0010 0000 00110x2003
解説

📌
アセンブラとは

アセンブリ言語MOV A, 5機械語0001 00000101変換

アセンブラとは、アセンブリ言語で書かれたプログラムを機械語に変換するプログラムです。アセンブリ言語(=機械語に非常に近い低水準の言語のこと)と機械語はほぼ1対1に対応しているため、変換の作業もとても素直です。

身近な例で考えると、速記の記号を正式な文字に書き起こす作業に似ています。速記(アセンブリ言語)は人間がすばやく書くための記号で、それを誰でも読める正式な文章(機械語)に置き換えていく──その置き換え役がアセンブラです。

上のツールで▶ボタンを押すと、「MOV A, 5」というアセンブリ命令が、命令コードとオペランドのビット列へ変換されていく様子を確認できます。

🔤
ニーモニックの意味

ニーモニックとは、機械語の命令を、人間が覚えやすい英字の記号で表したものです。機械語は 0001 0000 0101 のような0と1の並びで、人間にはとても覚えられません。そこで、意味の分かる英字に置き換えたのがニーモニックです。アセンブリ言語は、このニーモニックを使って命令を書きます。

代表的なニーモニックには次のようなものがあります。
MOV:move(動かす)の略。値をレジスタなどに入れる
ADD:add(足す)の略。値を加算する
JMP:jump(飛ぶ)の略。指定した場所へ処理を移す

「move なら MOV」「add なら ADD」のように、英単語を縮めた形になっているので意味と結びつけて覚えやすいのが特徴です。命令の対象になる値や場所はオペランド(=操作対象のこと)と呼び、ニーモニックの後ろに書きます(例: MOV A, 5 の A や 5)。

🔗
機械語との対応

MOV A, 50001000001011対1ADD A, 3001000000011

アセンブラは、ニーモニックを対応する機械語(ビット列)に1対1で変換します。1つのアセンブリ命令が、1つの機械語命令にきれいに対応するのが特徴です。コンパイラのように「1行が何十もの機械語命令になる」ということは基本的にありません。

機械語は、おおまかに2つの部分でできています。
命令コード(オペコード):何をするかを表す部分(例: MOV → 0001)
オペランド:操作の対象や値を表す部分(例: 5 → 0000 0101)

このようにアセンブリ言語は機械語ととても近い低水準の言語なので、CPUやメモリの動作を直接的に表現できます。ハードウェアを細かく制御したい場面で使われ、上のツールの対応一覧では、各ニーモニックがどのビット列に変換されるかを確認できます。

📌
アセンブリ言語が必要な理由

機械語(0と1の列)0001 0000 01010010 0000 00110011 0001 0000人間には読みにくいアセンブリ言語MOV A, 5ADD A, 3JMP loop意味が読み取れる

なぜ機械語を直接書かないのかを考えてみましょう。機械語は 0001 0000 0101 のような0と1の列です。CPUはこれを直接実行できますが、人間が読んでも何をしているか全く分かりません。書くのも確認するのも非常に大変です。

そこで、機械語と1対1に対応しつつ、人間にも読める英字記号に置き換えた言語が作られました。それがアセンブリ言語です。
MOV A, 5:「A というレジスタ(=CPUの中にある小さな記憶場所)へ数値5を入れる」という意味
ADD A, 3:「Aの値に3を加える」という意味
JMP loop:「loopという場所へ処理を飛ばす」という意味

アセンブリ言語は機械語そのものより書きやすい一方で、どの命令が何個の0と1に対応するかを意識しながら書く必要があります。そのため、今では主にCPU内の細かな動きを直接制御したいとき(組み込み機器・OSの基礎部分など)に使われます。アセンブラは、この「人間向けのアセンブリ」を「機械向けの機械語」へ忠実に翻訳する係です。

📌
アセンブラ・コンパイラ・インタプリタの違い

アセンブリ言語アセンブラ機械語1対1高水準言語コンパイラ機械語一括変換高水準言語インタプリタ1行ずつ解釈・即実行

プログラムを「人間が書ける言語」から「機械が実行できる形」へ変換するツールには、主に3種類あります。これらの違いは「何を入力として受け取り、どう変換するか」です。

ツール入力変換の仕方
アセンブラアセンブリ言語ニーモニックと機械語を1対1に変換
コンパイラ高水準言語(C・Javaなど)プログラム全体を一括で機械語に翻訳
インタプリタ高水準言語(Python・JavaScriptなど)1行ずつ読みながら即座に実行

アセンブラの特徴は「低水準言語(機械語に非常に近い言語)を入力とし、1命令が1機械語命令に対応する」ことです。コンパイラは「高水準言語(人間が書きやすい言語)を入力とし、まとめて機械語に翻訳する」点で違います。インタプリタは実行ファイルを作らず「1行ずつ読みながら即実行する」点で他と異なります。
アセンブラ:変換比 1対1、速度は最も速い機械語を生成
コンパイラ:変換比 多対多(1行が何十もの機械語に)、実行前に全部変換
インタプリタ:実行ファイル不要、1行ずつ読んでその場で動かす

練習問題

🎯
基本情報技術者 練習問題

Q1.アセンブラの説明として最も適切なものはどれか。
A.高級言語を一括翻訳して実行ファイルを作る
B.アセンブリ言語で書かれたプログラムを機械語に変換する
C.高級言語を1行ずつ解釈実行する
D.機械語をそのまま実行する電子回路
Q2.ニーモニックの説明として正しいものはどれか。
A.機械語の命令を人間が覚えやすい英字記号で表したもの
B.プログラムの実行結果を保存する記憶領域
C.高級言語の関数を呼び出すための命令
D.データを暗号化するための鍵
Q3.アセンブリ言語と機械語の対応について正しいものはどれか。
A.1つのニーモニックが複数の機械語にランダムに変換される
B.ニーモニックと機械語はほぼ1対1で対応し、アセンブラが変換する
C.アセンブリ言語は機械語とまったく対応しない
D.機械語の方がアセンブリ言語より人間に読みやすい

関連コンテンツ