当前位置: 首页 > 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

相关文章:

  • JsonObject (JSON 数据中的一个对象)
  • 2024 第五次周赛
  • of 操作函数——获取属性
  • Web前端开发--HTML语言
  • 小程序开发进阶之路: 重新认识产品经理
  • 【韩老师零基础30天学会Java 】03章 变量
  • 【思科、华为、华三、锐捷网络设备巡检命令】
  • 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沉浸式编程体验
  • 锁相环技术,单边带信号,信号的调制