アセンブリ言語 とは?ページ内リンク ↓ウィキペディア(Wikipedia)記事 ↓Yahoo!知恵袋アセンブリ言語(アセンブリげんご、assembly language)とは、人間にわかりやすい形で機械語を記述する代表的な低級言語である。CPUが直接実行できる言語は機械語のみであるが、機械語は数字の羅列なので人間には理解しにくい。そこで、機械語を直接記述するのではなく、機械語の意味を表す略語で機械語を記述することで、人間にわかりやすくしたものがアセンブリ言語である。アセンブリ言語の文法はCPUのアーキテクチャに依存するため、高級言語のような移植性はない。 出典: 『ウィキペディア(Wikipedia)』 アセンブリ言語 出典: 『はてなダイアリー』 関連商品
アンドリュー・S. タネンバウム /
最安値(新品): ¥ 7,560
最安値(中古): ¥ 3,115
|
目次 |
機械語は、実行したい計算の内容をCPUの内部構造に依存した非常に単純な操作に分割・変換したものであるため、人間には理解しづらい。機械語を並べながらプログラミングをするのは、人間のプログラマにとっては負担が大きかった。
そこで、機械語そのものを書く代わりに機械語の「意味」に相当する短い記号や単語を並べておき、それを見ながらプログラミングをすることが考えられた。
例えば80x86 CPUの機械語
は「ALレジスタに6116 (97) という数値を格納せよ」という意味であるが、この数列から意味を読み取るのは難しいので、
MOV AL, 61
と書いておく(MASMでの例)。ちなみに、"MOV" は 英単語 "move"(動かす)の略である。
このように、機械語そのものよりも親しみやすい記法でプログラムを書いておいて、プログラムが完成したときにまとめて機械語に変換するのである。
当初、この機械語への変換は人間が手で行っていた。これをハンド・アセンブルと呼ぶ。 しかし、この変換は単に定められた規則に従って記号や単語から機械語を生成するだけなので、この作業をコンピュータに行わせることが考えられた。 そしてアセンブリ言語を与えると、自動的に機械語を出力するプログラムが作られるようになった。このプログラムをアセンブラという。アセンブラの登場当初は、アセンブラで機械語のプログラムを生成することを自動プログラミングと呼んだ。
アセンブリ言語によるプログラミングにおいては、ニーモニックという命令の列を記述する。 ニーモニックは基本的に機械語の命令と対となる語であり、対象となるCPUのアーキテクチャによって異なる。一般にCPUの設計者あるいは製造者によって定義されたニーモニックが標準とされるが、アセンブラの実装によってはこれと異なるニーモニックを用いる場合もある。
プログラムには、機械語と対になる命令文の他に、直接機械語には変換されないアセンブラに対する指示文が含まれる。これを疑似命令といい、ラベルの宣言、セクションの定義、条件アセンブルや繰り返しブロック、マクロなどが含まれる。マクロは、複数のニーモニックを1つの命令文で記述する構文で、マクロを使えるアセンブラをマクロアセンブラという。
また、RISCアーキテクチャ向けのアセンブリ言語では、その命令セットに対応するもの以外のニーモニック(例えば定型的に用いられる複数の命令の組み合わせ)が標準で定義されていて、そのニーモニックを記述することで、動作が同じ命令に変換されたり、複数の命令を組み合わせた形にアセンブルされる。
さらに最近では、パイプライン処理などを最適化するために命令順序を入れ替えたり、ラベルの位置関係によってアドレッシングモードを最適化するアセンブラもあり、必ずしもソーステキストの記述とアセンブルの結果が直接対応するとは限らない。
機械語は、処理の内容であるオペコードと、処理の対象であるオペランドの組み合わせで記述できるよう設計されている。それに従い、ニーモニックもオペコードとオペランドに分けて記述する。たとえば先述のニーモニック
MOV AL, 61
は、オペコード「MOV」と、2つのオペランド「AL」と「61」からなり、
と変換される。オペランドの個数は命令によって異なる。典型的には、オペランドは0以上のソースと1つのデスティネーションからなり、ソースには定数・レジスタ・メモリのいずれか、ディスティネーションにはレジスタ・メモリのいずれかを指定する。プロセッサは、ソース部分に記述されたデータを用いて、ニーモニックに指定された命令を実行し、その結果をデスティネーションに格納する。上の例では、61がソースでALがデスティネーションに格納する。オペランドの記述順序は、上の例では「デスティネーション, ソース」だが、「ソース, デスティネーション」の順に書くアセンブリ言語もある。
多くのコンパイラは、いったんコードをアセンブリ言語で出力してからアセンブラに通す。その意味ではアセンブリ言語は、最も利用頻度の高いプログラミング言語といえる。
一部のコンパイラでは、インライン・アセンブラを使うことで、ソース・コードの一部をアセンブラで書くことができる。最小限のアセンブリ言語の知識で書くことができ、プログラムのほんの数行をインライン・アセンブラ化するだけで、全体をアセンブリ言語で書いたプログラムに近い実行速度を実現できることもあるが、互換性や移植性は大きく損なわれる。
分割コンパイルで作成するプログラムの一部のモジュールをアセンブリ言語で書くこともある。この場合、コンパイラの呼出規約にしたがってアセンブリ言語のプロシージャを書き、コンパイラが生成したオブジェクトやライブラリと、アセンブラが生成したそれらを、対応したリンカで結合する。
表記をニモニックやオペランド等のトークンの並びにする形式の他に、等号や記号を使ってより直感的に扱える物もある。
BASEの表記例は下記の通り(BASE-09)
S[A,B,X,U A=$80 A=A+$C0 S]A,B,X,U,PC
上記の記述は下記のアセンブラ表記に対応する。
PSHS A,B,X,U LDA #$80 ADDA #$C0 PULS A,B,X,U,PC
PageRank5以上の相互リンク
・相互リンクスクエア
(PageRank 5)
・相互リンク インプロス
(PageRank 5)
→便利!NINJA TOOLS
→FC2検索
用語
Wikipedia
YouTube
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() |