アセンブリとは


機械語との対面

コンピュータが「機械語」と呼ばれる2進数で動いていることを知っている人は多いでしょう
しかし、この「機械語」を直接理解している人はプロフェッショナルでもごく少数です

アセンブリ言語とは、低水準言語と呼ばれるプログラミング言語のひとつです
アセンブリ言語、またはアセンブラ言語とも呼ばれます

アセンブリはプログラミング言語ですが、BASICやC言語とは大きく分類が異なります
アセンブリ言語は、機械語と1対1の関係にある言語なのです
C言語などの高水準言語は、ひとつのステートメントが複数の意味のある機械語に変換されます
しかも、どのように機械語に変換されるかは正確にはコンパイラによって異なります

純粋なアセンブリ言語は、常に命令がひとつの機械語に対応しています
ただ、16進数のメモリダンプでは人間がわかり難いのでそれを記号化したにすぎません

当然、アセンブリ言語で書かれたファイルは高水準言語同様に機械は理解できません
アセンブリ言語の言語プロセッサで、これを機械語に変換する必要があります
高水準言語のコンパイラに属するアセンブリの言語プロセッサをアセンブラと呼び
高水準言語のコンパイルに対する行為をアセンブルと呼びます

コンパイラでは、ひとつの命令がいくつかの機械語に翻訳されますが
アセンブリ言語と機械語は常に1対1です

MOV AX , FF --アセンブル--> B8FF00

86系のアセンブラでは必ずこのようにアセンブルされます
Intel社が仕様を変更しない限り、MOV AX,FF というアセンブリの文は機械語で B8FF00 です

アセンブルしたバイナリデータは、機械が直接理解することができるデータです
アセンブリ言語を高度に習得することで、機械語をある程度覚えることができます
この講座では、機械語とアセンブリ言語を交えて紹介していきます


アセンブラはどこにある

Windows 95 以降のユーザーのほとんどはアセンブリ言語を知らない
システムは複雑になり、CPUも高速化して速さより効率を求められる時代になったからだ

そのため、昔は遅いと言われつづけた高水準言語やインタプリンタが普及し
C言語やC++言語などは、現在では国際標準化された
Microsoft を代表に各開発メーカーは C/C++ などの高水準言語の
優れた総合開発環境を商品化し、多くのプログラマがそれを実用している

逆に、現在ではアセンブリ言語がほとんどない
よく耳にするであろうものが MASM と呼ばれるマクロアセンブラです
昔は MS-DOS に標準で付属されていましたが、今は購入しなければいけません

では、もうアセンブラはないのか?Windowsでは使うことができないのか?
ご安心ください MS-DOSプロンプトでもアセンブルできる のです
もちろん高度なツールはありませんが、学習用には十分です
アセンブリ言語の学習用としては、DOS窓かWindowsの起動ディスクである MS-DOS 7.0 が最適です

この講座では、Intel 社の 8086 と呼ばれる 16ビットCPU を対象にしています
ちょっと待て、それじゃペンティアムやセレロン、デュロンじゃダメなのか!
大丈夫です、DOS/V Windows シリーズが動作する環境であれば全て互換性があります
//Windows NT の RISC プロセッサなどでは動作しません

ただし、この文章を見ているWindowsユーザーのほとんどは 32ビットCPU でしょう
この講座の8086編は、DOS窓で動作しますがあくまで 16ビットCPU を想定します
Windows上ではなく、純粋なMS-DOSなどで動作させることをお勧めします


必要な知識

この講座はアセンブリ言語のことをまったく知らない初心者のためのものです
しかし、コンピュータ技術については高度な知識を持っていることが前提です

アセンブリ言語の習得には、コンピュータ科学、コンピュータシステム、システム開発に熟知し
物理的なコンピュータの仕組みについて、高い知識が必要です
この講座は受講者が読みやすいよう冗長な文を避けるため、その様な説明は省きます

ハードウェアの説明は、Intelプロセッサ 8086 に依存する部分だけを説明します
レジスタの種類や入出力の実現方法、アドレスの指定方法など
プログラムに必要な8086特有の技術は、できるだけ細かく詳細に解説します

が、ノイマン型コンピュータ、レジスタ、キャッシュ、仮想記憶、スタック、アドレス指定方式など
全般的なコンピュータ技術に関係する用語の意味や内容の説明はしません
これらの解説は、また別の機会に別カテゴリで紹介したいと思います

アセンブリや機械語は、プログラムの知識も当然必要ですが
高水準言語の知識があるというだけでは、習得できるものではありません
それだけ物理的にコンピュータに近いプログラミングなのです



戻る次のページへ