《C# to IL》第三章 选择和循环
2009-06-01 08:31:05 来源:WEB开发网布尔运算符TRUE或FALSE是由C#引进的关键字,用来使程序员的工作更加轻松。由于IL不直接支持这些关键字,所以它会替代地使用数字1或0。
指令ldsfld把静态变量的值加载到栈上。指令brfalse对栈进行扫描。如果它找到了数字1,它就会将其解释为TRUE,而如果它找到了数字0,它就会将其解释为FALSE。
在这个例子中,它在栈上找到的值是1或TRUE,所以它不会跳转到标号IL_0011。在从C#到IL的转换中,ildasm使用以IL_开始的名称来代替标号。
指令brfalse表示“如果FALSE就跳转到标号”。这不同于br,后者总是会导致一个跳转。从而,brfalse是一个有条件的跳转指令。
在IL中没有提供if语句功能的指令。C#中的if语句会被转换为IL中的转移(branch)指令。我们所处的任何汇编器,都没有像if结构体这样的高级概念。
可以看到,我们刚刚学到的那些知识,对于我们掌握IL是非常重要的。这将帮助我们获得——区别关于哪个概念是IL的一部分而哪些是由编程语言的设计者引进——的能力
尤其需要注意的是,如果IL不支持某个特性,它就不能用任何.NET编程语言实现。从而,熟悉IL所支持的各种概念的重要性——怎么强调都不过分。
a.cs
class zzz
{
static bool i = true;
public static void Main()
{
if (i)
System.Console.WriteLine("hi");
else
System.Console.WriteLine("false");
}
}
a.il
.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.field private static bool i
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldsfld bool zzz::i
brfalse.s IL_0013
ldstr "hi"
call void [mscorlib]System.Console::WriteLine(class System.String)
br.s IL_001d
IL_0013: ldstr "false"
call void [mscorlib]System.Console::WriteLine(class System.String)
IL_001d: ret
}
.method public hidebysig specialname rtspecialname static void .cctor() il managed
{
ldc.i4.1
stsfld bool zzz::i
ret
}
}
- ››Illustrator CS6 打造孔雀花纹的字体
- ››TOscilloscope 仿Windows任务管理器CPU使用记录组...
- ››Illustrator教程:设计制作几何花瓣LOGO
- ››Illustrator实例教程:漂亮证卡变幻线的制作
- ››Illustrator文字教程:制作漂亮质感描边字
- ››Illustrator鼠绘:渐变工具运用绘制金属闹钟
- ››Illustrator鼠绘:教你画一个可爱卡通宝宝教程
- ››Illustrator简单四步做透明气泡教程
- ››Illustrator教程:制作漂亮的新货吊牌
- ››Illustrator教程:改变圆角矩形中一个圆角半径
- ››Illustrator教程:如何用网格工具绘制花瓣
- ››Illustrator涂抹命令打造文字草图特效
更多精彩
赞助商链接