すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
// アセンブリマニフェスト
.assembly x {}
 
// エントリポイントとなる関数
.method static void main()
{
    // エントリポイントの宣言
    .entrypoint
 
    // ローカル変数の宣言
    .locals ( string message )
 
    // 変数messageに文字列を格納
        ldstr    "Hello! I'm MSIL Assembly.\n" // 文字列をスタックにpush
    stloc    message // スタックからpopして変数messageに格納
 
    // 変数messageの内容を標準出力に出力
        ldloc    message // 変数messageをスタックにpush
    call    void class [mscorlib]System.Console::WriteLine(string) // 出力
 
    ret
}

C#では・・・ :

すべてを展開すべてを収束
  1
  2
  3
  4
  5
-
|
|
|
!
 void main(){
     string message;
     message = "Hello! I'm MSIL Assembly\n";
     System.Console.WriteLine(message);
 }

VB.NETでは・・・ :

  1
  2
  3
  4
  5
 public sub main()
     dim message as string
     message = "Hello! I'm MSIL Assembly" & vbcrlf
     System.Console.WriteLine(message)
 end sub

ローカル変数の初期化について

基本的に自動では初期化されません。

すべてを展開すべてを収束
  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 x {}
 
// エントリポイントとなる関数
.method static void main()
{
    // エントリポイントの宣言
    .entrypoint
 
    // ローカル変数の宣言
    .locals ( int32 x, int32 y )
 
    // 変数xの内容を標準出力に出力
      ldloca    x // 変数xのアドレスをスタックにpush
      call      instance string class [mscorlib]System.Int32::ToString() // int32クラスのToString()を呼び出す 
    call      void class [mscorlib]System.Console::WriteLine(string) // 出力
 
    // 変数yの内容を標準出力に出力
      ldloca    y // 変数yのアドレスをスタックにpush
      call      instance string class [mscorlib]System.Int32::ToString() // int32クラスのToString()を呼び出す
    call      void class [mscorlib]System.Console::WriteLine(string) // 出力
 
    ret
}

実行結果(例):

112722008
112722008

stringの場合は""になります。

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
!
// アセンブリマニフェスト
.assembly x {}
 
// エントリポイントとなる関数
.method static void main()
{
    // エントリポイントの宣言
    .entrypoint
 
    // ローカル変数の宣言
    .locals ( string message )
 
    // 変数messageの内容を標準出力に出力
        ldloc    message // 変数messageをスタックにpush
    call    void class [mscorlib]System.Console::WriteLine(string) // 出力
 
    ret
}

実行結果:

.localsの後にinitをつけると自動で初期化してくれます。

すべてを展開すべてを収束
  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 x {}
 
// エントリポイントとなる関数
.method static void main()
{
    // エントリポイントの宣言
    .entrypoint
 
    // ローカル変数の宣言
    .locals init ( int32 x, int32 y )
 
    // 変数xの内容を標準出力に出力
      ldloca    x // 変数xのアドレスをスタックにpush
      call      instance string class [mscorlib]System.Int32::ToString() // int32クラスのToString()を呼び出す 
    call      void class [mscorlib]System.Console::WriteLine(string) // 出力
 
    // 変数yの内容を標準出力に出力
      ldloca    y // 変数yのアドレスをスタックにpush
      call      instance string class [mscorlib]System.Int32::ToString() // int32クラスのToString()を呼び出す
    call      void class [mscorlib]System.Console::WriteLine(string) // 出力
 
    ret
}

実行結果(例):

0
0

参照


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