アセンブリ言語 アセンブリ言語の概要

アセンブリ言語

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/10/19 10:04 UTC 版)

モトローラ MC6800 のアセンブリ言語のソースコード

アセンブリ言語(アセンブリげんご、: assembly language)とは、プログラミング言語の一つ。一般的にはアセンブラと呼ばれ、低水準言語に分類される[1]

CPU機械語と一対一で対応するが、人間が理解しやすいよう、ニーモニックという単語で表現したものである。 そういう意味でアセンブリ言語とは、機械語そのものと言える。

用語

プログラムを組み立てる際、アセンブリ言語登場以前は機械語を使っていたが、組み立て機(assembler)の登場により、機械語より簡略な表現(mnemonic)からプログラムを組み立てる(assemble)ことが出来るようになり当時としては作業を効率化できるようになった。

このためこの工程をカタカナ表記し、組み立て機をアセンブラ(assembler)、組み立てをアセンブル(assemble)、組み立てに使う簡略表現(mnemonic)の言語体系を組み立て用の言語という意味でアセンブリ(assembly)と呼ぶ。

なお不正確な用法だが、アセンブリ言語の意味で「アセンブラ」または「アセンブラ言語」 (Assembler Language) と呼ぶ場合がある[注 1][2]。また、初期のコンピュータでは、「アセンブラ」を「アセンブリプログラム」と呼ぶ例もあった[3]

概要

プロセッサが直接実行できる言語は、機械語である。しかし機械語は2進数の羅列なので、人間には極めて理解しにくい。そこで機械語を直接書くのではなく、ニーモニックと呼ぶ命令語でプログラムを記述することで、人間により分かりやすくしたものがアセンブリ言語である。ただしアセンブリ言語の意味は 後述のように個々のプロセッサに依存し、プロセッサを介したハードウェア制御も含むため多くの場合は同一プロセッサを用いていてもソフトウェアの互換性は限定的である。

アセンブリ言語の命令には、機械語に対応したものと、アセンブラに対する命令(疑似命令)やマクロがある[注 2]。これらが機械語と1対1で対応するため、プログラマがCPUの動作を把握しながらプログラムを記述することができる。

アセンブリ言語では、機械語に相当する低水準な操作またはオペコードニーモニックで表す。オペコードによっては、機械語命令の一部として1つまたは複数のオペランドが必要である。また、多くのアセンブリ言語は、オペランドとしてラベルやシンボルを使ってアドレスや定数を表すことができ、それらの値をプログラム内にそのまま書くこと(ハードコーディング)を防ぐことができる。マクロアセンブラマクロ命令機能を備えており、アセンブリ言語のテキストに名前を事前に割り当て、その名前を使うことで他のコードにそのテキストを挿入できる。多くのアセンブラは、プログラム開発を支援したり、アセンブリ過程を制御したり、デバッグを支援したりといった付加機構を備えている。

歴史

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

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

世界で最初に実用的に稼働したノイマン型電子計算機とされるEDSACのローダ(外部記憶装置からプログラムやデータを読み出して主記憶装置に書き込むプログラム)でも、原始的なアセンブラの機能がすでに実装されている。EDSACは、ワード指向アーキテクチャで命令長が1ワードの固定長命令のマシンであり、入力機器は紙テープでありキャラクタ指向である。紙テープ上のA100Fという文字列から十進法を数値に変換するなどの処理をおこない、「100番地の値をアキュムレータに加算する」という1ワードの命令を生成するといった機能が、EDSACのローダには実装されていた。

機械語への変換は、人間が手で行うこともある。これをハンド・アセンブルと呼ぶ。単に定められた規則に従って記号や単語から機械語を生成するだけなので、自動的に機械語を出力するプログラムが作られるようになった。このプログラムをアセンブラという。

コンピュータの歴史の初期には、このような、プログラムによって機械語プログラムを生成することを自動プログラミングと呼んだ。

ドナルド・ギリースは、まだ発明されていなかったアセンブラを開発中に、フォン・ノイマンから開発を即座に止めるように言われた、という1950年代初期ならではの逸話がある。当時は、人間が手作業でもできるような瑣末な仕事をコンピュータにさせるような時代が来るとは考えられておらず、単に時間の無駄だとノイマンは考えたのである。


  1. ^ IBMはSystem/360から2011年現在まで一貫してアセンブラ言語 (Assembler Language)と 呼んでいる。例:IBM High Level Assembler
  2. ^ MIPSのアセンブラの一部など、(分岐命令のターゲットアドレスの先頭にある機械語命令を対象として)その分岐命令の遅延スロットへの移動を(副作用がない場合に)アセンブラ疑似命令 (.set bopt) の指示に応じて行うものもある。OPTASM(SLR社)という最適化アセンブラもあった。
  1. ^ アセンブリ言語 - コトバンク
  2. ^ 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." - assemblerassembly language の意味で使っている例
  3. ^ Saxon, James, and Plette, William, Programming the IBM 1401, Prentice-Hall, 1962, LoC 62-20615. - assembly program という用語を使っている例
  4. ^ a b David Salomon (1993). Assemblers and Loaders
  5. ^ bit 編集部 『bit 単語帳』共立出版、1990年8月15日、8頁。ISBN 4-320-02526-1 
  6. ^ J.DONOVAN, JOHN (1972). systems programming. pp. 59. ISBN 0-07-085175-1 
  7. ^ Beck, Leland L. (1996). “2”. System Software: An Introduction to Systems Programming. Addison Wesley 
  8. ^ 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日閲覧。 
  9. ^ Hyde, Randall. "Chapter 12 – Classes and Objects". The Art of Assembly Language, 2nd Edition. No Starch Press. © 2010.
  10. ^ (John Daintith, ed.) A Dictionary of Computing: "meta-assembler"
  11. ^ 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日閲覧。 
  12. ^ Evans, David (2006年). “x86 Assembly Guide”. University of Virginia. 2010年11月18日閲覧。
  13. ^ The SPARC Architecture Manual, Version 8”. SPARC, International (1992年). 2011年12月10日時点のオリジナル[リンク切れ]よりアーカイブ。2012年10月27日閲覧。
  14. ^ Z80 Op Codes for ZINT
  15. ^ Microsoft Corporation. “MASM: Directives & Pseudo-Opcodes”. 2011年3月19日閲覧。
  16. ^ Macros (C/C++) | Microsoft Docs
  17. ^ Concept 14 Macros”. MVS Software. 2009年5月25日閲覧。
  18. ^ Answers.com. “assembly language: Definition and Much More from Answers.com”. 2008年6月19日閲覧。
  19. ^ NESHLA: The High Level, Open Source, 6502 Assembler for the Nintendo Entertainment System
  20. ^ Salomon. Assemblers and Loaders. p. 7. http://www.davidsalomon.name/assem.advertis/asl.pdf 2012年1月17日閲覧。 
  21. ^ The IBM 650 Magnetic Drum Calculator”. 2012年1月17日閲覧。
  22. ^ Jim Lawless (2004年5月21日). “Speaking with Don French : The Man Behind the French Silk Assembler Tools”. 2008年8月21日時点のオリジナル[リンク切れ]よりアーカイブ。2008年7月25日閲覧。
  23. ^ 松 --- 事実上最初のパソコン用日本語ワープロソフト
  24. ^ Toolchain, libraries and headers relationship - PlayStation Development Network
  25. ^ What were PS1 and N64 games written in? : gamedev
  26. ^ SegaBase Volume 6 - Saturn”. Eidolon's Inn (2008年1月10日). 2014年7月2日時点のオリジナル[リンク切れ]よりアーカイブ。2013年6月27日閲覧。
  27. ^ Lispによるリターゲッタブルコードジェネレータの実装 (PDF) Archived 2008年8月20日, at the Wayback Machine.
  28. ^ OOエンジニアの輪! ~ 第 21 回 川合史朗 さんの巻 ~ | オブジェクトの広場
  29. ^ NVIDIA Xbox GPU Specs | TechPowerUp GPU Database
  30. ^ Using Shaders in Direct3D 10 - Win32 apps | Microsoft Docs
  31. ^ [CEDEC]「FINAL FANTASY XV」の最適化はこうして行われた - GamesIndustry.biz Japan Edition
  32. ^ Rusling, David A.. “The Linux Kernel”. 2012年3月11日閲覧。
  33. ^ a b 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日閲覧。
  34. ^ Bit-field-badness”. hardwarebug.org (2010年1月30日). 2010年2月5日時点のオリジナル[リンク切れ]よりアーカイブ。2010年3月4日閲覧。
  35. ^ GCC makes a mess”. hardwarebug.org (2009年5月13日). 2010年3月16日時点のオリジナル[リンク切れ]よりアーカイブ。2010年3月4日閲覧。
  36. ^ Randall Hyde. “The Great Debate”. 2008年6月16日時点のオリジナル[リンク切れ]よりアーカイブ。2008年7月3日閲覧。
  37. ^ Code sourcery fails again”. hardwarebug.org (2010年1月30日). 2010年4月2日時点のオリジナル[リンク切れ]よりアーカイブ。2010年3月4日閲覧。
  38. ^ BLAS Benchmark-August2008”. eigen.tuxfamily.org (2008年8月1日). 2010年3月4日閲覧。
  39. ^ x264.git/common/x86/dct-32.asm”. git.videolan.org (2010年9月29日). 2012年3月4日時点のオリジナル[リンク切れ]よりアーカイブ。2010年9月29日閲覧。
  40. ^ 68K Programming in Fargo II”. 2008年7月2日時点のオリジナル[リンク切れ]よりアーカイブ。2008年7月3日閲覧。
  41. ^ Hyde, Randall (1996年9月30日). “Foreword ("Why would anyone learn this stuff?"), op. cit.”. 2010年3月25日時点のオリジナル[リンク切れ]よりアーカイブ。2010年3月5日閲覧。
  42. ^ Randall Hyde. “Which Assembler is the Best?”. 2007年10月18日時点のオリジナル[リンク切れ]よりアーカイブ。2007年10月19日閲覧。


「アセンブリ言語」の続きの解説一覧




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「アセンブリ言語」の関連用語

アセンブリ言語のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



アセンブリ言語のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのアセンブリ言語 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2022 GRAS Group, Inc.RSS