アセンブリ言語
[Wikipedia|▼Menu]
MOV EAX, [EBX] ; Move the 4 bytes in memory at the address contained in EBX into EAXMOV [ESI+EAX], CL ; Move the contents of CL into the byte at address ESI+EAX

MOVというニーモニックを使った文は、その内容によってアセンブラが88-8E、A0-A3、B0-B8、C6、C7のいずれかのオペコードに変換するので、プログラマはオペコードを知る必要がないし、オペコードを覚える必要もない[8]
高級言語との違い

アセンブリ言語は低水準プログラミング言語であり、C言語などの高級言語より抽象度が低い。すなわち言語機能(構文や型)が少ない。次の表は「基本的なアセンブリ言語」と高級言語の間にある言語機能差である。

表. アセンブリ言語と高級言語アセンブラ高級言語
レジスタ?-
ジャンプ命令?△[10]
制御構造-?
構造体-?
関数-?
コメント??

この差はあくまで言語機能の差である。「高級言語でのみ可能、アセンブリ言語では不可」という意味ではない。例えばアセンブリ言語に関数構文は存在しないが関数に相当するパターンが存在する(関数プロローグ・エピローグ(英語版))。より正確な言い方をすれば、アセンブラで頻出するパターンを1つの機能として言語仕様に組み込んで抽象度を上げていった言語が高級言語である。
高水準文法

より抽象化され少ないコード量でアセンブラを書くために様々な高水準文法がアセンブリ言語に導入されてきた。現在では高水準化のメインストリームは高級言語に移った一方[11]、目的に応じてアセンブリ言語を選択するユーザー向けに高機能なアセンブリ言語の開発も続いている[12]
マクロ「マクロ (コンピュータ用語)」も参照

アセンブリ言語においてもマクロが利用される。一般的なマクロと同様、高度なアセンブラマクロでは制御構文導入・引数展開・ユーザー定義マクロ適用などが可能である。文字列であるオペコード・ニーモニックはマクロの対象となるため、これを利用して疑似ニーモニックによる記述も可能になる。

例えば、一部のZ80用アセンブラでは、ld hl,bc というマクロ命令を ld l,c と ld h,b という2命令に展開する[13]。メインフレームの時代には、マクロは特定顧客の大規模ソフトウェアシステムのカスタマイズや、メーカーのオペレーティングシステムを顧客の要望に合わせた特注版にするのに使われていた。IBMの VM/CMS、リアルタイムトランザクション処理用アドオン、CICS、ACP(英語版)/TPF[14]などで使われてきた。
制御構造

構造化プログラミングの要素を取り入れたアセンブラもある。最初期には Concept-14 macro set がSystem/360のマクロアセンブラにIF/ELSE/ENDIFなどの制御構造を導入した[15][16]。また8080/Z80プロセッサ向けの A-natural ではブロック構造や命令実行順序の制御が採用された。

また構造化プログラミングとは若干異なるが、キャリーラボBASIC風の文法のアセンブリ言語 BASE を開発した。Z80用のBASE-80とMC6809用のBASE-09がある。BASEの表記例は下記の通り(BASE-09)。S[A,B,X,UA=$80A=A+$C0S]A,B,X,U,PC

上記の記述は下記のアセンブラ表記に対応する。PSHS A,B,X,ULDA #$80ADDA #$C0PULS A,B,X,U,PC
アセンブラ

アセンブル(: assemble)はアセンブリ言語で書かれたプログラムから機械語で書かれたオブジェクトコードへの変換である。具体的には、ニーモニックをオペコードに変換しシンボル名をメモリ位置や他の実体に変換する[6]

アセンブルは比較的単純な規則からなるため、人の手でも実行できる(ハンドアセンブル)。単純な作業を効率良くミス無く行うのはプログラムの得意分野であり、そのようなソフトウェアが開発された。このアセンブリをおこなうプログラムをアセンブラ(: assembler)という。初期にはアセンブリプログラムとも呼ばれた[17]

シンボル名による参照の利用はアセンブラの重要な機能であり、面倒な計算やプログラム修正に伴うアドレスの更新の手間を省くことができる。。また、オブジェクトコードを生成する際、ローダ用情報も併せて生成するアセンブラもある[18]。マクロを含むアセンブリ言語に対応している場合、処理系にはm4のような汎用プロセッサあるいはプロセッサ内蔵アセンブラ(マクロアセンブラ)が利用される[19]ポリモーフィズム継承[8]などをもつ高水準アセンブリ言語に対応したアセンブラは高水準アセンブラ(英語版)と呼ばれる[20]

動作プラットフォーム以外のターゲットプラットフォームを選択できるアセンブラはクロスアセンブラとも呼ばれる(参考: クロスコンパイラ)。メタアセンブラは、アセンブリ言語の文法や意味論を記述したものを入力とし、その言語のためのアセンブラを出力するプログラムである[21]

逆方向の変換、すなわちオブジェクトコードのアセンブリ言語化をおこなうプログラムを逆アセンブラという。
分類

アセンブラは様々な観点から分類できる。パス回数(アセンブル時のソースファイル走査回数)の観点ではワンパスアセンブラマルチパスアセンブラに分類できる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:80 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef