《C# to IL》第三章 选择和循环
2009-06-01 08:31:05 来源:WEB开发网l 如果栈顶的值是0,那么程序将跳转到ret指令。
上面的程序,正如你所看到的那样,并不打算停止。它会继续流动,就像一个起源于一个巨大冰川的水流。
a.cs
class zzz
{
static int i = 2;
public static void Main()
{
i = i + 3;
System.Console.WriteLine(i);
}
}
a.il
.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.field private static int32 i
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldsfld int32 zzz::i
ldc.i4.3
add
stsfld int32 zzz::i
ldsfld int32 zzz::i
call void [mscorlib]System.Console::WriteLine(int32)
ret
}
.method public hidebysig specialname rtspecialname static void .cctor() il managed
{
ldc.i4.2
stsfld bool zzz::i
ret
}
}
Output
5
IL没有操作符用来做两个数字的加法,而是使用add指令。
add指令需要用来做加法的两个数字,也就是栈上开始的2个有效的元素。因此,ldsfld指令把静态变量i的值和常量值3放到栈上。随后,add指令把它们相加并把结果放到栈上。它还会从栈上移除用来做加法的2个数字。
一旦指令被执行了,IL中的大多数指令就会摆脱栈上的参数,也就是该指令要操作的参数。
使用指令stsfld将静态变量i初始化为加法的结果总和。剩下的代码直接显示了变量i的值。
在IL中没有++操作符的等价物。它会被转换为指令ldc.i4.1。同样,两个数字相乘,需要使用mul指令;相减,就使用sub指令,等等。它们在IL中都有等价物。之后的代码保持不变。
- ››Illustrator CS6 打造孔雀花纹的字体
- ››TOscilloscope 仿Windows任务管理器CPU使用记录组...
- ››Illustrator教程:设计制作几何花瓣LOGO
- ››Illustrator实例教程:漂亮证卡变幻线的制作
- ››Illustrator文字教程:制作漂亮质感描边字
- ››Illustrator鼠绘:渐变工具运用绘制金属闹钟
- ››Illustrator鼠绘:教你画一个可爱卡通宝宝教程
- ››Illustrator简单四步做透明气泡教程
- ››Illustrator教程:制作漂亮的新货吊牌
- ››Illustrator教程:改变圆角矩形中一个圆角半径
- ››Illustrator教程:如何用网格工具绘制花瓣
- ››Illustrator涂抹命令打造文字草图特效
更多精彩
赞助商链接