アセンブリ言語

アセンブリ言語

'''アセンブリ言語'''(アセンブリげんご、assembly language)とは、コンピュータを動作させるための機械語を人間にわかりやすい形で記述する、代表的な低級言語である。
次のエントリ[ 概要 ]
アセンブリ言語
【画像】語)とアセンブリ言語による

概要

CPUが直接実行できる言語は機械語のみであるが、機械語は数字(内部的には二進数)の羅列なので人間には理解しにくい。そこで、機械語を直接記述するのではなく、ニーモニックと呼ばれる命令語でプログラムを記述することで、人間により分かりやすくしたものがアセンブリ言語である。アセンブリ言語の文法はCPUのアーキテクチャに依存するため、高級言語のような移植性はない。

アセンブリ言語を機械語に変換する事を'''アセンブル''' (assemble) すると言い、それを行うプログラムの事を'''アセンブラ''' (assembler) と言う。なお、アセンブリ言語の意味で「アセンブラ」または「アセンブラ言語」(Assembler Language)と呼ぶ場合も多い。

アセンブリ言語の命令は、アセンブラに対する命令(疑似命令)やマクロ命令を除き、機械語と1対1で対応し、プログラマがCPUの動作を把握しながらプログラムを記述する事ができる。そのため、
  • 実行速度やプログラムサイズに制限があるアプリケーションで、高級言語であるコンパイラの最適化能力では達成できない最適化を手作業で行いたい場合

  • CPUの動作をプログラマが完全に制御する必要がある場合

  • メモリ容量や演算実行速度などのリソースに厳しい制約がある用途

  • などにはアセンブリ言語によるプログラムが行われる。現在でも、例えばOSカーネルデバイスドライバ組み込みシステムの開発といった場面で頻繁に用いられる。
    次のエントリ[ 歴史 ]
    アセンブリ言語
    【画像】アセンブリ言語で記述した

    歴史

    機械語は、実行したい計算の内容をCPUの内部構造に依存した非常に単純な操作に分割・変換したものであるため、人間には理解しづらい。機械語を並べながらプログラミングするのは、人間のプログラマにとっては負担が大きかった。

    そこで、機械語そのものを書く代わりに機械語の「意味」に相当する短い記号や単語を対応させ、それを記述してプログラミングをすることが考えられた。

    例えばx86 CPUの機械語
    は「ALレジスタに6116 (97) という数値を格納せよ」という意味であるが、この数列から意味を読み取るのは難しいので、

    MOV AL, 61

    と書いておく(MASMでの例)。ちなみに、"MOV" は 英単語 "move"(動かす)の略である。

    このように、機械語そのものよりも親しみやすい記法でプログラムを書いておいて、プログラムが完成したときにまとめて機械語に変換するのである。

    当初、この機械語への変換は人間が手で行っていた。これを'''ハンド・アセンブル'''と呼ぶ。
    しかし、この変換は単に定められた規則に従って記号や単語から機械語を生成するだけなので、この作業をコンピュータに行わせることが考えられた。
    そしてアセンブリ言語を与えると、自動的に機械語を出力するプログラムが作られるようになった。このプログラムを'''アセンブラ'''という。アセンブラの登場当初は、アセンブラで機械語のプログラムを生成することを自動プログラミングと呼んだ。
    次のエントリ[ 文法 ]
    アセンブリ言語
    【画像】図4●機械語はアセンブリ言語に
    アセンブリ言語
    【画像】アセンブリ言語から機械語に変換

    文法

    アセンブリ言語によるプログラミングは、基本的に機械語の命令列を記述することでおこなう。

    機械語の命令(インストラクション)は、アセンブリ言語においては普通、ニーモニックと呼ばれる、機械語の命令がプロセッサでおこなう動作を表現する英単語ないしその省略表現(LoadをLDなど)で表現する。機械語の命令セットは、プロセッサによって異なる。一般にプロセッサの設計者あるいは製造者によって定義されたニーモニックが標準とされるが、アセンブラによってはこれと異なるニーモニックを用いる場合もある(GNUアセンブラのgasのインテルプロセッサ用など)。

    アセンブリ言語プログラムのソースコードには、機械語に対応したニモニックの他に、機械語には変換されない、アセンブラに対する指示文が含まれる。これを'''疑似命令'''または'''アセンブラ命令'''といい、ラベルの宣言、セクションの定義、条件アセンブルや繰り返しブロック、マクロなどが含まれる。'''マクロ'''は、複数のニーモニックを1つの命令文で記述する構文で、マクロを使えるアセンブラをマクロアセンブラという。

    また、RISCアーキテクチャ向けのアセンブリ言語では、その命令セットに対応するもの以外のニーモニック(例えば定型的に用いられる複数の命令の組み合わせ)が標準で定義されていて、そのニーモニックを記述することで、動作が同じ命令に変換されたり、複数の命令を組み合わせた形にアセンブルされる。

    なかには、パイプライン処理などを最適化するために命令順序を入れ替えたり、ラベルの位置関係によってアドレッシングモードを最適化するアセンブラもあり、必ずしもソーステキストの記述とアセンブルの結果が直接対応するとは限らない。

    機械語のコードは、処理の内容を指示する'''オペコード'''と、処理の対象を指示する'''オペランド'''から成る。それに従い、アセンブリ言語のソースコードでは、オペコードに対応するニーモニックと、オペランドを記述する。たとえば先述の、

    MOV AL, 61

    は、命令「MOV」と、2つのオペランド「AL」と「61」からなり、
    と変換される。オペランドの個数は命令によって異なる。典型的には、オペランドは0以上の'''ソース'''と1つの'''デスティネーション'''からなり、ソースには定数・レジスタ・メモリのいずれか、ディスティネーションにはレジスタ・メモリのいずれかを指定する。プロセッサは、ソース部分に記述されたデータを用いて、オペコードで指定された命令を実行し、その結果をデスティネーションに格納する。上の例では、61がソースでALがデスティネーションに格納する。オペランドの記述順序は、上の例では「デスティネーション, ソース」だが、「ソース, デスティネーション」の順に書くアセンブリ言語もある。
    次のエントリ[ アセンブラとコンパイラ ]

    アセンブラとコンパイラ

    多くのコンパイラは、いったんコードをアセンブリ言語で出力してからアセンブラに通す。その意味ではアセンブリ言語は、目に見えない形ではあるが最も利用頻度の高いプログラミング言語といえる。

    一部の高級言語のコンパイラでは、インラインアセンブラを使うことで、高級言語のソースの中にアセンブリ言語による記述を含めることができる。最小限のアセンブリ言語の知識で書くことができ、プログラムで実行時間の多くを占める部分をインラインアセンブラによる記述に置き換えることで、全体をアセンブリ言語で書いたプログラムに近い実行速度を実現できることもあるが、特定のCPUのアーキテクチャに依存する記述となるので互換性や移植性は大きく損なわれる。

    分割コンパイルで作成するプログラムの一部のモジュールをアセンブリ言語で書くこともある。この場合、コンパイラの呼出規約にしたがってアセンブリ言語のプロシージャを書き、コンパイラが生成したオブジェクトライブラリと、アセンブラが生成したそれらを、対応したリンカで結合する。
    次のエントリ[ 主なアセンブラ ]

    出典:フリー百科事典『ウィキペディア(Wikipedia)』

    別のワードで検索!
    まずは検索→

    トレンドマガジン [マグゥ]でアセンブリ言語を検索
    アセンブリ言語

    アセンブリ言語
    といえば…

    アセンブリ言語の記事

    2月19日「PICマイコン電子工作講座1」:液晶表示器で表示する温湿度計の製作(再)PICマイコン電子工作講座3:タイマ&メトロノームの製作(再)【アプリ開発者名鑑8】代表アプリ『Calqum』 @cocopon さんのアンケート回答♪ #devunq8タイでも恋、を読み物風にアセンブリをやってみよう! 0x100
    人気の話題TOP10

    [2012/2/15 21:17更新]
    1時間前:1位(622pt)
    1時間前:圏外(600pt)
    泰葉
    3位 泰葉
    1時間前:圏外(584pt)
    NARUTO 574
    4位 NARUTO 574
    1時間前:圏外(572pt)
    1時間前:圏外(568pt)
    1時間前:圏外(552pt)
    1時間前:圏外(536pt)
    1時間前:圏外(424pt)
    1時間前:圏外(408pt)
    内博貴
    10位 内博貴
    1時間前:7位(402pt)
    続きはこちら
    >>
    ▼おすすめキーワード▼
    ▼人気の話題ランキング▼