了解MSIL汇编和IL汇编评估堆栈


.assembly extern mscorlib {}

 .assembly Test
 {
     .ver 1:0:1:0
 }
 .module test.exe
  
 .method static void main() cil managed
 {
     .maxstack 1
     .entrypoint
     
     ldstr "I am from the IL Assembly Language..."
     
     call void [mscorlib]System.Console::WriteLine (string)
     ret
 }

这是MSIL汇编的hello world程序;保存为test1.il,

拷贝到.netframework目录,然后用ilasm构建,结果如下;

先看一下main()方法中的前2条语句;

第一条指令是最大栈(.maxstack 1),它告诉编译器我们要加载到内存(实际是评估堆栈)中去的项的最大数目;
第二条,.entrypoint 指令告诉编译器去把这个函数标记为整个应用程序的入口点(Entry Point ),也就是执行这个应用程序时最先执行的函数。

上面提到评估堆栈,看一下什么是评估堆栈;

Evaluation Stack,有时翻译为评估堆栈,

Evaluation Stack
     是一个非常重要的数据结构,它在内存分配和我们的应用之间起桥梁作用,所有的计算、结果数据的移入移出都要通过它,它是一个LIFO的栈,例如我们可以用各种load指令来从其它存储区取得数据放入Evaluation Stack,可以看成是push(压栈),也可以使用各种store指令来将当前计算结果存储到相应的存储区,可以看成是pop(出栈)。
     如果方法没有返回值则要保证方法调用结束时,Evaluation Stack为空,如果有返回值则方法调用结束的时候Evaluation Stack只存该返回值,如果违反上述规则,则运行时会抛出InvalidProgramException的异常。

这是网上资料的一个图,Evaluation Stack 和其它存储区的关系如下:

我还不太理解,有时间继续; 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值