首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
MSIL实用指南-位运算
】的更多相关文章
MSIL实用指南-位运算
C#支持的位运算是与.或.异或.取反.左移.右移,它们对应的指令是And.Or.Xor.Not.Shl.Shr. 取反运算只需要一个操作数,生成步骤是1.生成加载变量2.生成取反指令实例代码: ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Not); 其它五个运算都需要两个参数,它们的通用步骤1.生成加载左边变量2.生成加载右边变量3.生成运算指令 实例: ilGenerator.Emit(OpCodes.Ldarg_0)…
MSIL实用指南-比较运算
数值的比较就是大于.小于.等于.大于等于.小于等于.不等于,它们的运算结果都是布尔值.大于.小于.等于有直接对应的指令,分别是Cgt.Clt.Ceq.大于等于.小于等于.不等于没有直接对应的指令,它的运算实现一般是取反. 大于.小于.等于需要两个参数,它们的通用步骤1.生成加载左边变量2.生成加载右边变量3.生成比较运算指令 生成等于比较的代码实例: ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldarg_1); ilG…
MSIL实用指南-数学运算
C#支持的数学运算是加.减.乘.除.取模,它们对应的指令是Add.Sub.Mul.Div.Rem. 这五个运算都需要两个参数,它们的通用步骤1.生成加载左边变量2.生成加载右边变量3.生成运算指令 实例: ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.Emit(OpCodes.Sub); 完整的程序如下: using System; using System.Reflection…
MSIL实用指南-生成索引器
MSIL实用指南-生成索引器 索引器是一种特殊的属性,它有参数的,也有get和set方法,属性名称一般是"Item",并且方法名称一般名称是"get_Item"和"set_Item". 下面我们来生成如下的带有索引器的类 using System; namespace LX1_ILDemo { public class IndexerDemo { private string[,] _CustomerNames; public string th…
MSIL实用指南-Action的生成和调用
MSIL实用指南-Action的生成和调用 System.Action用于封装一个没有参数没有返回值的方法.这里生成需要Ldftn指令. 下面讲解怎生成如下的程序. class ActionTest { public static void RunAction(Action act) { act(); } public static void TestRunAction() { Action act = () => { Console.WriteLine("Test Action"…
MSIL实用指南-逻辑运算
逻辑运算有三种:与.或.非.实现它们可以用位运算指令And.Or.Not等三个指令.它们的使用方法和位运算一致. 完整的程序如下: using System; using System.Reflection; using System.Reflection.Emit; namespace LX1_ILDemo { class Demo18_BoolOP { static string binaryName = "Demo18_BoolOP.exe"; static string nam…
MSIL实用指南-加载bool、sbyte、byte、char、short等值
这一篇讲解怎么加载bool值.sbyte值.byte值.char值.short值. 加载bool值在.NET程序实际运行中,是没有true和false值的,实际上是以1和0表示它们,加载它们的指令是Ldc_I4_1和Ldc_I4_0.下面是实际例子:/* 加载true,即加载1 */ilGenerator.Emit(OpCodes.Ldc_I4_1);/* 加载false,即加载0 */ilGenerator.Emit(OpCodes.Ldc_I4_0); 加载sbyte值sbyte是8位有符号…
MSIL实用指南-局部变量的声明、保存和加载
这一篇讲解方法内的局部变量是怎么声明.怎样保存.怎样加载的. 声明局部变量声明用ILGenerator的DeclareLocal方法,参数是局部变量的数据类型,得到一个局部变量对应的创建类LocalBuilder.使用格式是LocalBuilder localBuilderx = ilGenerator.DeclareLocal(typeof(<数据类型>));实际例子 LocalBuilder localBuilderv1 = ilGenerator.DeclareLocal(typeof(…
MSIL实用指南-加载int值
这一篇讲的是怎样加载整数值到运算栈上.这一类的指令都是以Ldc_I4开头. Ldc_I4类OpCodes的Ldc_I4字段的功能是把一个int值压入运算栈上.它的使用方法是ilGenerator.Emit(OpCodes.Ldc_I4, <整数值>);产生的指令是ldc.i4 <整数值>几个例子 ilGenerator.Emit(OpCodes.Ldc_I4, 2000);//ldc.i4 2000 ilGenerator.Emit(OpCodes.Ldc_I4, -100);//…
MSIL实用指南-IL版hello world
我们学习编程开始时,一般用输出"hello world"的一段程序. C#版的"hello world"是 using System; namespace L01_HelloDemo { class HelloWorld { class Hello { public static void Main2() { Console.WriteLine("Hello World!"); Console.ReadKey(); } } } } 用生成IL方式…