モトローラ MC6800 のアセンブリ言語 げんご のソースコード
アセンブリ言語 げんご (アセンブリげんご、英 えい : assembly language 、アセンブリ )はビット列 びっとれつ 命令 めいれい に対応 たいおう した文字 もじ 列 れつ 命令 めいれい を利用 りよう する低 てい 水準 すいじゅん プログラミング言語 げんご の総称 そうしょう である[ 1] 。
アセンブラ (英 えい : Assembler )またはアセンブラ言語 げんご (英 えい : Assembler Language )とも呼 よ ばれる[ 注 ちゅう 1] [ 2] 。
プロセッサ は機械 きかい 語 ご プログラムを直接 ちょくせつ 読 よ み取 と り実行 じっこう する。しかし人間 にんげん にとってビット列 びっとれつ は直観 ちょっかん 的 てき に理解 りかい しづらいため、機械 きかい 語 ご コーディングは容易 ようい でない。これを解決 かいけつ するために、ビット列 びっとれつ に対応 たいおう する文字 もじ 列 れつ 命令 めいれい (ニーモニック )を利用 りよう するプログラミング言語 げんご の総称 そうしょう がアセンブリ言語 げんご である[ 1] 。
アセンブリ言語 げんご を用 もち いることで、機械 きかい 語 ご 相当 そうとう の低 てい 水準 すいじゅん なコードをより直観 ちょっかん 的 てき に記述 きじゅつ できる。高度 こうど なアセンブリ言語 げんご ではアセンブラに対 たい する命令 めいれい (疑似 ぎじ 命令 めいれい )やマクロ を用 もち いて、より抽象 ちゅうしょう 的 てき な記述 きじゅつ が可能 かのう である[ 注 ちゅう 2] 。パイプライン処理 しょり などを最適 さいてき 化 か するために命令 めいれい 順序 じゅんじょ を入 い れ替 か えたり、ラベルの位置 いち 関係 かんけい によってアドレッシングモードを最適 さいてき 化 か するアセンブラもあり、必 かなら ずしもソーステキストの記述 きじゅつ とアセンブルの結果 けっか が直接 ちょくせつ 対応 たいおう するとは限 かぎ らない。
アセンブリ言語 げんご は機械 きかい 語 ご と強 つよ く結 むす びついているため、各 かく プロセッサ向 む けに仕様 しよう の異 こと なる様々 さまざま な(具体 ぐたい 的 てき な)アセンブリ言語 げんご が存在 そんざい する(「アセンブリ言語 げんご 」は総称 そうしょう である)。同 おな じ命令 めいれい セット に対 たい しても複数 ふくすう のアセンブリ言語 げんご が存在 そんざい しうる(例 れい : GNU アセンブラのgasのインテル プロセッサ用 よう )。
アセンブリ言語 げんご の基本 きほん 文法 ぶんぽう として、1つの命令 めいれい は1つのニーモニック と0個 こ 以上 いじょう のオペランド からなる。プログラム全体 ぜんたい はニーモニック/オペランド列 れつ 、ディレクティブや擬似 ぎじ 命令 めいれい と呼 よ ばれるメタな文 ぶん 、コメント、データで構成 こうせい されている。通常 つうじょう の文 ぶん はオペコードのニーモニックで始 はじ まり、パラメータ(データ、引数 ひきすう )のリストがそれに続 つづ く[ 3] 。多 おお くのアセンブリ言語 げんご はオペランドのアドレスや定数 ていすう をラベル・シンボルで記述 きじゅつ できハードコーディング を避 さ けられる。
アセンブラの開発 かいはつ 者 しゃ によって用語 ようご の使 つか い方 かた に大 おお きな差異 さい があり、文 ぶん の分類 ぶんるい などが異 こと なる。例 たと えば、マシンのニーモニックや拡張 かくちょう ニーモニック以外 いがい は全 すべ て擬似 ぎじ 命令 めいれい と呼 よ ぶ場合 ばあい もある。典型 てんけい 的 てき なアセンブリ言語 げんご は、プログラムの操作 そうさ の定義 ていぎ に使 つか われる命令 めいれい 文 ぶん をニーモニック、データセクション、アセンブリディレクティブの3種類 しゅるい に分類 ぶんるい する。
ニーモニック (英 えい : mnemonic )は処理 しょり 内容 ないよう に応 おう じて各 かく 機械 きかい 語 ご 命令 めいれい に与 あた えられた文字 もじ 列 れつ ・命令 めいれい 語 ご である[ 4] 。機械 きかい 語 ご のオペコード に相当 そうとう する。
ビット列 びっとれつ である機械 きかい 語 ご はその処理 しょり が直観 ちょっかん 的 てき にわからないため、機械 きかい 語 ご コーディングは容易 ようい でない。人間 にんげん がより容易 ようい に機械 きかい 語 ご と同等 どうとう なコードを書 か くため、ビット列 びっとれつ を意味 いみ ある文字 もじ 列 れつ で表現 ひょうげん するニーモニックが発明 はつめい された[ 4] 。例 たと えばX64 機械 きかい 語 ご 0x05
は「整数 せいすう の加算 かさん 」を意味 いみ するのでニーモニック ADD
を対応 たいおう させる。個々 ここ の機械 きかい 語 ご 命令 めいれい には少 すく なくとも1つのニーモニックが対応 たいおう する。
拡張 かくちょう ニーモニック は命令 めいれい の特殊 とくしゅ な用途 ようと をサポートするのに使 つか われることが多 おお く、本来 ほんらい の命令 めいれい の名称 めいしょう からはその用途 ようと が連想 れんそう できないときに使 つか うことが多 おお い。例 たと えば、多 おお くのCPUは明示 めいじ 的 てき にNOP 命令 めいれい を用意 ようい していないが、その用途 ようと に使 つか える命令 めいれい は存在 そんざい する。8086ではxchg ax,ax という命令 めいれい がnop として使 つか えるので、アセンブリ言語 げんご でnop を記述 きじゅつ すると xchg ax,ax という命令 めいれい に変換 へんかん される。逆 ぎゃく アセンブラにもこのあたりを認識 にんしき し、xchg ax,ax をnop に変換 へんかん するものがある。同様 どうよう にIBMのSystem/360 とSystem/370 のアセンブラでは、拡張 かくちょう ニーモニックNOP とNOPR を使用 しよう し、それぞれBC とBCR のマスク0の命令 めいれい に変換 へんかん する。SPARC アーキテクチャでは、拡張 かくちょう ニーモニックをsynthetic instructions と呼 よ んでいる[ 5] 。
命令 めいれい は一般 いっぱん に「オペコード」と0以上 いじょう の「オペランド」で構成 こうせい される。多 おお くの命令 めいれい は1つまたは2つの値 ね を参照 さんしょう する。オペランドには即値 そくち (命令 めいれい 内 ない に置 お かれる値 ね )、レジスタ(暗黙 あんもく のうちに使用 しよう される場合 ばあい もある)、記憶 きおく 装置 そうち 内 ない のデータの位置 いち を示 しめ すアドレスなどがある。「拡張 かくちょう ニーモニック」はオペコードと特定 とくてい オペランドの組合 くみあわ せを表 あらわ すのに使 つか われることが多 おお い。例 たと えば、System/360では、BC命令 めいれい にマスク15を組 く み合 あ わせたものがB 、BC命令 めいれい にマスク0を組 く み合 あ わせたものがNOP という拡張 かくちょう ニーモニックで表 あらわ される。オペランドの順序 じゅんじょ (例 れい : ソースとディスティネーションの前後 ぜんご )は言語 げんご に依 よ る。
オペランド (英 えい : operand 、被 ひ 演算 えんざん 子 こ )は命令 めいれい の対象 たいしょう ・引数 ひきすう である。1つの命令 めいれい では、ニーモニックに続 つづ き0個 こ 以上 いじょう のオペランドが記述 きじゅつ される。オペランドにはソースとデスティネーションの二 に 種類 しゅるい があり、データとして読 よ み取 と られるのがソースで、オペコードで示 しめ された命令 めいれい の実行 じっこう 結果 けっか が格納 かくのう されるのがデスティネーションである。ソースには定数 ていすう ・レジスタ・メモリのいずれか、デスティネーションにはレジスタ・メモリのいずれかを指定 してい する。
データと変数 へんすう を保持 ほじ するデータ要素 ようそ を定義 ていぎ するのに使 つか われる命令 めいれい 文 ぶん がある。データの型 かた 、長 なが さ、境界 きょうかい (アライメント)を定義 ていぎ する。また、そのデータがプログラム外部 がいぶ (別 べつ ファイルでアセンブルされたプログラム)からも利用 りよう 可能 かのう なのか、それともデータセクションを定義 ていぎ したプログラム内 ない でのみ使用 しよう 可能 かのう なのかも定義 ていぎ できる。一部 いちぶ のアセンブラはこれを擬似 ぎじ 命令 めいれい に分類 ぶんるい している。
アセンブリディレクティブは、擬似 ぎじ 命令 めいれい とも呼 よ ばれ、アセンブラがアセンブリ実施 じっし 中 ちゅう に実行 じっこう すべき命令 めいれい となっている[ 6] 。プログラマが入力 にゅうりょく するパラメータによって、異 こと なった形 かたち でアセンブルが行 おこな われるよう指示 しじ することができる。また、プログラムの見 み た目 め を操作 そうさ して、可読 かどく 性 せい と保守 ほしゅ 性 せい を向上 こうじょう させるのにも使 つか われる。例 たと えば、記憶 きおく 装置 そうち の領域 りょういき を予約 よやく し、その初期 しょき 内容 ないよう を指定 してい するディレクティブなどがある。ディレクティブの名称 めいしょう はドットで始 はじ まることが多 おお く、それによって通常 つうじょう のニーモニックと区別 くべつ している。
擬似 ぎじ オペコード(pseudo-opcode)と言 い った場合 ばあい 、オブジェクトコードを実際 じっさい に生成 せいせい するディレクティブのみを指 さ すこともある[ 7] 。
シンボリックアセンブラでは、任意 にんい の名前 なまえ (ラベル またはシンボル)とメモリ位置 いち を対応付 たいおうづ けることができる。通常 つうじょう 、定数 ていすう や変数 へんすう に名前 なまえ をつけることができ、命令 めいれい 文 ぶん ではそれらの位置 いち を名前 なまえ で参照 さんしょう できる。実行 じっこう コードではサブルーチンのエントリポイントと名前 なまえ を関連付 かんれんづ け、サブルーチンを名前 なまえ で呼 よ び出 だ すことができる。サブルーチン内 ない では、分岐 ぶんき 命令 めいれい の分岐 ぶんき 先 さき をラベルで示 しめ すことができる。一部 いちぶ のアセンブラは「ローカルシンボル」をサポートしており、通常 つうじょう のシンボルとは語彙 ごい 的 てき に区別 くべつ する(例 たと えば、"10$"を分岐 ぶんき 先 さき に使用 しよう する、など)。
一部 いちぶ のアセンブラは柔軟 じゅうなん なシンボル管理 かんり を提供 ていきょう しており、複数 ふくすう の名前 なまえ 空間 くうかん を管理 かんり したり、データ構造 こうぞう 内 うち のオフセットを自動的 じどうてき に計算 けいさん したり、リテラル値 ち やアセンブラが実施 じっし した単純 たんじゅん な計算 けいさん 結果 けっか を参照 さんしょう するラベルを割 わ り当 あ てたりすることができる。ラベルは定数 ていすう や変数 へんすう をリロケータブル なアドレスで初期 しょき 化 か するのにも使 つか える。
x86 /IA-32 プロセッサにおいて8ビット即値 そくち をレジスタ に入 い れる命令 めいれい を例 れい にとる。
この命令 めいれい のバイナリコードは 10110 で、その後 ご に3ビットのレジスタを指定 してい する識別子 しきべつし が続 つづ く。AL レジスタの識別子 しきべつし は 000 なので、次 つぎ に示 しめ す機械 きかい 語 ご は AL レジスタに 01100001 というデータをロードする[ 8] 。
10110000 01100001
このバイナリコードを人間 にんげん が読 よ みやすいように十 じゅう 六 ろく 進 しん 法 ほう で表現 ひょうげん すると次 つぎ のようになる。
B0 61
ここで、B0
は「AL に後続 こうぞく の値 ね をコピーする」ことを意味 いみ し、61
は01100001を十 じゅう 六 ろく 進 しん 法 ほう で表 あらわ したもの(十進法 じっしんほう では97)である。インテルのアセンブリ言語 げんご では、この種 たね の命令 めいれい に MOV というニーモニックを割 わ り当 あ てており、セミコロン以下 いか に説明 せつめい 的 てき コメントを添 そ えたアセンブリ言語 げんご での表現 ひょうげん は次 つぎ のようになる。
MOV AL , 61 h ; Load AL with 97 decimal (61 hex)
この場合 ばあい 、定数 ていすう 61Hがソース、レジスタALがデスティネーションに該当 がいとう し、命令 めいれい が実行 じっこう されると、定数 ていすう 61Hが、レジスタALに単純 たんじゅん に格納 かくのう される。これが人間 にんげん にとってはさらに読 よ みやすく覚 おぼ えやすい。
前述 ぜんじゅつ のインテルの MOV のようにデータの転送 てんそう の多 おお くを同一 どういつ の命令 めいれい あるいはニーモニックとする場合 ばあい もあれば、データのコピー/移動 いどう の方向 ほうこう などによって別々 べつべつ の命令 めいれい あるいはニーモニックとする場合 ばあい もある(「メモリからレジスタへの移動 いどう 」を L、「レジスタからメモリへの移動 いどう 」を ST、「レジスタからレジスタへの移動 いどう 」を LR、「即値 そくち をメモリへ移動 いどう 」を MVI など)。(この段落 だんらく では命令 めいれい セットの設計 せっけい の話 はなし とアセンブリ言語 げんご の話 はなし を一緒 いっしょ にしている)
インテルのオペコード 10110000(B0
)は8ビットの値 ね を AL レジスタにコピーするが、10110001(B1
)はCL レジスタにコピーし、10110010(B2
)は DL レジスタにコピーする。これらをアセンブリ言語 げんご で表現 ひょうげん すると次 つぎ のようになる[ 8] 。
MOV AL , 1 h ; Load AL with immediate value 1
MOV CL , 2 h ; Load CL with immediate value 2
MOV DL , 3 h ; Load DL with immediate value 3
MOVの構文 こうぶん には次 つぎ の例 れい のようにさらに複雑 ふくざつ なものもある[ 9] 。
MOV EAX , [ EBX ] ; Move the 4 bytes in memory at the address contained in EBX into EAX
MOV [ 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言語 げんご などの高級 こうきゅう 言語 げんご より抽象 ちゅうしょう 度 ど が低 ひく い。すなわち言語 げんご 機能 きのう (構文 こうぶん や型 かた )が少 すく ない。次 つぎ の表 ひょう は「基本 きほん 的 てき なアセンブリ言語 げんご 」と高級 こうきゅう 言語 げんご の間 あいだ にある言語 げんご 機能 きのう 差 さ である。
この差 さ はあくまで言語 げんご 機能 きのう の差 さ である。「高級 こうきゅう 言語 げんご でのみ可能 かのう 、アセンブリ言語 げんご では不可 ふか 」という意味 いみ ではない。例 たと えばアセンブリ言語 げんご に関数 かんすう 構文 こうぶん は存在 そんざい しないが関数 かんすう に相当 そうとう するパターンが存在 そんざい する(関数 かんすう プロローグ・エピローグ(英語 えいご 版 ばん ) )。より正確 せいかく ない方 いかた をすれば、アセンブラで頻出 ひんしゅつ するパターンを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 , 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
アセンブル (英 えい : assemble )はアセンブリ言語 げんご で書 か かれたプログラムから機械 きかい 語 ご で書 か かれたオブジェクトコード への変換 へんかん である。具体 ぐたい 的 てき には、ニーモニックをオペコード に変換 へんかん しシンボル名 めい をメモリ位置 いち や他 た の実体 じったい に変換 へんかん する[ 6] 。
アセンブルは比較的 ひかくてき 単純 たんじゅん な規則 きそく からなるため、人 ひと の手 て でも実行 じっこう できる(ハンドアセンブル )。単純 たんじゅん な作業 さぎょう を効率 こうりつ 良 よ くミス無 な く行 おこな うのはプログラムの得意 とくい 分野 ぶんや であり、そのようなソフトウェアが開発 かいはつ された。このアセンブリをおこなうプログラムをアセンブラ (英 えい : assembler )という。初期 しょき にはアセンブリプログラムとも呼 よ ばれた[ 17] 。
シンボル名 めい による参照 さんしょう の利用 りよう はアセンブラの重要 じゅうよう な機能 きのう であり、面倒 めんどう な計算 けいさん やプログラム修正 しゅうせい に伴 ともな うアドレスの更新 こうしん の手間 てま を省 はぶ くことができる。また、オブジェクトコードを生成 せいせい する際 さい 、ローダ用 よう 情報 じょうほう も併 あわ せて生成 せいせい するアセンブラもある[ 18] 。マクロを含 ふく むアセンブリ言語 げんご に対応 たいおう している場合 ばあい 、処理 しょり 系 けい にはm4 のような汎用 はんよう プロセッサあるいはプロセッサ内蔵 ないぞう アセンブラ(マクロアセンブラ )が利用 りよう される[ 19] 。ポリモーフィズム 、継承 けいしょう [ 8] などをもつ高水準 こうすいじゅん アセンブリ言語 げんご に対応 たいおう したアセンブラは高水準 こうすいじゅん アセンブラ(英語 えいご 版 ばん ) と呼 よ ばれる[ 20] 。
動作 どうさ プラットフォーム以外 いがい のターゲットプラットフォームを選択 せんたく できるアセンブラはクロスアセンブラ とも呼 よ ばれる(参考 さんこう : クロスコンパイラ )。メタアセンブラ は、アセンブリ言語 げんご の文法 ぶんぽう や意味 いみ 論 ろん を記述 きじゅつ したものを入力 にゅうりょく とし、その言語 げんご のためのアセンブラを出力 しゅつりょく するプログラムである[ 21] 。
逆 ぎゃく 方向 ほうこう の変換 へんかん 、すなわちオブジェクトコードのアセンブリ言語 げんご 化 か をおこなうプログラムを逆 ぎゃく アセンブラ という。
アセンブラは様々 さまざま な観点 かんてん から分類 ぶんるい できる。パス回数 かいすう (アセンブル時 じ のソースファイル走査 そうさ 回数 かいすう )の観点 かんてん ではワンパスアセンブラ とマルチパスアセンブラ に分類 ぶんるい できる。
ワンパスアセンブラ
ソースコードを1回 かい だけパスするアセンブラ。定義 ていぎ される前 まえ にシンボルが使 つか われているとオブジェクトコードの最後 さいご に "errata" を置 お く必要 ひつよう があり、リンカ またはローダ が未 み 定義 ていぎ シンボルが使 つか われていた位置 いち にあるプレースホルダーを書 か き換 か える。あるいは、未定義 みていぎ なシンボルを使用 しよう するとエラーになる。
マルチパスアセンブラ
最初 さいしょ のパスで全 ぜん シンボルとその値 ね の表 ひょう を作成 さくせい し、その表 ひょう を使 つか ってその後 ご のパスでコードを生成 せいせい する。
どちらの場合 ばあい も、アセンブラは最初 さいしょ のパスで各 かく 命令 めいれい のサイズを確定 かくてい させる必要 ひつよう があり、それによって後 のち に出現 しゅつげん するシンボルのアドレスを計算 けいさん する。命令 めいれい のサイズは後 ご から定義 ていぎ されるオペランドの型 かた や距離 きょり に依存 いぞん することがあるため、アセンブラは最初 さいしょ のパスでは悲観 ひかん 的 てき な見積 みつ もりをし、必要 ひつよう に応 おう じてその後 ご のパスまたは errata にて1つ以上 いじょう のNOP 命令 めいれい (何 なに もしない命令 めいれい )を挿入 そうにゅう してすき間 ま を埋 う める必要 ひつよう がある。最適 さいてき 化 か を行 おこな うアセンブラでは、最初 さいしょ の悲観 ひかん 的 てき コードをその後 ご のパスで稠密 ちゅうみつ なコードに書 か き換 か えてアドレスの再 さい 計算 けいさん を行 おこな うことがある。
もともとワンパスアセンブラは高速 こうそく であるためよく使 つか われていた。マルチパス動作 どうさ をするには、磁気 じき テープ を巻 ま き戻 もど したりパンチカード のデッキをセットし直 なお して読 よ み込 こ む必要 ひつよう があったためである。現代 げんだい のコンピュータではマルチパスであってもそのような遅延 ちえん は生 しょう じない。マルチパスアセンブラは errata がないため、リンク処理 しょり (アセンブラが直接 ちょくせつ 実行 じっこう コードを生成 せいせい する場合 ばあい はローダ の処理 しょり )が高速 こうそく 化 か される[ 22] 。
Unix系 けい システムでは、アセンブラを as と呼 よ ぶのが一般 いっぱん 的 てき だが、実体 じったい はそれぞれのOSで異 こと なる。GNUアセンブラ を使 つか っているものが多 おお い。
同 おな じ系統 けいとう のプロセッサであっても、複数 ふくすう のアセンブリ言語 げんご の方言 ほうげん が存在 そんざい する。アセンブラによっては他 た の方言 ほうげん のアセンブリ言語 げんご も使用 しよう 可能 かのう な場合 ばあい がある。例 たと えば、TASM はMASM 用 よう コードを入力 にゅうりょく として受 う け付 つ け可能 かのう だが、逆 ぎゃく は不可能 ふかのう である。FASM (英語 えいご 版 ばん ) とNASM は文法 ぶんぽう がほぼ同 おな じだが、サポートしているマクロが異 こと なるため、相互 そうご の翻訳 ほんやく は困難 こんなん である。いずれも基本 きほん 機能 きのう は同 おな じだが、追加 ついか 機能 きのう に差異 さい がある[ 23] 。
アセンブリ言語 げんご は、ごく単純 たんじゅん なものまで含 ふく めれば、プログラム内蔵 ないぞう 方式 ほうしき のコンピュータの最初 さいしょ 期 き の1940年代 ねんだい から存在 そんざい している。世界 せかい で最初 さいしょ に実用 じつよう 的 てき に稼働 かどう したノイマン型 がた 電子 でんし 計算 けいさん 機 き とされるEDSAC (1949) の initial orders (現代 げんだい の用語 ようご ではブート ローダーに相当 そうとう するもの)は、テープにパンチされた十 じゅう 進 しん によるアドレスを、内部 ないぶ 表現 ひょうげん の二 に 進 しん に変換 へんかん するなどの機能 きのう を持 も っていた(命令 めいれい については、「1文字 もじ のニーモニック」に見 み えるかもしれないが、それは実際 じっさい には同機 どうき の機械 きかい 語 ご そのものである)[ 24] 。ナサニエル・ロチェスター は1954年 ねん に IBM 701 用 よう アセンブラを書 か いている。1955年 ねん 、Stan Poley が IBM 650 用言 ようげん 語 ご アセンブリSOAP (Symbolic Optimal Assembly Program) を開発 かいはつ した[ 25] 。
コンピュータの歴史 れきし の初期 しょき には、このような、プログラムによって機械 きかい 語 ご プログラムを生成 せいせい することを自動 じどう プログラミング と呼 よ んだ。
ドナルド・ギリース は、まだ発明 はつめい されていなかったアセンブラを開発 かいはつ 中 ちゅう に、フォン・ノイマン から開発 かいはつ を即座 そくざ に止 と めるように言 い われた、という1950年代 ねんだい 初期 しょき ならではの逸話 いつわ がある。当時 とうじ は、人間 にんげん が手作業 てさぎょう でもできるような瑣末 さまつ な仕事 しごと をコンピュータにさせるような時代 じだい が来 く るとは考 かんが えられておらず、単 たん に時間 じかん の無駄 むだ だとノイマンは考 かんが えたのである。
歴史 れきし 的 てき には多数 たすう のプログラム(OSやアプリケーション)がアセンブリ言語 げんご だけで書 か かれてきた。ALGOL の方言 ほうげん であるESPOL で書 か かれた Burroughs MCP (1961) が登場 とうじょう するまで、オペレーティングシステムはアセンブリ言語 げんご で書 か くのが普通 ふつう だった。IBM のメインフレーム 用 よう ソフトウェアの多 おお くはアセンブリ言語 げんご で書 か かれていた。COBOL 、FORTRAN 、PL/I などが取 と って代 か わっていったが、1990年代 ねんだい になってもアセンブリ言語 げんご のコードベースを保守 ほしゅ し続 つづ けていた大 だい 企業 きぎょう も少 すく なくない。
初期 しょき のマイクロコンピュータ でも同様 どうよう に広 ひろ く用 もち いられた。これは、リソースの制約 せいやく が厳 きび しく、メモリやディスプレイのアーキテクチャが特殊 とくしゅ だったからである。また、マイクロコンピュータ向 む けの高水準 こうすいじゅん 言語 げんご のコンパイラがなかったという面 めん も重要 じゅうよう である。また、初期 しょき のマイクロコンピュータのユーザは趣味 しゅみ としての使用 しよう が主 おも であり、何 なん でも自前 じまえ で作 つく るという精神 せいしん もそれに影響 えいきょう していたと見 み られる。
1980年代 ねんだい から1990年代 ねんだい にかけて、ホームコンピュータ (ZX Spectrum 、コモドール64 、Amiga 、Atari ST など)でもアセンブリ言語 げんご がよく使 つか われていた。というのもそれらのBASICは性能 せいのう が低 ひく く、ハードウェアの全 ぜん 機能 きのう を利用 りよう できないことが多 おお かったためである。例 たと えば、Amigaにはフリーウェア のアセンブリ言語 げんご 統合 とうごう 開発 かいはつ 環境 かんきょう ASM-One assembler があり、Microsoft Visual Studio に匹敵 ひってき する機能 きのう を備 そな えていた。
Don French が開発 かいはつ した VIC-20 用 よう アセンブラは 1,639 バイトという小 ちい ささで、世界一 せかいいち 小 ちい さいアセンブラと言 い われている。アドレスをシンボルで表現 ひょうげん でき、各種 かくしゅ アドレス計算 けいさん (四則 しそく 演算 えんざん 、AND、OR、冪 べき 乗 じょう など)が可能 かのう だった[ 26] 。
1980年代 ねんだい のビジネスソフトでは、例 たと えば表 おもて 計算 けいさん ソフト Lotus 1-2-3 などはアセンブリ言語 げんご で書 か かれていた。日本 にっぽん では松 まつ などが該当 がいとう [ 27] する。
1990年代 ねんだい に入 はい っても、コンシューマーゲーム の多 おお くはアセンブリ言語 げんご でプログラムが書 か かれていた。しかしゲーム内容 ないよう が複雑 ふくざつ 化 か し、プログラムの規模 きぼ が増大 ぞうだい するにつれて、アセンブラでは開発 かいはつ が困難 こんなん となり、高水準 こうすいじゅん 言語 げんご による開発 かいはつ が主流 しゅりゅう となっていった。例 たと えばプレイステーション ではGCC が公式 こうしき のSDKに含 ふく まれていて、標準 ひょうじゅん の開発 かいはつ 言語 げんご はC言語 げんご であった[ 28] [ 29] 。この時代 じだい のゲーム機 き は3次元 じげん コンピュータグラフィックス の積極 せっきょく 的 てき な導入 どうにゅう が始 はじ まっており、ハードウェア性能 せいのう も向上 こうじょう したことから、C言語 げんご による開発 かいはつ も十分 じゅうぶん 可能 かのう となったが、コンパイラの最適 さいてき 化 か 能力 のうりょく が未 み 成熟 せいじゅく だったこともあいまって、ハードウェア性能 せいのう を最大限 さいだいげん 引 ひ き出 だ すにはアセンブリ言語 げんご を駆使 くし した手動 しゅどう 最適 さいてき 化 か や細 こま かなチューニングが必要 ひつよう となることも多 おお かった。セガサターン の最高 さいこう 性能 せいのう を引 ひ き出 だ してプレイステーション に対抗 たいこう するには、アセンブリ言語 げんご を使 つか うしかなかったと述 の べていた業界 ぎょうかい 関係 かんけい 者 しゃ もいた[ 30] 。ただし一方 いっぽう で、ファミコン 時代 じだい すでにメタルスレイダーグローリー やスーパーファミコン のMOTHER 2 ・シムシティ [ 31] 、プレイステーションのクラッシュ・バンディクー で[ 32] 、開発 かいはつ の一部 いちぶ にLISP が使 つか われていたという話 はなし もあり、当時 とうじ のコンシューマーゲームの分野 ぶんや ではアセンブリ言語 げんご やC言語 げんご が全 すべ てだったというわけではない。
2000年代 ねんだい 初頭 しょとう 、マイクロソフト は原始 げんし 的 てき なプログラマブルシェーダー に対応 たいおう したDirectX (Direct3D ) 8.0をリリースした。このDirect3D 8.0におけるシェーダープログラムは、グラフィックスハードウェアに依存 いぞん しない中 なか 間 あいだ 言語 げんご (バイトコード)を出力 しゅつりょく することのできるアセンブリ言語 げんご (シェーダーアセンブラ)を使用 しよう して記述 きじゅつ するものだった。2001年 ねん には世界 せかい で初 はじ めてプログラマブルシェーダーに対応 たいおう したコンシューマーゲーム機 き として初代 しょだい Xbox が登場 とうじょう したが、このXboxに搭載 とうさい されていたグラフィックスAPIもDirect3D 8.x相当 そうとう のカスタマイズ版 ばん [ 33] であり、CPU上 じょう で実行 じっこう するホストプログラム(ゲームアプリケーション本体 ほんたい のコード)はC++ を使 つか って記述 きじゅつ する一方 いっぽう 、GPU 上 うえ で実行 じっこう するシェーダープログラムの記述 きじゅつ にはアセンブラを使用 しよう していた。のちにHLSL やCg (C for Graphics) といった高水準 こうすいじゅん シェーディング言語 げんご が開発 かいはつ され、HLSLに対応 たいおう したDirect3D 9.0以降 いこう はシェーダープログラムも高水準 こうすいじゅん 言語 げんご を利用 りよう して記述 きじゅつ するようになった。Direct3D 10のシェーダーモデル4.0以降 いこう は、シェーダーアセンブラではなくHLSLの使用 しよう が必須 ひっす となっている[ 34] 。
現在 げんざい の最適 さいてき 化 か コンパイラ は人手 ひとで で書 か かれたアセンブリ言語 げんご のコードと同等 どうとう の性能 せいのう を発揮 はっき すると言 い われている[ 35] (例外 れいがい もある[ 36] [ 37] [ 38] )。最近 さいきん [いつ? ] のプロセッサやメモリサブシステムは複雑 ふくざつ 化 か してきたため、コンパイラでもアセンブリ言語 げんご でも効果 こうか 的 てき な最適 さいてき 化 か がますます困難 こんなん になってきている[ 39] [ 40] 。さらにプロセッサが高性能 こうせいのう 化 か し律 りつ 速 そく が入出力 にゅうしゅつりょく やページング へ移 うつ ることで、コーディングが性能 せいのう 向上 こうじょう に貢献 こうけん するケースは以前 いぜん より少 すく なくなっている。
一方 いっぽう C++ やC# のような、Cよりもさらに高水準 こうすいじゅん の言語 げんご が主流 しゅりゅう になってからも、コンパイラが出力 しゅつりょく したアセンブリコードを解析 かいせき して最適 さいてき 化 か やチューニングの余地 よち を探 さぐ るといった手法 しゅほう は一般 いっぱん 的 てき に行 おこ なわれている[ 41] 。
低 てい 水準 すいじゅん 言語 げんご であるアセンブラはC言語 げんご などの高級 こうきゅう 言語 げんご と異 こと なる領域 りょういき で利用 りよう される。
アセンブラを用 もち いる目的 もくてき として以下 いか が挙 あ げられる。
高速 こうそく : レジスタ利用 りよう やループ展開 てんかい の最適 さいてき 化 か
省 しょう フットプリント: ランタイムや標準 ひょうじゅん ライブラリの排除 はいじょ
リアルタイム(時間 じかん 的 てき 正確 せいかく 性 せい ): GC スパイク、ページフォルト 、プリエンプション の排除 はいじょ
ハードウェア操作 そうさ
高級 こうきゅう 言語 げんご 非 ひ 対応 たいおう 命令 めいれい の利用 りよう
挙動 きょどう 理解 りかい
アセンブリ言語 げんご が用 もち いられる事例 じれい として以下 いか が挙 あ げられる。
組 く み込 こ みシステム : 省 しょう フットプリントでのハードウェア操作 そうさ が目的 もくてき
電話機 でんわき のファームウェア
自動車 じどうしゃ の燃料 ねんりょう ・点火 てんか システム
センサー
デバイスドライバ や割 わ り込 こ みハンドラ 、ブートコード 、BIOS 、POST
ハードウェアないしはファームウェアの呼 よ び出 だ し規約 きやく をアセンブリ言語 げんご によりカーネルやドライバにて使用 しよう している高級 こうきゅう 言語 げんご の規約 きやく へ変換 へんかん することにより、主要 しゅよう な機能 きのう を高級 こうきゅう 言語 げんご で実装 じっそう することができる。
暗号 あんごう 化 か : 高級 こうきゅう 言語 げんご 非 ひ 対応 たいおう 命令 めいれい の使用 しよう が目的 もくてき
数値 すうち 計算 けいさん : 高速 こうそく 化 か が目的 もくてき
リアルタイムシステム : リアルタイム性 せい が目的 もくてき
フライ・バイ・ワイヤ システム: 航空 こうくう 航法 こうほう システムの一種 いっしゅ 。テレメトリ を厳密 げんみつ な制限 せいげん 時間 じかん 内 ない に解釈 かいしゃく して対応 たいおう する必要 ひつよう
医療 いりょう 装置 そうち
暗号 あんごう アルゴリズムは常 つね に厳密 げんみつ に同 おな じ時間 じかん で実行 じっこう することで、タイミング攻撃 こうげき を防 ふせ ぐ。
高度 こうど なセキュリティが要求 ようきゅう され、環境 かんきょう を完全 かんぜん に制御 せいぎょ する必要 ひつよう がある場合 ばあい 。
監視 かんし ・トレース・デバッグ のための命令 めいれい セットシミュレータ で、追加 ついか のオーバーヘッドを最小 さいしょう に保 たも ちたい場合 ばあい 。
リバースエンジニアリング : 挙動 きょどう 理解 りかい が目的 もくてき
デバッグ: 例 れい - コンパイラ最適 さいてき 化 か の確認 かくにん
ソフトウェア改造 かいぞう : 例 れい - 商用 しょうよう コンピュータゲーム の改造 かいぞう
ハッキング: 例 れい - コピープロテクト 解除 かいじょ
学習 がくしゅう : コンピュータの理解 りかい
自己 じこ 書 か き換 か えコード
コードサイズの上限 じょうげん に制限 せいげん がある環境 かんきょう
ブートセクタ に格納 かくのう するブートローダ 。例 れい として、MBR では最大 さいだい 446バイト。
トラップ処理 しょり やシグナル ハンドラ起動 きどう などのために、カーネルがプロセスのアドレス空間 くうかん へ見 み せるコード。vDSO を用 もち い、プロセスからはシェアードオブジェクトを読 よ み込 こ んだように見 み せる実装 じっそう が多 おお い。
見 み せるコードの範囲 はんい を正確 せいかく に把握 はあく する必要 ひつよう があるため、コードのエントリだけでなく終了 しゅうりょう 部 ぶ にもラベルを与 あた える。アセンブリ言語 げんご では容易 ようい だが、高級 こうきゅう 言語 げんご では一般 いっぱん に不要 ふよう な機能 きのう なのでサポートされていない。
元来 がんらい はユーザモード用 よう のスタック上 じょう にカーネルからコードをコピーして実行 じっこう していた。欠点 けってん として、スタックはユーザモードでの書 か き込 こ みが禁止 きんし できず、スタック上 じょう でのコード実行 じっこう がセキュリティホールとしてしばしば利用 りよう されたことから、実装 じっそう 方法 ほうほう の変更 へんこう が進 すす められている。
オブジェクトファイル に依存 いぞん した機能 きのう
コンパイラが通常 つうじょう は使用 しよう しないセクション等 とう にシンボルを定義 ていぎ することができる。例 れい として、Linuxカーネル ではモジュール へ公開 こうかい するシンボルをマクロEXPORT_SYMBOL
(ないしはその派生 はせい )[ 43] へ与 あた える。このマクロは、インラインアセンブリを用 もち いてオブジェクトファイルのセクション.export_symbol
へシンボルの情報 じょうほう を追加 ついか し、モジュールローダがシンボル解決 かいけつ にて使用 しよう できるようにする。マクロの内容 ないよう はCPUアーキテクチャには依存 いぞん せず、その定義 ていぎ もCPUアーキテクチャに依存 いぞん しないヘッダファイル(include/linux/export.h
)[ 注 ちゅう 3] にあるが、C言語 げんご を含 ふく め高級 こうきゅう 言語 げんご のみでの実装 じっそう が難 むずか しく、アセンブリが適 てき している。[ 注 ちゅう 4]
なお一方 いっぽう で、最近 さいきん [いつ? ] のコンピュータの命令 めいれい セットはその多 おお くはどれも似 に ている。したがって、どれか1つのアセンブリ言語 げんご を学 まな ぶだけで、基本 きほん 概念 がいねん 、どんなときにアセンブリ言語 げんご を使用 しよう するのが適 てき しているか、高水準 こうすいじゅん 言語 げんご から効率 こうりつ 的 てき な実行 じっこう コードを生成 せいせい する方法 ほうほう をある程度 ていど は学習 がくしゅう できる[ 44] 。
高水準 こうすいじゅん 言語 げんご の処理 しょり 系 けい の呼出 よびだし 規約 きやく (言語 げんご 処理 しょり 系 けい ではなくOSやハードウェアベンダ側 がわ で共通 きょうつう 化 か している場合 ばあい もある)に従 したが うことで、高水準 こうすいじゅん 言語 げんご と相互 そうご にコードを呼 よ び出 だ すことができる。後述 こうじゅつ のインラインアセンブラ などにより同一 どういつ のモジュールに埋 う め込 こ むこともできれば、別 べつ モジュールとしてリンケージエディタ でリンクすることもある。
多 おお くのコンパイラは、機械 きかい 語 ご を直接 ちょくせつ 生成 せいせい するのではなく、アセンブリ言語 げんご のコードを生成 せいせい し、それをアセンブラに通 とお している。人間 にんげん によるデバッグ や最適 さいてき 化 か などに便利 べんり である(機械 きかい による最適 さいてき 化 か には、内部 ないぶ 表現 ひょうげん を使 つか ったほうが便利 べんり なので、あまり意味 いみ がない)。その意味 いみ ではアセンブリ言語 げんご は、目 め に見 み えない形 かたち ではあるが最 もっと も利用 りよう 頻度 ひんど の高 たか いプログラミング言語 げんご といえるという主張 しゅちょう もあるが、その意味 いみ では機械 きかい 語 ご が絶対 ぜったい 的 てき に最 もっと も利用 りよう 頻度 ひんど の高 たか いプログラミング言語 げんご である。
インラインアセンブラ のある言語 げんご ないし処理 しょり 系 けい では、ソース中 ちゅう にアセンブリ言語 げんご による記述 きじゅつ を含 ふく めることができる。例 たと えばLinuxカーネル ではその利用 りよう が多 おお い。アセンブリ言語 げんご と同様 どうよう の利点 りてん が得 え られるかわりに、やはりアセンブリ言語 げんご と同様 どうよう にプログラミング言語 げんご を使 つか う利点 りてん (移植 いしょく 性 せい など)が失 うしな われる。
^ IBMはSystem/360 から2011年 ねん 現在 げんざい まで一貫 いっかん してアセンブラ言語 げんご (Assembler Language)と 呼 よ んでいる。例 れい :IBM High Level Assembler
^ MIPSのアセンブラの一部 いちぶ など、(分岐 ぶんき 命令 めいれい のターゲットアドレスの先頭 せんとう にある機械 きかい 語 ご 命令 めいれい を対象 たいしょう として)その分岐 ぶんき 命令 めいれい の遅延 ちえん スロットへの移動 いどう を(副作用 ふくさよう がない場合 ばあい に)アセンブラ疑似 ぎじ 命令 めいれい (.set bopt) の指示 しじ に応 おう じて行 おこな うものもある。OPTASM(SLR社 しゃ )という最適 さいてき 化 か アセンブラもあった。
^ 厳密 げんみつ にはCPUのビット幅 はば に依存 いぞん するが、マクロ定義 ていぎ はこれを条件 じょうけん 付 つ きコンパイルによりカバーしている。
^ GCC等 とう 、C言語 げんご への拡張 かくちょう によりシンボルへのセクション指定 してい が可能 かのう なコンパイラはあるが、コンパイラへの強 つよ い依存 いぞん 性 せい が生 しょう じる。アセンブリ言語 げんご であれば、およそセクションをサポートしたオブジェクトファイルが出力 しゅつりょく できるならばセクションの指定 してい は何 なん らかの手段 しゅだん で実装 じっそう 可能 かのう となる。
^ a b "ニモニックによって表 あらわ したプログラムをアセンブリ言語 げんご (assembly language)プログラムと呼 よ ぶ。" 伊藤 いとう . 機械 きかい 語 ご とアセンブリ言語 げんご . 埼玉大学 さいたまだいがく , 電気 でんき 電子 でんし 物理 ぶつり 工学 こうがく 実験 じっけん III. 2022-12-25閲覧 えつらん .
^ Stroustrup, Bjarne, The C++ Programming Language , Addison-Wesley, 1986, ISBN 0-201-12078-X : "C++ was primarily designed so that the author and his friends would not have to program in assembler, C, or various modern high-level languages." - assembler を assembly language の意味 いみ で使 つか っている例 れい
^ Intel Architecture Software Developer’s Manual, Volume 2: Instruction Set Reference . INTEL CORPORATION. (1999). http://download.intel.com/design/PentiumII/manuals/24319102.PDF 2010年 ねん 11月18日 にち 閲覧 えつらん 。
^ a b "各 かく 命令 めいれい に、人間 にんげん にとって意味 いみ があり、その命令 めいれい が行 おこな う処理 しょり を類推 るいすい できる文字 もじ 列 れつ を対応付 たいおうづ ける。この文字 もじ 列 れつ をニモニック(mnemonic)と呼 よ ぶ。" 伊藤 いとう . 機械 きかい 語 ご とアセンブリ言語 げんご . 埼玉大学 さいたまだいがく , 電気 でんき 電子 でんし 物理 ぶつり 工学 こうがく 実験 じっけん III. 2022-12-25閲覧 えつらん .
^ “The SPARC Architecture Manual, Version 8 ”. SPARC, International (1992年 ねん ). 2011年 ねん 12月 がつ 10日 とおか 時点 じてん のオリジナル よりアーカイブ。2012年 ねん 10月 がつ 27日 にち 閲覧 えつらん 。
^ a b David Salomon (1993). Assemblers and Loaders
^ Microsoft Corporation. “MASM: Directives & Pseudo-Opcodes ”. 2011年 ねん 3月 がつ 19日 にち 閲覧 えつらん 。
^ a b c d Intel Architecture Software Developer’s Manual, Volume 2: Instruction Set Reference . INTEL CORPORATION. (1999). pp. 442 and 35. http://download.intel.com/design/PentiumII/manuals/24319102.PDF 2010年 ねん 11月18日 にち 閲覧 えつらん 。
^ Evans, David (2006年 ねん ). “x86 Assembly Guide ”. University of Virginia. 2010年 ねん 11月18日 にち 閲覧 えつらん 。
^ goto
文 ぶん が存在 そんざい する言語 げんご もあるが、限定 げんてい 利用 りよう が推奨 すいしょう される
^ Answers.com. “assembly language: Definition and Much More from Answers.com ”. 2008年 ねん 6月 がつ 19日 にち 閲覧 えつらん 。
^ NESHLA: The High Level, Open Source, 6502 Assembler for the Nintendo Entertainment System
^ Z80 Op Codes for ZINT
^ コンピュータ予 よ 約 やく システム (CRS) やクレジットカード会社 かいしゃ で使 つか われているトランザクションOS
^ Dr. H.D. Mills (1970) 提案 ていあん 、Marvin Kessler 実装 じっそう in IBM連邦 れんぽう 政府 せいふ システム部門 ぶもん
^ “Concept 14 Macros ”. MVS Software. 2009年 ねん 5月 がつ 25日 にち 閲覧 えつらん 。
^ Saxon, James, and Plette, William, Programming the IBM 1401 , Prentice-Hall, 1962, LoC 62-20615. - assembly program という用語 ようご を使 つか っている例 れい
^ J.DONOVAN, JOHN (1972). systems programming . pp. 59. ISBN 0-07-085175-1
^ bit 編集 へんしゅう 部 ぶ 『bit 単語 たんご 帳 ちょう 』共立 きょうりつ 出版 しゅっぱん 、1990年 ねん 8月 がつ 15日 にち 、8頁 ぺーじ 。ISBN 4-320-02526-1 。
^ Hyde, Randall. "Chapter 12 – Classes and Objects". The Art of Assembly Language, 2nd Edition. No Starch Press. © 2010.
^ (John Daintith, ed.) A Dictionary of Computing: "meta-assembler"
^ Beck, Leland L. (1996). “2”. System Software: An Introduction to Systems Programming . Addison Wesley
^ Randall Hyde. “Which Assembler is the Best? ”. 2007年 ねん 10月 がつ 18日 にち 時点 じてん のオリジナル よりアーカイブ。2007年 ねん 10月 がつ 19日 にち 閲覧 えつらん 。
^ Salomon. Assemblers and Loaders . p. 7. http://www.davidsalomon.name/assem.advertis/asl.pdf 2012年 ねん 1月 がつ 17日 にち 閲覧 えつらん 。
^ “The IBM 650 Magnetic Drum Calculator ”. 2012年 ねん 1月 がつ 17日 にち 閲覧 えつらん 。
^ Jim Lawless (2004年 ねん 5月 がつ 21日 にち ). “Speaking with Don French : The Man Behind the French Silk Assembler Tools ”. 2008年 ねん 8月 がつ 21日 にち 時点 じてん のオリジナル よりアーカイブ。2008年 ねん 7月 がつ 25日 にち 閲覧 えつらん 。
^ 松 まつ --- 事実 じじつ 上 じょう 最初 さいしょ のパソコン用 よう 日本語 にほんご ワープロソフト
^ Toolchain, libraries and headers relationship - PlayStation Development Network
^ What were PS1 and N64 games written in? : gamedev
^ “SegaBase Volume 6 - Saturn ”. Eidolon's Inn (2008年 ねん 1月 がつ 10日 とおか ). 2014年 ねん 7月 がつ 2日 にち 時点 じてん のオリジナル よりアーカイブ。2013年 ねん 6月 がつ 27日 にち 閲覧 えつらん 。
^ Lispによるリターゲッタブルコードジェネレータの実装 じっそう (PDF) Archived 2008年 ねん 8月 がつ 20日 はつか , at the Wayback Machine .
^ OOエンジニアの輪 わ ! ~ 第 だい 21 回 かい 川合 かわい 史朗 しろう さんの巻 まき ~ | オブジェクトの広場 ひろば
^ NVIDIA Xbox GPU Specs | TechPowerUp GPU Database
^ Using Shaders in Direct3D 10 - Win32 apps | Microsoft Docs
^ Rusling, David A.. “The Linux Kernel ”. 2012年 ねん 3月 がつ 11日 にち 閲覧 えつらん 。
^ “Writing the Fastest Code, by Hand, for Fun: A Human Computer Keeps Speeding Up Chips ”. New York Times, John Markoff (2005年 ねん 11月28日 にち ). 2010年 ねん 3月 がつ 4日 にち 閲覧 えつらん 。
^ “Bit-field-badness ”. hardwarebug.org (2010年 ねん 1月 がつ 30日 にち ). 2010年 ねん 2月 がつ 5日 にち 時点 じてん のオリジナル よりアーカイブ。2010年 ねん 3月 がつ 4日 にち 閲覧 えつらん 。
^ “GCC makes a mess ”. hardwarebug.org (2009年 ねん 5月 がつ 13日 にち ). 2010年 ねん 3月 がつ 16日 にち 時点 じてん のオリジナル よりアーカイブ。2010年 ねん 3月 がつ 4日 にち 閲覧 えつらん 。
^ Randall Hyde. “The Great Debate ”. 2008年 ねん 6月 がつ 16日 にち 時点 じてん のオリジナル よりアーカイブ。2008年 ねん 7月 がつ 3日 にち 閲覧 えつらん 。
^ “Code sourcery fails again ”. hardwarebug.org (2010年 ねん 1月 がつ 30日 にち ). 2010年 ねん 4月 がつ 2日 にち 時点 じてん のオリジナル よりアーカイブ。2010年 ねん 3月 がつ 4日 にち 閲覧 えつらん 。
^ [CEDEC]「FINAL FANTASY XV」の最適 さいてき 化 か はこうして行 おこな われた - GamesIndustry.biz Japan Edition
^ “x264.git/common/x86/dct-32.asm ”. git.videolan.org (2010年 ねん 9月 がつ 29日 にち ). 2012年 ねん 3月 がつ 4日 にち 時点 じてん のオリジナル よりアーカイブ。2010年 ねん 9月 がつ 29日 にち 閲覧 えつらん 。
^ “[https://github.com/torvalds/linux/blob/master/include/linux/export.h GitHub, torvalds /
linux, include/linux/export.h]”. 2023年 ねん 10月 がつ 8日 にち 閲覧 えつらん 。
^ Hyde, Randall (1996年 ねん 9月 がつ 30日 にち ). “Foreword ("Why would anyone learn this stuff?"), op. cit. ”. 2010年 ねん 3月 がつ 25日 にち 時点 じてん のオリジナル よりアーカイブ。2010年 ねん 3月 がつ 5日 にち 閲覧 えつらん 。
Jonathan Bartlett: Programming from the Ground Up . Bartlett Publishing, 2004. ISBN 0-9752838-4-7 Also available online as PDF . 2024年 ねん 3月 がつ 20日 はつか 閲覧 えつらん 。
Robert Britton: MIPS Assembly Language Programming . Prentice Hall, 2003. ISBN 0-13-142044-5
Paul Carter: PC Assembly Language . Free ebook, 2001.Website
Jeff Duntemann: Assembly Language Step-by-Step . Wiley, 2000. ISBN 0-471-37523-3
Randall Hyde: The Art of Assembly Language . No Starch Press, 2003. ISBN 1-886411-97-2
Peter Norton, John Socha, Peter Norton's Assembly Language Book for the IBM PC , Brady Books, NY: 1986.
Michael Singer, PDP-11. Assembler Language Programming and Machine Organization , John Wiley & Sons, NY: 1980.
Dominic Sweetman: See MIPS Run . Morgan Kaufmann Publishers, 1999. ISBN 1-55860-410-3
John Waldron: Introduction to RISC Assembly Language Programming . Addison Wesley, 1998. ISBN 0-201-39828-1
言語 げんご 水準 すいじゅん 言語 げんご 処理 しょり 系 けい 言語 げんご 分類 ぶんるい その他 た 関連 かんれん 項目 こうもく