1

関数ポインタを経由した関数の呼び出し

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
!
 
 
 
-
|
|
!
//アセンブリマニフェスト
.assembly a {}
 
// エントリポイントとなる関数
.method public static void main()
{
    // エントリポイントの指定
    .entrypoint
    
    // 関数ポインタ経由での関数の呼び出し と返り値の表示
    ldftn    string bee()    // bee()の関数ポインタをpush
    calli    string ()    // 関数ポインタをcall // 返り値の型と引数を指定する
    call    void [mscorlib]System.Console::WriteLine(string) // 返り値を標準出力に出力
    
    ret
}
 
// "bee"という文字列を返す関数
.method public static string bee()
{
    ldstr    "bee"
    ret
}

実行結果:

bee

2

引数のある関数に対する関数ポインタ経由での呼び出し

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
!
 
 
 
-
|
|
!
//アセンブリマニフェスト
.assembly a {}
 
// エントリポイントとなる関数
.method public static void main()
{
    // エントリポイントの指定
    .entrypoint
    
    // 関数ポインタ経由での関数の呼び出し と返り値の表示
    ldstr    "goo"    // bee()に渡す引数をpush
    ldftn    string bee( string )    // bee()の関数ポインタをpush
    calli    string (string)    // 関数ポインタをcall // 返り値の型と引数を指定する
    call    void [mscorlib]System.Console::WriteLine(string)    // 返り値をコンソールに表示
 
    ret
}
 
// 引数を返り値としてそのまま返す関数
.method public static string bee( string str1 )
{
    ldarg str1 // 引数str1をpush
    ret
}

実行結果:

goo

3

関数ポインタを一度変数に格納してからの呼び出し

すべてを展開すべてを収束
  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
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
-
|
|
!
//アセンブリマニフェスト
.assembly a{}
 
// エントリポイントとなる関数
.method public static void main()
{
    // エントリポイントの指定
    .entrypoint
 
    // ローカル変数の宣言
    .locals( object ptr )
 
 
    // bee()の関数ポインタを変数ptrに格納
    ldftn    string bee() // bee()の関数ポインタをスタックにpush
    stloc ptr // スタックからpopして変数ptrに格納
 
 
    // 関数ポインタの呼び出しと返り値の表示
    ldloc ptr // 変数ptrをスタックにpush
    calli    string () // 関数ポインタをcall // 返り値の型と引数を指定する
    call    void [mscorlib]System.Console::WriteLine(string) // 返り値を標準出力に出力
    
    ret
}
 
// "bee"という文字列を返す関数
.method public static string bee()
{
    ldstr    "bee"
    ret
}

実行結果:

bee

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