当前位置: 首页 > article >正文

了解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 和其它存储区的关系如下:

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

 

 


http://www.kler.cn/a/18102.html

相关文章:

  • 【机器学习】平均绝对误差(MAE:Mean Absolute Error)
  • AndroidStudio-文本显示
  • 力扣--树题总结
  • 2.操作系统常见面试问题2
  • SQL HAVING子句
  • 企业级容器技术docker之一键生成 Docker Compose
  • 【思科、华为、华三、锐捷网络设备巡检命令】
  • PAT A1035 Password
  • 机器人控制系统学习和研究中数学的重要性
  • 数据库系列-什么是 JDBC?它的作用是什么?
  • centos7 安装python的命令
  • 【Halcon】找到设备上的 标识牌
  • Java设计模式(十八)中介者模式
  • Nacos注册中心一些配置说明
  • 《Netty》从零开始学netty源码(五十三)之PoolThreadCache的功能
  • MySQL面试八股文:索引篇
  • 我把Solon打包成了native image,速度快的惊人
  • 【linux的学习与软件安装】
  • 计算机操作系统实验:页面置换算法的实现
  • 充电桩测试设备TK4800充电桩现校仪检定装置
  • MySQL优化二索引使用
  • 信息安全从业人员职业规划(甲方乙方分别说明)
  • 中兴B860AV2.1-T(M)-高安版-当贝纯净桌面线刷固件包
  • Facebook 用户量十分庞大,为什么还使用 MySQL 数据库?
  • IDEA沉浸式编程体验
  • 锁相环技术,单边带信号,信号的调制