.assembly extern mscorlib {}
.assembly Test
{
.ver 1:0:1:0
}
.module test.exe
.method static void main() cil managed
{
.maxstack 5
.entrypoint
.locals init (int32, string)
ldc.i4 34
stloc.0
ldstr "Some Text for Local Variable"
stloc.1
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
ldloc.1
call void [mscorlib]System.Console::WriteLine(string)
ret
}
运行如下;
首先是定义了2个局部变量,一个是int32类型,一个是string类型;
指令的含义,
ldstr string—把一个字符串常量装入堆栈;
ldc.i4.n—把一个 32 位的常量( n 从 0 到 8)装入堆栈;
stloc.n— 把一个从堆栈中返回的值存入第 n( n 从 0 到 8)个局部变量;
执行了,
ldc.i4 34
stloc.0
这两句以后,把34赋给定义的第一个整型变量;
执行了,
ldstr "Some Text for Local Variable"
stloc.1
这两句以后,把"Some Text for Local Variable"赋值给定义的第二个string类型变量;
然后就是输出了;
再复习一下;
ldloc是入栈,
stloc是出栈;
ldloc,用来做压栈操作,将变量的值压入堆栈中;
stloc,用来做出栈操作,将堆栈的值传入变量中;
先定义了2个局部变量,一个是整型,一个是字符串;
然后把34放入评估堆栈,
然后把34放入第一个局部变量;
然后把字符串放入堆栈;
把字符串放入第二个局部变量;
把第一个局部变量入栈;
输出第一个局部变量的值;
把第二个局部变量入栈;
输出第二个局部变量的值;
ldc是把常量入栈,ldloc是把局部变量入栈;