概要

関数の引数をスタックにpushします。

クラスの静的でないメンバ関数の中で呼ばれた場合、
0番目の引数( ldarg 0 )として this(カレントインスタンスへの参照) が挿入され、他の引数は1つずつシフトされます。

書式

ldarg <変数名>
ldarg <変数の番号>
ldarg.<変数の番号>


クラスの静的メンバ関数や、モジュールレベルの関数における引数のpush


変数名を使用した引数のpush

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 
 
-
|
|
|
|
|
|
|
!
 
 
-
|
|
|
!
.assembly test{} // アセンブリマニフェスト
 
.method static void main()
{
    .entrypoint // エントリーポイントの宣言
 
    // talk()関数の呼び出し
        ldstr "moo"
    call void talk( string )
 
    ret
}
 
.method static void talk( string message )
{
    // 引数messageを標準出力に出力
        ldarg message // ☆ 引数messageをスタックにpush
    call void class [mscorlib]System.Console::WriteLine(string) // 出力    
}


変数の番号を使用した引数のpush

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 
 
-
|
|
|
|
|
|
|
!
 
 
-
|
|
|
!
.assembly test{} // アセンブリマニフェスト
 
.method static void main()
{
    .entrypoint // エントリーポイントの宣言
 
    // talk()関数の呼び出し
        ldstr "moo"
    call void talk( string )
 
    ret
}
 
.method static void talk( string message )
{
    // 0番目の引数の内容を標準出力に出力
        ldarg 0 // ☆ 0番目の引数をスタックにpush
    call void class [mscorlib]System.Console::WriteLine(string) // 出力    
}



クラスのメンバ関数における引数のpush


変数名を使用した引数のpush

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
-
|
-
|
|
|
!
|
|
|
-
|
!
!
.assembly test{} // アセンブリマニフェスト
 
.method static void main()
{
    .entrypoint // エントリーポイントの宣言
 
    .locals( class Bot b ) // 変数名:b 型:Botクラス の変数の宣言
 
    // Botクラスのインスタンスの生成
        newobj instance void Bot::.ctor() // インスタンスの生成
    stloc b // ローカル変数bに格納
 
    // botクラスのメンバ関数、talk()の呼び出し
    ldloc b // ローカル変数bをpush
        ldstr "moo" // talk()に渡す引数をpush
    call instance void Bot::talk( string ) // talk()関数の呼び出し
 
    ret
}
 
// Botクラスの定義
.class Bot
{
    .method public void talk( string message )
    {
        // 引数messageを標準出力に出力
            ldarg message // ☆ 引数messageをスタックにpush
        call void class [mscorlib]System.Console::WriteLine(string) // 出力    
    }
 
    // コンストラクタ
    .method public void .ctor()
    {
        ret
    }
}


変数の番号を使用した引数のpush

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
-
|
-
|
|
|
|
|
|
!
|
|
|
-
|
!
!
.assembly test{} // アセンブリマニフェスト
 
.method static void main()
{
    .entrypoint // エントリーポイントの宣言
 
    .locals( class Bot b ) // 変数名:b 型:Botクラス の変数の宣言
 
    // Botクラスのインスタンスの生成
        newobj instance void Bot::.ctor() // インスタンスの生成
    stloc b // ローカル変数bに格納
 
    // botクラスのメンバ関数、talk()の呼び出し
    ldloc b // ローカル変数bをpush
        ldstr "moo" // talk()に渡す引数をpush
    call instance void Bot::talk( string ) // talk()関数の呼び出し
 
    ret
}
 
// Botクラスの定義
.class Bot
{
    .method public void talk( string message )
    {
        // この場合、0番目の引数 ( ldarg 0 ) は this(カレントインスタンスへの参照) を指す。
        // 引数の番号は1つずつシフトされる。
 
        // 1番目の引数の内容を標準出力に出力
            ldarg 1 // ☆ 1番目の引数をスタックにpush
        call void class [mscorlib]System.Console::WriteLine(string) // 出力    
    }
 
    // コンストラクタ
    .method public void .ctor()
    {
        ret
    }
}

参照


トップ 編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード 新規 一覧 単語検索 最終更新 リンク元 ヘルプ 最終更新のRSS xenowire
Last-modified: Mon, 27 Jul 2009 03:06:23 JST