assemblyとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 日本語表現辞典 > assemblyの意味・解説 

assembly

別表記:アセンブリ

「assembly」の意味

「assembly」とは、一般的に集まり集会組み立て、または立法機関意味する英単語である。集まり集会の意味では、特定の目的議題について話し合うために集まる人々グループを指す。組み立ての意味では、部品構成要素組み合わせて製品構造物作るプロセスを指す。立法機関の意味では、特定の地域や国の法律制定する権限を持つ組織を指す。

「assembly」の発音・読み方

「assembly」の発音は、/əˈsɛm.bli/であり、IPAカタカナ読みでは「アセムブリ」となる。日本人発音するカタカナ英語では「アセンブリ」と読むことが一般的である。

「assembly」の定義を英語で解説

An assembly is a group of people gathered together for a specific purpose, such as discussing a particular topic or issue. In the context of manufacturing, an assembly refers to the process of putting together parts or components to create a product or structure. In the context of government, an assembly is an organization with the authority to make laws for a particular region or country.

「assembly」の類語

「assembly」の類語には、以下のようなものがある。 1. gathering: 集まり集会 2. meeting: 会議ミーティング 3. congregation: 集会信者集まり 4. construction: 建設構築 5. legislature: 立法機関議会

「assembly」に関連する用語・表現

「assembly」に関連する用語表現には、以下のようなものがある。 1. assembly line: 組み立てライン生産ライン 2. general assembly: 総会全体会議 3. national assembly: 国民議会国会 4. assembly hall: 集会場講堂 5. assembly language: アセンブリ言語、低水準プログラミング言語

「assembly」の例文

1. The students gathered in the assembly hall for the morning announcements.(生徒たちは朝のアナウンスのために集会場集まった。) 2. The car parts were put together on the assembly line.(車の部品組み立てライン組み立てられた。) 3. The United Nations General Assembly meets annually in New York.(国連総会毎年ニューヨークで開催される。) 4. The assembly of the new furniture took longer than expected.(新しい家具の組み立て予想上の時間かかった。) 5. The members of the national assembly debated the proposed law.(国会議員たちは提案され法律について議論した。) 6. The protesters held an assembly in the city square to voice their concerns.(抗議者たちは市の広場集会開き懸念表明した。) 7. The assembly language is used by programmers to write low-level code.(アセンブリ言語プログラマーによって低水準コードを書くために使用される。) 8. The assembly of the new computer required careful attention to detail.(新しコンピュータ組み立てには細部への注意必要だった。) 9. The school assembly focused on the importance of community involvement.(学校集会では地域参加重要性焦点当てられた。) 10. The factory workers were trained in the assembly of the new product.(工場労働者たちは新製品組み立て学んだ。)

アセンブリー【assembly】

読み方:あせんぶりー

《「アッセンブリー」とも》

集会会合

機械建材などの、最終的な組み立て


アッセンブリー【assembly】

読み方:あっせんぶりー

アセンブリー


アセンブリー


アセンブリ 【assembly】


アセンブリ

【英】assembly

アセンブリとは、Microsoft .NET Framework環境における、アプリケーションなどの管理単位となるコンパイル済みコード群のことである。

アセンブリは、Windowsにおける実行ファイルであるdll、および、exeファイル書式であるPEフォーマットに従うもので、その中に配置バージョンセキュリティに関する情報その他のメタデータ含んでいる。

.NET Framework環境では、アプリケーションコンパイル後にCILCommon Intermediate Language)と呼ばれる中間言語コンパイルされ、ランタイム環境であるCLRCommon Language Runtime)が持つJITコンパイラJust In Time Compiler)を用いて機械語変換されVESVirtual Execution System仮想実行システム)で実行される

開発者は、アセンブリを作成する際、そのアセンブリに開発者ユニークに識別する署名付与することができる。この場合ファイル例え上書き、あるいは、変更されたとしても、正しい組合わせかどうか適切に検出することができる。また、利用するライブラリバージョンの違いによって生じ不具合いわゆるDLL地獄」)を解消することができる。

アセンブリには、前提とするCLRバージョンにより、バージョン1.12.0などの区別があるため、インストールにあたりCLRバージョンとの整合性意識する必要がある


参照リンク
アセンブリ - (Microsoft
ソフトウェアのほかの用語一覧
プログラミング:  AlphaGo  アップグレードインストール  アルゴル  アセンブリ  エラー  エラーレベル  エラーログ

Assembly イベント


Assembly クラス

Assembly定義します。このアセンブリ再利用でき、バージョン管理可能で自己記述型の共通言語ランタイム アプリケーションビルド ブロックです。

名前空間: System.Reflection
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
<ComVisibleAttribute(True)> _
Public Class Assembly
    Implements _Assembly, IEvidenceFactory, ICustomAttributeProvider,
 ISerializable
[SerializableAttribute] 
[ClassInterfaceAttribute(ClassInterfaceType.None)] 
[ComVisibleAttribute(true)] 
public class Assembly : _Assembly, IEvidenceFactory,
 ICustomAttributeProvider, 
    ISerializable
[SerializableAttribute] 
[ClassInterfaceAttribute(ClassInterfaceType::None)] 
[ComVisibleAttribute(true)] 
public ref class Assembly : _Assembly, IEvidenceFactory,
 ICustomAttributeProvider, 
    ISerializable
/** @attribute SerializableAttribute() */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */ 
/** @attribute ComVisibleAttribute(true) */ 
public class Assembly implements _Assembly,
 IEvidenceFactory, 
    ICustomAttributeProvider, ISerializable
SerializableAttribute 
ClassInterfaceAttribute(ClassInterfaceType.None) 
ComVisibleAttribute(true) 
public class Assembly implements _Assembly,
 IEvidenceFactory, 
    ICustomAttributeProvider, ISerializable
解説解説
使用例使用例

アセンブリ内のメソッドについて、メソッド シグネチャ列挙するコード例次に示します

' LoadInvoke loads MyAssembly.dll and lists the method
' information for each method. After compiling this class,
' run LoadInvoke.exe with the DisplayName for the assembly,
' as shown here:
' LoadInvoke MyAssembly
Imports System
Imports System.Reflection
Imports System.Security.Permissions

Public Class LoadInvoke

    <PermissionSetAttribute(SecurityAction.Demand, Name:="FullTrust")>
 _
    Public Shared Sub Main(ByVal
 args() As String)
        Dim a As [Assembly] = [Assembly].Load(args(0))
        Dim mytypes As Type() = a.GetTypes()
        Dim flags As BindingFlags = BindingFlags.NonPublic
 Or BindingFlags.Public Or BindingFlags.Static
 Or _
            BindingFlags.Instance Or BindingFlags.DeclaredOnly

        Dim t As Type
        For Each t In mytypes
            Dim mi As MethodInfo() = t.GetMethods(flags)
            Dim obj As [Object] = Activator.CreateInstance(t)

            Dim m As MethodInfo
            For Each m In
 mi
                ' Instead of invoking the methods,
                ' it's safer to initially just list them.
                Console.WriteLine(m)
            Next m
        Next t
    End Sub 
End Class 
// LoadInvoke loads MyAssembly.dll and lists the method
// information for each method. After compiling this class,
// run LoadInvoke.exe with the DisplayName for the assembly,
// as shown here:
// LoadInvoke MyAssembly

using System;
using System.Reflection;
using System.Security.Permissions;

public class LoadInvoke
{
    [PermissionSetAttribute(SecurityAction.Demand, Name="FullTrust")]
    public static void Main(string[]
 args)
    {
        Assembly a = Assembly.Load(args[0]);
        Type[] mytypes = a.GetTypes();
        BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public |
            BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);

        foreach(Type t in mytypes)
        {
            MethodInfo[] mi = t.GetMethods(flags);
            Object obj = Activator.CreateInstance(t);

            foreach(MethodInfo m in mi)
            {
                // Instead of invoking the methods,
                // it's safer to initially just list them.
                Console.WriteLine(m);
            }
        }
    }
}
' Use this class with the LoadInvoke program.
' Compile this class using vbc /t:library MyAssembly.vb
' to obtain MyAssembly.dll.
Imports System
Imports Microsoft.VisualBasic

Public Class MyAssembly
    Public Sub MyMethod1()
        Console.WriteLine("Invoking MyAssembly.MyMethod1")
    End Sub 'MyMethod1
End Class 'MyAssembly
// Use this class with the LoadInvoke program.
// Compile this class using "csc /t:library MyAssembly.cs"
// to build MyAssembly.dll.
using System;

public class MyAssembly
{
    public void MyMethod1()
    {
        Console.WriteLine("This is MyMethod1");
    }
    public void MyMethod2()
    {
        Console.WriteLine("This is MyMethod2");
    }
    public void MyMethod3()
    {
        Console.WriteLine("This is MyMethod3");
    }
}
// Use this class with the LoadInvoke program.
// Compile this class using csc /t:library MyAssembly.cs
// to obtain MyAssembly.dll.
using namespace System;
public ref class MyAssembly
{
public:
   void MyMethod1()
   {
      Console::WriteLine( "Invoking MyAssembly.MyMethod1" );
   }

};

継承階層継承階層
System.Object
  System.Reflection.Assembly
     System.Reflection.Emit.AssemblyBuilder
スレッド セーフスレッド セーフ

この型は、マルチスレッド操作に対して安全です。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Assembly プロパティ


Assembly メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド参照)
  名前 説明
パブリック メソッド CreateInstance オーバーロードされます。 このアセンブリから型を検索しシステム アクティベータを使用してこの型のインスタンス作成します
パブリック メソッド CreateQualifiedName アセンブリ表示名修飾され型名作成します
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 ( Object から継承されます。)
パブリック メソッド GetAssembly 指定したクラス定義されている、現在読み込み済みアセンブリ取得します
パブリック メソッド GetCallingAssembly 現在実行中のメソッド呼び出したメソッドの Assembly を返します
パブリック メソッド GetCustomAttributes オーバーロードされます。 このアセンブリカスタム属性取得します
パブリック メソッド GetEntryAssembly 既定アプリケーション ドメイン実行できるプロセス取得します。他のアプリケーション ドメインでは、AppDomain.ExecuteAssembly で実行され最初実行可能ファイルです。
パブリック メソッド GetExecutingAssembly 現在実行中のコード格納しているアセンブリ取得します
パブリック メソッド GetExportedTypes アセンブリ外側参照できる、このアセンブリ内で定義されているエクスポートされた型を取得します
パブリック メソッド GetFile このアセンブリマニフェストファイル テーブル指定されファイルの FileStream を取得します
パブリック メソッド GetFiles オーバーロードされますアセンブリ マニフェストファイル テーブルファイル取得します
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 ( Object から継承されます。)
パブリック メソッド GetLoadedModules オーバーロードされます。 このアセンブリ一部であるすべての読み込み済みモジュール取得します
パブリック メソッド GetManifestResourceInfo 指定されリソース永続化された方法に関する情報返します
パブリック メソッド GetManifestResourceNames このアセンブリすべてのリソースの名前を返します
パブリック メソッド GetManifestResourceStream オーバーロードされます。 このアセンブリから、指定されマニフェスト リソース読み込みます。
パブリック メソッド GetModule このアセンブリから指定されモジュール取得します
パブリック メソッド GetModules オーバーロードされます。 このアセンブリ一部であるすべてのモジュール取得します
パブリック メソッド GetName オーバーロードされます。 このアセンブリの AssemblyName を取得します
パブリック メソッド GetObjectData シリアル化情報と、このアセンブリの再インスタンス化必要なすべてのデータ取得します
パブリック メソッド GetReferencedAssemblies このアセンブリ参照するすべてのアセンブリAssemblyName オブジェクト取得します
パブリック メソッド GetSatelliteAssembly オーバーロードされますサテライト アセンブリ取得します
パブリック メソッド GetType オーバーロードされます指定された型を表す Type オブジェクト取得します
パブリック メソッド GetTypes このアセンブリ定義されている型を取得します
パブリック メソッド IsDefined 指定した属性アセンブリ適用されているかどうか示します
パブリック メソッド Load オーバーロードされますアセンブリ読み込みます。
パブリック メソッド LoadFile オーバーロードされますアセンブリ ファイル内容読み込みます。
パブリック メソッド LoadFrom オーバーロードされますアセンブリ読み込みます。
パブリック メソッド LoadModule オーバーロードされます。 このアセンブリ内部モジュール読み込みます。
パブリック メソッド LoadWithPartialName オーバーロードされますアプリケーション ディレクトリまたはグローバル アセンブリ キャッシュから、部分名を使用してアセンブリ読み込みます。
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド ReflectionOnlyLoad オーバーロードされますアセンブリリフレクションのみのコンテキスト読み込みます。リフレクションのみのコンテキストでは、アセンブリチェックできますが、実行はできません。
パブリック メソッド ReflectionOnlyLoadFrom パス指定してアセンブリリフレクションのみのコンテキスト読み込みます。
パブリック メソッド ToString オーバーライドされますアセンブリの完全名返します。この名前は表示名とも呼ばれます
プロテクト メソッドプロテクト メソッド
明示的インターフェイスの実装明示的インターフェイス実装
  名前 説明
インターフェイスの明示的な実装 System.Runtime.InteropServices._Assembly.GetType 現在のインスタンスの型を返します
参照参照

関連項目

Assembly クラス
System.Reflection 名前空間

Assembly メンバ

Assembly を定義します。このアセンブリ再利用でき、バージョン管理可能で自己記述型の共通言語ランタイム アプリケーションビルド ブロックです。

Assembly データ型公開されるメンバを以下の表に示します


パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
( プロテクト メソッド参照)
  名前 説明
パブリック メソッド CreateInstance オーバーロードされます。 このアセンブリから型を検索しシステム アクティベータを使用してこの型のインスタンス作成します
パブリック メソッド CreateQualifiedName アセンブリ表示名修飾され型名作成します
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 (Object から継承されます。)
パブリック メソッド GetAssembly 指定したクラス定義されている、現在読み込み済みアセンブリ取得します
パブリック メソッド GetCallingAssembly 現在実行中のメソッド呼び出したメソッドAssembly返します
パブリック メソッド GetCustomAttributes オーバーロードされます。 このアセンブリカスタム属性取得します
パブリック メソッド GetEntryAssembly 既定アプリケーション ドメイン実行できるプロセス取得します。他のアプリケーション ドメインでは、AppDomain.ExecuteAssembly で実行され最初実行可能ファイルです。
パブリック メソッド GetExecutingAssembly 現在実行中のコード格納しているアセンブリ取得します
パブリック メソッド GetExportedTypes アセンブリ外側参照できる、このアセンブリ内で定義されているエクスポートされた型を取得します
パブリック メソッド GetFile このアセンブリマニフェストファイル テーブル指定されファイルの FileStream を取得します
パブリック メソッド GetFiles オーバーロードされますアセンブリ マニフェストファイル テーブルファイル取得します
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 (Object から継承されます。)
パブリック メソッド GetLoadedModules オーバーロードされます。 このアセンブリ一部であるすべての読み込み済みモジュール取得します
パブリック メソッド GetManifestResourceInfo 指定されリソース永続化された方法に関する情報返します
パブリック メソッド GetManifestResourceNames このアセンブリすべてのリソースの名前を返します
パブリック メソッド GetManifestResourceStream オーバーロードされます。 このアセンブリから、指定されマニフェスト リソース読み込みます。
パブリック メソッド GetModule このアセンブリから指定されモジュール取得します
パブリック メソッド GetModules オーバーロードされます。 このアセンブリ一部であるすべてのモジュール取得します
パブリック メソッド GetName オーバーロードされます。 このアセンブリの AssemblyName を取得します
パブリック メソッド GetObjectData シリアル化情報と、このアセンブリの再インスタンス化必要なすべてのデータ取得します
パブリック メソッド GetReferencedAssemblies このアセンブリ参照するすべてのアセンブリAssemblyName オブジェクト取得します
パブリック メソッド GetSatelliteAssembly オーバーロードされますサテライト アセンブリ取得します
パブリック メソッド GetType オーバーロードされます指定された型を表す Type オブジェクト取得します
パブリック メソッド GetTypes このアセンブリ定義されている型を取得します
パブリック メソッド IsDefined 指定した属性アセンブリ適用されているかどうか示します
パブリック メソッド Load オーバーロードされますアセンブリ読み込みます。
パブリック メソッド LoadFile オーバーロードされますアセンブリ ファイル内容読み込みます。
パブリック メソッド LoadFrom オーバーロードされますアセンブリ読み込みます。
パブリック メソッド LoadModule オーバーロードされます。 このアセンブリ内部モジュール読み込みます。
パブリック メソッド LoadWithPartialName オーバーロードされますアプリケーション ディレクトリまたはグローバル アセンブリ キャッシュから、部分名を使用してアセンブリ読み込みます。
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド ReflectionOnlyLoad オーバーロードされますアセンブリリフレクションのみのコンテキスト読み込みます。リフレクションのみのコンテキストでは、アセンブリチェックできますが、実行はできません。
パブリック メソッド ReflectionOnlyLoadFrom パス指定してアセンブリリフレクションのみのコンテキスト読み込みます。
パブリック メソッド ToString オーバーライドされますアセンブリの完全名返します。この名前は表示名とも呼ばれます
プロテクト メソッドプロテクト メソッド
パブリック イベントパブリック イベント
明示的インターフェイスの実装明示的インターフェイス実装
  名前 説明
インターフェイスの明示的な実装 System.Runtime.InteropServices._Assembly.GetType 現在のインスタンスの型を返します
参照参照

関連項目

Assembly クラス
System.Reflection 名前空間

_Assembly イベント


パブリック イベントパブリック イベント

参照参照

関連項目

_Assembly インターフェイス
System.Runtime.InteropServices 名前空間
System.Reflection.Assembly

_Assembly インターフェイス

メモ : このインターフェイスは、.NET Framework version 2.0新しく追加されたものです。

System.Reflection.Assembly クラスパブリック メンバアンマネージ コード公開します

 

名前空間: System.Runtime.InteropServices
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)> _
<ComVisibleAttribute(True)> _
<GuidAttribute("17156360-2f1a-384a-bc52-fde93c215c5b")>
 _
<CLSCompliantAttribute(False)> _
Public Interface _Assembly
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)] 
[ComVisibleAttribute(true)] 
[GuidAttribute("17156360-2f1a-384a-bc52-fde93c215c5b")] 
[CLSCompliantAttribute(false)] 
public interface _Assembly
[InterfaceTypeAttribute(ComInterfaceType::InterfaceIsDual)] 
[ComVisibleAttribute(true)] 
[GuidAttribute(L"17156360-2f1a-384a-bc52-fde93c215c5b")] 
[CLSCompliantAttribute(false)] 
public interface class _Assembly
/** @attribute InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual) */ 
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute GuidAttribute("17156360-2f1a-384a-bc52-fde93c215c5b") */
 
/** @attribute CLSCompliantAttribute(false) */ 
public interface _Assembly
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual) 
ComVisibleAttribute(true) 
GuidAttribute("17156360-2f1a-384a-bc52-fde93c215c5b") 
CLSCompliantAttribute(false) 
public interface _Assembly
解説解説
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
_Assembly メンバ
System.Runtime.InteropServices 名前空間
System.Reflection.Assembly

_Assembly プロパティ


_Assembly メソッド


パブリック メソッドパブリック メソッド

  名前 説明
パブリック メソッド CreateInstance オーバーロードされますCOM オブジェクトに、CreateInstance メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド Equals COM オブジェクトに、Equals メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetCustomAttributes オーバーロードされますCOM オブジェクトに、GetCustomAttributes メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetExportedTypes COM オブジェクトに、GetExportedTypes プロパティへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetFile COM オブジェクトに、GetFile メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetFiles オーバーロードされますCOM オブジェクトに、GetFiles メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetHashCode COM オブジェクトに、GetHashCode メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetLoadedModules オーバーロードされますCOM オブジェクトに、GetLoadedModules メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetManifestResourceInfo COM オブジェクトに、GetManifestResourceInfo メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetManifestResourceNames COM オブジェクトに、GetManifestResourceNames メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetManifestResourceStream オーバーロードされますCOM オブジェクトに、GetManifestResourceStream メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetModule COM オブジェクトに、GetModule メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetModules オーバーロードされますCOM オブジェクトに、GetModules メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetName オーバーロードされますCOM オブジェクトに、GetName メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetObjectData COM オブジェクトに、GetObjectData メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetReferencedAssemblies COM オブジェクトに、GetReferencedAssemblies メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetSatelliteAssembly オーバーロードされますCOM オブジェクトに、GetSatelliteAssembly メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetType オーバーロードされますCOM オブジェクトに、GetType メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetTypes COM オブジェクトに、GetTypes メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド IsDefined COM オブジェクトに、IsDefined メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド LoadModule オーバーロードされますCOM オブジェクトに、LoadModule メンバへのバージョン依存しないアクセス用意されています。
パブリック メソッド ToString COM オブジェクトに、ToString メソッドへのバージョン依存しないアクセス用意されています。
参照参照

関連項目

_Assembly インターフェイス
System.Runtime.InteropServices 名前空間
System.Reflection.Assembly

_Assembly メンバ

System.Reflection.Assembly クラスパブリック メンバアンマネージ コード公開します

_Assembly データ型公開されるメンバを以下の表に示します


パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
  名前 説明
パブリック メソッド CreateInstance オーバーロードされますCOM オブジェクトに、CreateInstance メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド Equals COM オブジェクトに、Equals メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetCustomAttributes オーバーロードされますCOM オブジェクトに、GetCustomAttributes メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetExportedTypes COM オブジェクトに、GetExportedTypes プロパティへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetFile COM オブジェクトに、GetFile メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetFiles オーバーロードされますCOM オブジェクトに、GetFiles メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetHashCode COM オブジェクトに、GetHashCode メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetLoadedModules オーバーロードされますCOM オブジェクトに、GetLoadedModules メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetManifestResourceInfo COM オブジェクトに、GetManifestResourceInfo メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetManifestResourceNames COM オブジェクトに、GetManifestResourceNames メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetManifestResourceStream オーバーロードされますCOM オブジェクトに、GetManifestResourceStream メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetModule COM オブジェクトに、GetModule メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetModules オーバーロードされますCOM オブジェクトに、GetModules メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetName オーバーロードされますCOM オブジェクトに、GetName メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetObjectData COM オブジェクトに、GetObjectData メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetReferencedAssemblies COM オブジェクトに、GetReferencedAssemblies メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetSatelliteAssembly オーバーロードされますCOM オブジェクトに、GetSatelliteAssembly メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetType オーバーロードされますCOM オブジェクトに、GetType メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド GetTypes COM オブジェクトに、GetTypes メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド IsDefined COM オブジェクトに、IsDefined メソッドへのバージョン依存しないアクセス用意されています。
パブリック メソッド LoadModule オーバーロードされますCOM オブジェクトに、LoadModule メンバへのバージョン依存しないアクセス用意されています。
パブリック メソッド ToString COM オブジェクトに、ToString メソッドへのバージョン依存しないアクセス用意されています。
パブリック イベントパブリック イベント
参照参照

関連項目

_Assembly インターフェイス
System.Runtime.InteropServices 名前空間
System.Reflection.Assembly

ASSY

英語 assembly

2つ上の部品締結部品(ボルトナット、クリップファスナーなど)、溶接、かしめなどで一緒に組み付けること。アッシー部品同士組み付けて、さらに大きなアッシーにすることもある。狙い作業平準化単純化などによる品質安定コスト低減

※「大車林」の内容は、発行日である2004年時点の情報となっております。

アセンブリ言語

(assembly から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/06/22 15:20 UTC 版)

モトローラ 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,axnopに変換するものがある。同様にIBMのSystem/360System/370のアセンブラでは、拡張ニーモニックNOPNOPRを使用し、それぞれBCBCRのマスク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, 61h       ; 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, 1h        ; Load AL with immediate value 1
MOV CL, 2h        ; Load CL with immediate value 2
MOV DL, 3h        ; 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言語などの高級言語より抽象度が低い。すなわち言語機能(構文や型)が少ない。次の表は「基本的なアセンブリ言語」と高級言語の間にある言語機能差である。

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

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

高水準文法

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

マクロ

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

例えば、一部のZ80用アセンブラでは、ld hl,bc というマクロ命令を ld l,cld h,b という2命令に展開する[13]。メインフレームの時代には、マクロは特定顧客の大規模ソフトウェアシステムのカスタマイズや、メーカーのオペレーティングシステムを顧客の要望に合わせた特注版にするのに使われていた。IBMVM/CMS、リアルタイムトランザクション処理用アドオン、CICSACP英語版/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アセンブラを使っているものが多い。

同じ系統のプロセッサであっても、複数のアセンブリ言語の方言が存在する。アセンブラによっては他の方言のアセンブリ言語も使用可能な場合がある。例えば、TASMMASM用コードを入力として受け付け可能だが、逆は不可能である。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メインフレーム用ソフトウェアの多くはアセンブリ言語で書かれていた。COBOLFORTRANPL/I などが取って代わっていったが、1990年代になってもアセンブリ言語のコードベースを保守し続けていた大企業も少なくない。

初期のマイクロコンピュータでも同様に広く用いられた。これは、リソースの制約が厳しく、メモリやディスプレイのアーキテクチャが特殊だったからである。また、マイクロコンピュータ向けの高水準言語のコンパイラがなかったという面も重要である。また、初期のマイクロコンピュータのユーザは趣味としての使用が主であり、何でも自前で作るという精神もそれに影響していたと見られる。

1980年代から1990年代にかけて、ホームコンピュータZX Spectrumコモドール64AmigaAtari 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上で実行するシェーダープログラムの記述にはアセンブラを使用していた。のちにHLSLCg (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スパイク、ページフォルトプリエンプションの排除
  • ハードウェア操作
  • 高級言語非対応命令の利用
  • 挙動理解

事例

アセンブリ言語が用いられる事例として以下が挙げられる。

  • 組み込みシステム: 省フットプリントでのハードウェア操作が目的
    • 電話機のファームウェア
    • 自動車の燃料・点火システム
    • センサー
  • デバイスドライバ割り込みハンドラブートコードBIOSPOST
    • ハードウェアないしはファームウェアの呼び出し規約をアセンブリ言語によりカーネルやドライバにて使用している高級言語の規約へ変換することにより、主要な機能を高級言語で実装することができる。
  • 暗号化: 高級言語非対応命令の使用が目的
  • 数値計算: 高速化が目的
  • リアルタイムシステム: リアルタイム性が目的
  • 暗号アルゴリズムは常に厳密に同じ時間で実行することで、タイミング攻撃を防ぐ。
  • 高度なセキュリティが要求され、環境を完全に制御する必要がある場合。
  • 監視・トレース・デバッグのための命令セットシミュレータで、追加のオーバーヘッドを最小に保ちたい場合。
  • リバースエンジニアリング: 挙動理解が目的
  • 自己書き換えコード
  • コードサイズの上限に制限がある環境
    • ブートセクタに格納するブートローダ。例として、MBRでは最大446バイト。
    • トラップ処理やシグナルハンドラ起動などのために、カーネルがプロセスのアドレス空間へ見せるコード。vDSOを用い、プロセスからはシェアードオブジェクトを読み込んだように見せる実装が多い。
      • 見せるコードの範囲を正確に把握する必要があるため、コードのエントリだけでなく終了部にもラベルを与える。アセンブリ言語では容易だが、高級言語では一般に不要な機能なのでサポートされていない。
      • 元来はユーザモード用のスタック上にカーネルからコードをコピーして実行していた。欠点として、スタックはユーザモードでの書き込みが禁止できず、スタック上でのコード実行がセキュリティホールとしてしばしば利用されたことから、実装方法の変更が進められている。
  • オブジェクトファイルに依存した機能
    • コンパイラが通常は使用しないセクション等にシンボルを定義することができる。例として、Linuxカーネルではモジュールへ公開するシンボルをマクロEXPORT_SYMBOL(ないしはその派生)[43]へ与える。このマクロは、インラインアセンブリを用いてオブジェクトファイルのセクション.export_symbolへシンボルの情報を追加し、モジュールローダがシンボル解決にて使用できるようにする。マクロの内容はCPUアーキテクチャには依存せず、その定義もCPUアーキテクチャに依存しないヘッダファイル(include/linux/export.h[注 3]にあるが、C言語を含め高級言語のみでの実装が難しく、アセンブリが適している。[注 4]

なお一方で、最近[いつ?]のコンピュータの命令セットはその多くはどれも似ている。したがって、どれか1つのアセンブリ言語を学ぶだけで、基本概念、どんなときにアセンブリ言語を使用するのが適しているか、高水準言語から効率的な実行コードを生成する方法をある程度は学習できる[44]

高水準言語との連携

  • 高水準言語の処理系の呼出規約(言語処理系ではなくOSやハードウェアベンダ側で共通化している場合もある)に従うことで、高水準言語と相互にコードを呼び出すことができる。後述のインラインアセンブラなどにより同一のモジュールに埋め込むこともできれば、別モジュールとしてリンケージエディタでリンクすることもある。
  • 多くのコンパイラは、機械語を直接生成するのではなく、アセンブリ言語のコードを生成し、それをアセンブラに通している。人間によるデバッグや最適化などに便利である(機械による最適化には、内部表現を使ったほうが便利なので、あまり意味がない)。その意味ではアセンブリ言語は、目に見えない形ではあるが最も利用頻度の高いプログラミング言語といえるという主張もあるが、その意味では機械語が絶対的に最も利用頻度の高いプログラミング言語である。
  • インラインアセンブラのある言語ないし処理系では、ソース中にアセンブリ言語による記述を含めることができる。例えばLinuxカーネルではその利用が多い。アセンブリ言語と同様の利点が得られるかわりに、やはりアセンブリ言語と同様にプログラミング言語を使う利点(移植性など)が失われる。

脚注

注釈

  1. ^ IBMはSystem/360から2011年現在まで一貫してアセンブラ言語 (Assembler Language)と 呼んでいる。例:IBM High Level Assembler
  2. ^ MIPSのアセンブラの一部など、(分岐命令のターゲットアドレスの先頭にある機械語命令を対象として)その分岐命令の遅延スロットへの移動を(副作用がない場合に)アセンブラ疑似命令 (.set bopt) の指示に応じて行うものもある。OPTASM(SLR社)という最適化アセンブラもあった。
  3. ^ 厳密にはCPUのビット幅に依存するが、マクロ定義はこれを条件付きコンパイルによりカバーしている。
  4. ^ GCC等、C言語への拡張によりシンボルへのセクション指定が可能なコンパイラはあるが、コンパイラへの強い依存性が生じる。アセンブリ言語であれば、およそセクションをサポートしたオブジェクトファイルが出力できるならばセクションの指定は何らかの手段で実装可能となる。

出典

  1. ^ a b "ニモニックによって表したプログラムをアセンブリ言語(assembly language)プログラムと呼ぶ。" 伊藤. 機械語とアセンブリ言語. 埼玉大学, 電気電子物理工学実験III. 2022-12-25閲覧.
  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. ^ 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日閲覧。 
  4. ^ a b "各命令に、人間にとって意味があり、その命令が行う処理を類推できる文字列を対応付ける。この文字列をニモニック(mnemonic)と呼ぶ。" 伊藤. 機械語とアセンブリ言語. 埼玉大学, 電気電子物理工学実験III. 2022-12-25閲覧.
  5. ^ The SPARC Architecture Manual, Version 8”. SPARC, International (1992年). 2011年12月10日時点のオリジナルよりアーカイブ。2012年10月27日閲覧。
  6. ^ a b David Salomon (1993). Assemblers and Loaders
  7. ^ Microsoft Corporation. “MASM: Directives & Pseudo-Opcodes”. 2011年3月19日閲覧。
  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. ^ Evans, David (2006年). “x86 Assembly Guide”. University of Virginia. 2010年11月18日閲覧。
  10. ^ gotoが存在する言語もあるが、限定利用が推奨される
  11. ^ Answers.com. “assembly language: Definition and Much More from Answers.com”. 2008年6月19日閲覧。
  12. ^ NESHLA: The High Level, Open Source, 6502 Assembler for the Nintendo Entertainment System
  13. ^ Z80 Op Codes for ZINT
  14. ^ コンピュータ予約システム (CRS) やクレジットカード会社で使われているトランザクションOS
  15. ^ Dr. H.D. Mills (1970) 提案、Marvin Kessler 実装 in IBM連邦政府システム部門
  16. ^ Concept 14 Macros”. MVS Software. 2009年5月25日閲覧。
  17. ^ Saxon, James, and Plette, William, Programming the IBM 1401, Prentice-Hall, 1962, LoC 62-20615. - assembly program という用語を使っている例
  18. ^ J.DONOVAN, JOHN (1972). systems programming. pp. 59. ISBN 0-07-085175-1 
  19. ^ bit 編集部『bit 単語帳』共立出版、1990年8月15日、8頁。ISBN 4-320-02526-1 
  20. ^ Hyde, Randall. "Chapter 12 – Classes and Objects". The Art of Assembly Language, 2nd Edition. No Starch Press. © 2010.
  21. ^ (John Daintith, ed.) A Dictionary of Computing: "meta-assembler"
  22. ^ Beck, Leland L. (1996). “2”. System Software: An Introduction to Systems Programming. Addison Wesley 
  23. ^ Randall Hyde. “Which Assembler is the Best?”. 2007年10月18日時点のオリジナルよりアーカイブ。2007年10月19日閲覧。
  24. ^ Salomon. Assemblers and Loaders. p. 7. http://www.davidsalomon.name/assem.advertis/asl.pdf 2012年1月17日閲覧。 
  25. ^ The IBM 650 Magnetic Drum Calculator”. 2012年1月17日閲覧。
  26. ^ Jim Lawless (2004年5月21日). “Speaking with Don French : The Man Behind the French Silk Assembler Tools”. 2008年8月21日時点のオリジナルよりアーカイブ。2008年7月25日閲覧。
  27. ^ 松 --- 事実上最初のパソコン用日本語ワープロソフト
  28. ^ Toolchain, libraries and headers relationship - PlayStation Development Network
  29. ^ What were PS1 and N64 games written in? : gamedev
  30. ^ SegaBase Volume 6 - Saturn”. Eidolon's Inn (2008年1月10日). 2014年7月2日時点のオリジナルよりアーカイブ。2013年6月27日閲覧。
  31. ^ Lispによるリターゲッタブルコードジェネレータの実装 (PDF) Archived 2008年8月20日, at the Wayback Machine.
  32. ^ OOエンジニアの輪! ~ 第 21 回 川合史朗 さんの巻 ~ | オブジェクトの広場
  33. ^ NVIDIA Xbox GPU Specs | TechPowerUp GPU Database
  34. ^ Using Shaders in Direct3D 10 - Win32 apps | Microsoft Docs
  35. ^ Rusling, David A.. “The Linux Kernel”. 2012年3月11日閲覧。
  36. ^ 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日閲覧。
  37. ^ Bit-field-badness”. hardwarebug.org (2010年1月30日). 2010年2月5日時点のオリジナルよりアーカイブ。2010年3月4日閲覧。
  38. ^ GCC makes a mess”. hardwarebug.org (2009年5月13日). 2010年3月16日時点のオリジナルよりアーカイブ。2010年3月4日閲覧。
  39. ^ Randall Hyde. “The Great Debate”. 2008年6月16日時点のオリジナルよりアーカイブ。2008年7月3日閲覧。
  40. ^ Code sourcery fails again”. hardwarebug.org (2010年1月30日). 2010年4月2日時点のオリジナルよりアーカイブ。2010年3月4日閲覧。
  41. ^ [CEDEC]「FINAL FANTASY XV」の最適化はこうして行われた - GamesIndustry.biz Japan Edition
  42. ^ x264.git/common/x86/dct-32.asm”. git.videolan.org (2010年9月29日). 2012年3月4日時点のオリジナルよりアーカイブ。2010年9月29日閲覧。
  43. ^ “[https://github.com/torvalds/linux/blob/master/include/linux/export.h GitHub, torvalds / linux, include/linux/export.h]”. 2023年10月8日閲覧。
  44. ^ 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

関連項目

外部リンク


アッセンブリー

(assembly から転送)

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

ナビゲーションに移動 検索に移動

アッセンブリー(英語: assembly)



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

辞書ショートカット

すべての辞書の索引

「assembly」の関連用語

assemblyのお隣キーワード
検索ランキング

   

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



assemblyのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
実用日本語表現辞典実用日本語表現辞典
Copyright © 2025実用日本語表現辞典 All Rights Reserved.
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
JERICHO CONSULTINGJERICHO CONSULTING
Copyright (C) 2025by Jericho Consulting Co.,Ltd. All Rights Reserved.
印刷関係用語集印刷関係用語集
Copyright (C) 2025 K'sBookshelf All Rights Reserved.
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【アセンブリ】の記事を利用しております。
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
三栄書房三栄書房
Copyright c San-eishobo Publishing Co.,Ltd.All Rights Reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのアセンブリ言語 (改訂履歴)、アッセンブリー (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS