「アセンブリ言語」の版間の差分

編集の要約なし
(→‎歴史的観点: Direct3D 8のプログラマブルシェーダーに関して追記。)
商用製品でアセンブリ言語を使う最大の理由は、使用メモリ量を最小にし、オーバーヘッドを最小にし、性能と信頼性を向上させるためである。1980年代のビジネスソフトでは、例えば[[表計算ソフト]] [[Lotus 1-2-3]] などはアセンブリ言語で書かれていた。日本では[[松 (ワープロ)|松]]などが該当<ref>[https://xtech.nikkei.com/it/article/COLUMN/20060609/240537/ 松 --- 事実上最初のパソコン用日本語ワープロソフト]</ref>する。
 
1990年代に入っても、[[コンシューマーゲーム]]の多くはアセンブリ言語でプログラムが書かれていた。しかしゲーム内容が複雑化し、プログラムの規模が増大するにつれて、アセンブラでは開発が困難となり、高水準言語による開発が主流となっていった。例えば[[PlayStation (ゲーム機)|プレイステーション]]では[[GNUコンパイラコレクション|GCC]]が公式のSDKに含まれていて、標準の開発言語は[[C言語]]であった<ref>[http://www.psxdev.net/forum/viewtopic.php?t=1245 Toolchain, libraries and headers relationship - PlayStation Development Network]</ref><ref>[https://www.reddit.com/r/gamedev/comments/8wf7e0/what_were_ps1_and_n64_games_written_in/ What were PS1 and N64 games written in? : gamedev]</ref>。この時代のゲーム機は[[3次元コンピュータグラフィックス]]の積極的な導入が始まっており、ハードウェア性能も向上したことから、C言語による開発も十分可能となったが、コンパイラの最適化能力が未成熟だったこともあいまって、ハードウェア性能を最大限引き出すにはアセンブリ言語を駆使した手動最適化や細かなチューニングが必要となることも多かった。[[セガサターン]]の最高性能を引き出して[[PlayStation (ゲーム機)|プレイステーション]]に対抗するには、アセンブリ言語を使うしかなかったと述べていた業界関係者もいた<ref>{{Cite web|url=http://www.eidolons-inn.net/tiki-index.php?page=SegaBase+Saturn|website=Eidolon's Inn|title=SegaBase Volume 6 - Saturn|date=2008-01-10|accessdate=2013-06-27|archiveurl=https://web.archive.org/web/20140702151706/http://www.eidolons-inn.net/tiki-index.php?page=SegaBase+Saturn|archivedate=2014-07-02|deadlinkdate=2021-04-09}}</ref><!-- accessdate は oldid=48307467 の日付から推測。本来は出典を追加した人間が自分で記述しておくべき内容。 -->。ただし一方で、[[ファミリーコンピュータ|ファミコン]]時代すでに[[メタルスレイダーグローリー]]や[[スーパーファミコン]]の[[MOTHERシリーズ|MOTHER 2]]・[[シムシティ#スーパーファミコン版|シムシティ]]<ref>[http://jp.franz.com/base/seminar/2005-11-18/SeminarNov2005-Abe.pdf Lispによるリターゲッタブルコードジェネレータの実装 (PDF)] {{webarchive|url=https://web.archive.org/web/20080820015317/http://jp.franz.com/base/seminar/2005-11-18/SeminarNov2005-Abe.pdf |date=2008年8月20日 }}</ref>、プレイステーションの[[クラッシュ・バンディクー (ゲーム)|クラッシュ・バンディクー]]で<ref>[https://www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview21.html OOエンジニアの輪! ~ 第 21 回 川合史朗 さんの巻 ~ | オブジェクトの広場]</ref>、開発の一部に[[LISP]]が使われていたという話もあり、当時のコンシューマーゲームの分野ではアセンブリ言語やC言語が全てだったというわけではない。
 
2000年代初頭、[[マイクロソフト]]は原始的な[[プログラマブルシェーダー]]に対応した[[DirectX]] ([[Direct3D]]) 8.0をリリースした。このDirect3D 8.0におけるシェーダープログラムは、グラフィックスハードウェアに依存しない中間言語(バイトコード)を出力することのできるアセンブリ言語(シェーダーアセンブラ)を使用して記述するものだった。2001年には世界で初めてプログラマブルシェーダーに対応したコンシューマーゲーム機として[[Xbox (ゲーム機)|初代Xbox]]が登場したが、このXboxに搭載されていたグラフィックスAPIもDirect3D 8.x相当のカスタマイズ版<ref>[https://www.techpowerup.com/gpu-specs/xbox-gpu.c1866 NVIDIA Xbox GPU Specs | TechPowerUp GPU Database]</ref>であり、CPU上で実行するホストプログラム(ゲームアプリケーション本体のコード)は[[C++]]を使って記述する一方、[[Graphics Processing Unit|GPU]]上で実行するシェーダープログラムの記述にはアセンブラを使用していた。のちに[[HLSL]]や[[Cg (プログラミング言語)|Cg]] (C for Graphics) といった高水準シェーディング言語が開発され、HLSLに対応したDirect3D 9.0以降はシェーダープログラムも高水準言語を利用して記述するようになった。Direct3D 10のシェーダーモデル4.0以降は、シェーダーアセンブラではなくHLSLの使用が必須となっている<ref>[https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-using-shaders-10 Using Shaders in Direct3D 10 - Win32 apps | Microsoft Docs]</ref>。