説明

ローカル変数のアドレスをスタックにpushします。
クラスのメンバ関数を呼ぶときなどに使用されます。

int32クラスのToString()を呼ぶ例

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 
-
|
|
|
|
|
|
|
|
!
.method static void hoge()
{
  // ローカル変数の宣言
  .locals( int32 i )
 
    ldloca i // 変数iのアドレスをスタックにpush
    call instance string class [mscorlib]System.Int32::ToString() // int32クラスのToString()関数を呼ぶ
  pop // ToString()したけど要らないので結果を捨てる
 
  ret
}

C#では・・・

すべてを展開すべてを収束
  1
  2
  3
  4
  5
 
-
|
|
!
static void hoge()
{
  int i;
  i.ToString();
}


変数のアドレスを標準出力に出力する例

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
.assembly aa{}
.method static void Main()
{
  // エントリポイント
  .entrypoint
  // ローカル変数の宣言
  .locals( int32 i, int32 j )
 
  // 変数iのアドレスを取得
    ldloca i // 変数iのアドレスをスタックにpush
  stloc j // スタックにある変数iのアドレスをpopして 変数jに格納
 
  // 変数jの内容を出力
    ldloca j // ToString()を呼ぶために変数jのアドレスをスタックにpush
    call instance string class [mscorlib]System.Int32::ToString() // j.ToString();
  call void class [mscorlib]System.Console::WriteLine(string) // 標準出力に出力
  
  ret
}

Cでは・・・

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
 
 
-
|
|
|
|
!
#include <stdio.h>
void main()
{
  int i,j;
 
  j = (int)&i;
  printf("%d\n", j );
}


書式

ldloca <変数名>


参照


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