注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

IL程序中实现循环  

2011-10-29 12:35:48|  分类: MSIL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 这个是我用IL语言编写的,发现用这个编写程序一定要严格注意堆栈的平衡,其他地方和汇编其实差不多,甚至更简单。直接贴代码:

//循环体演示,计算1+2+3+...+100

.assembly Castor

{

    .ver 1:0:0:0

}

.module XDModule

.class LOOP extends System.Object

{

    .method public static void Entry()

    {

           .entrypoint

           .locals init(int32 myInt,int32 Sum)

           //初始化

           ldc.i4.0

           stloc myInt

           ldc.i4.0

           stloc Sum

           //myInt=Sum=0,堆栈为空

          

           //循环体

           Label1:

           nop

           //Sum=Sum+myInt

           ldloc myInt

           ldloc Sum

           add

           stloc Sum//堆栈为空

           //myInt++

           ldloc myInt

           ldc.i4.1

           add

           stloc myInt

           //比较

           ldloc myInt

           ldc.i4.s 100

           ble.s Label1//pop1+pop1,push 0

           ldloc Sum

           call void [mscorlib]System.Console::WriteLine(int32)

           ldstr"Press Enter To Exit"

           call void [mscorlib]System.Console::WriteLine(string)

        call string [mscorlib]System.Console::ReadLine()

        pop

           ret

    }

}

程序运行效果如下: 

IL程序中实现循环 - Castor - 趁年轻,多折腾

使用反汇编显示高级语言如下

public static void Entry ()

{

     int num1 = 0;

     int value = 0;

     do

     {

          value = num1 + value;

          num1++;

     }

     while (num1 <= 0x64);

     Console.WriteLine(value);

     Console.WriteLine("Press Enter To Exit");

     Console.ReadLine();

}

看样子是Do-While循环,另外常数还是使用的十六进制,比较有意思。而且也验证了在反汇编的时候会丢失变量名的问题,即使是使用IL显示,得到的也是  int32 num1,int32 num2这样的变量,而且名称因反汇编程序的不同而不同。

  评论这张
 
阅读(580)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016