IL命令初学者要知道的事
在一个中间语言程序中,如果某一行以“.”开始,代表这是一个传输给汇编工具的指令;而不是以“.”开始的行是中间语言的代码。上图中.method是方法定义指令,定义了Main方法,参数在“()”中,IL代码在“{}”中。.entrypoint是入口指令,表明该方法是入口方法。.maxstack指定了栈的最大深度为8。下面的IL_n是代码标签,后面是IL代码。nop是空指令;ldstr指令向栈中压入字符串“Hello World!”;call指令调用静态方法Console::WriteLine (string)和Console::read();pop弹出栈顶的值;ret指令表示方法体的结束。IL支持“//”和“/* */”的注释方法。
提示在中间语言中,如果需要调用一个方法,需要指定方法的全名,包括它的名称域(namespace)、类名、返回值类型和参数的数据类型。
表1-3列举了IL的其他一些常用指令,更多的指令可以查看IL指令表。
表1-3IL常用指令
指令 描述
.assembly <程序集名称> {} 设置程序集
ldc.i4.n 把一个 32位的常量(n从0到8)装入堆栈
stloc.n 把一个从堆栈中返回的值存入第n(n取0~8)个局部变量
add 2值相加。命令的参数必须在调用前装入堆栈,该函数从堆栈中移除参数并把运算后的结果压入堆栈
sub 2值相减
mul 2值相乘
newarr type 生成一个元素类型为type 的数组。数组的大小必须在调用该命令前装入堆栈。该命令会把一个数组的引用装入堆栈
stelem.i4 给一个数组成员赋值。数组的引用、下标和值必须在调用该命令前装入堆栈
ldelema type 把数组元素的地址装入堆栈。数组的引用和下标必须在调用该命令前装入堆栈。地址用来调用非静态函数
ldlen 把数组的长度装入堆栈。数组的引用必须在调用该命令前装入堆栈
ldloca.s variable 把变量的地址装入堆栈
ldc.i4.s value 把一个Int32的常量装入堆栈(用于大于8位的数)
conv.i4 把堆栈中的值转换成Int32类型
call instance function (arguments) 调用类的非静态函数
bge.s label 跳转至label 。如果value1≥value 2,value 1和value 2 必须在调用本命令前装入堆栈
br.s label 跳转至label
box value type 把一个值类型转成一个Object,并把该Object的引用装入堆栈
blt.s label 跳转至label 。如果value 1<value 2,value 1 和value 2 必须在调用本命令之前装入堆栈
ldelem.i4 把一个数组元素装入堆栈。数组引用和下标必须在调用本命令之前装入堆栈
ldarga.s argument 把函数参数的地址装入堆栈
dup 在堆栈上复制一个值
stind.i4 存储值的地址。地址和值必须在调用本命令之前装入堆栈
.field 定义类成员。和关键字public、private、static等一起使用
stsfld static field 用堆栈中的值替换静态字段的值
ldfld field 把一个非静态字段装入堆栈。类实例的地址必须在调用本命令之前装入堆栈
ldarg.n 把第n个参数装入堆栈。在非静态函数中,第0个参数是一个隐含的参数,代表this
newobj constructor 用构造函数constructor生成一个类的实例。构造函数的参数必须在调用本函数之前先装入堆栈。一个类的实例会被生成并装入堆栈
callvirt instance function 调用一个对象的后期绑定方法
了解上面的东西后可以看下面这篇基础文章可以让你知道的更多
https://www.jb51.net/article/39635.htm
崔国亮
IL命令初学者要知道的事的更多相关文章
- C# 范型约束 new() 你必须要知道的事
C# 范型约束 new() 你必须要知道的事 注意:本文不会讲范型如何使用,关于范型的概念和范型约束的使用请移步谷歌. 本文要讲的是关于范型约束无参构造函数 new 的一些底层细节和注意事项.写这篇文 ...
- 十件你需要知道的事,关于openstack-trove(翻译)
开源数据库即服务OpenStack Trove应该知道的10件事情 作者:Ken Rugg,Tesora首席执行官 Ken Rugg是Tesora的创始人,CEO和董事会成员. Ken的大部分职业都是 ...
- 关于Unicode,字符集,字符编码,每个程序员都应该知道的事
关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
- 漫谈ElasticSearch关于ES性能调优几件必须知道的事
lasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人惊 ...
- Weex学习与实践(一):Weex,你需要知道的事
Weex学习与实践(一):Weex,你需要知道的事 http://coderyi.com/posts/weex1/ 1.命令行工具:weex-toolkit https://github.com/w ...
- 学习IOS需要知道的事
什么是iOS iOS是一款由苹果公司开发的操作系统(OS是Operating System的简称),就像平时在电脑上用的Windows XP.Windows 7,都是操作系统 那什么是操作系统呢?操作 ...
- 网站开发进阶(三十八)Web前端开发规范文档你需要知道的事
Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...
- Web前端开发规范文档你需要知道的事
Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...
- EFS 你应该知道的事
需要备份或者还保留这个路径 %USERPROFILE%\AppData\Roaming\Microsoft\Crypto\RSA certmgr.msc 个人证书导出你开始使用EFS加密后的证书 ci ...
随机推荐
- bash命令集---文件的操作
git bash命令集: clear:清除窗口中的内容 ls touch cat more head tail mv cp rm diff chmod gzip gunzip gzcat lpr lp ...
- 【记录】无法读取配置节“AppSettings”,因为它缺少节声明
Web.config对大小写敏感, 把AppSettings改为appSettings即可.
- nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求.
最近在做一个前后端分离的个人博客,在做自己博客的时候有个想法,本来是打算用nginx作为静态文件服务器使用,django做后端程序. 我的前端页面用vue写的,结果用组件用嗨了,发现页面列表和 详情都 ...
- 洛谷 P1506 拯救oibh总部
P1506 拯救oibh总部 题目背景 oibh总部突然被水淹没了!现在需要你的救援…… 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用*号表示 ...
- 公告:本博客搬迁到:http://www.courtier.cc
公告: 您好,本人意见本博客搬迁到:http://www.courtier.cc
- PHP+FastCGI+Nginx动态请求处理配置
Nginx不支持对外部程序的调用,所以必须通过FastCGI接口实现对外部程序的调用从而实现对client动态页面请求的处理. CGI的英文全称为Common Gateway Interface(公共 ...
- PHP类中的__get()和__set函数到底有什么用
PHP类中的__get()和__set函数到底有什么用 一.总结 一句话总结:当试图获取一个不可达变量时,类会自动调用__get.同样的,当试图设置一个不可达变量时,类会自动调用__set.在网站中, ...
- 16.REPL 命令
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html ctrl + c - 退出当前终端. ctrl + c 按下两次 - 退出 Node REPL ...
- BZOJ5394: [Ynoi2016]炸脖龙(欧拉广义降幂)
就是让你求这个: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5394 解题思路: NOIP2018后第一道题,感觉非常像那个上帝与集合的 ...
- STM32 之ADC单次转换模式和连续转换模式
一.背景 在STM32中的AD的单通道采样中可以设置成单次转换模式和连续转换模式,如何理解这两个转换模式的区别,通过程序又是怎样实现的? 二.正文 首先理解单次转换模式,即ADC进行单次转换(单样本) ...