IL语言常用语法

IL(.NET 中间语言)是.NET 平台的核心中间语言,贴近底层且基于堆栈操作,语法围绕指令集方法元数据标记展开,以下是常用语法的核心要点:

一、方法定义的元数据标记(描述方法特性)

用于声明方法的可访问性、行为契约等,类似 C# 中方法的修饰符:

类别常用标记含义说明
可访问性private/public/assembly(对应 C# internal)/family(对应 C# protected)等控制方法的调用范围(如 public 为公共可调用)
方法契约static/virtual/final/abstractstatic(静态方法,无实例引用);virtual(虚方法,支持重写);final(不可重写);abstract(抽象方法,无实现)
特殊实现标记specialname/pinvokeimpl/synchronizedspecialname(方法名特殊,如构造函数 .ctor);pinvokeimpl(P/Invoke 调用非托管代码);synchronized(自动同步,保证多线程安全)

二、核心指令分类与常用操作码

IL 指令基于堆栈操作(数据通过“栈”传递:指令从栈“弹出”操作数,执行后将结果“压入”栈),主要分为以下类别:

1. 堆栈操作(加载/存储数据到栈)
  • 加载常数ldc 系列,将常数压入栈。

    • 示例:ldc.i4.0(加载整数 0)、ldc.i4.1(加载整数 1)、ldc.r8 3.14(加载双精度浮点数 3.14)、ldstr "Hello"(加载字符串 "Hello")。
  • 加载参数ldarg 系列,将方法参数压入栈。

    • 示例:ldarg.0(加载第 0 个参数)、ldarg.1(加载第 1 个参数)。
  • 加载局部变量ldloc 系列,将局部变量压入栈。

    • 示例:ldloc.0(加载第 0 个局部变量)、ldloc.1(加载第 1 个局部变量)。
  • 加载字段/对象数据

    • ldfld:加载对象的某个字段值到栈(如 ldfld 类名::字段名)。
    • ldobj:加载堆中对象的全部数据到栈。
  • 存储操作:将栈顶数据弹出并存储。

    • stloc 系列:如 stloc.0(将栈顶值存到第 0 个局部变量)。
    • starg 系列:将栈顶值存到方法参数。
    • stfld:将栈顶值存到对象的字段(如 stfld 类名::字段名)。
2. 数值与逻辑运算

对栈顶数据执行运算,结果再压回栈:

  • 算术运算add(加)、sub(减)、mul(乘)、div(除)、rem(取模)。
  • 比较运算ceq(比较是否相等)、cgt(比较是否大于)、clt(比较是否小于)。
  • 二进制逻辑and(与)、or(或)、not(非)、xor(异或)。
3. 控制流(分支、循环、返回)

控制程序执行流程:

  • 无条件跳转br(跳转至指定标签)、br.s(短跳转,范围更窄)。
  • 条件跳转
    • brtrue/brfalse:栈顶为 true/false 时跳转。
    • beq(相等则跳转)、bne.un(不相等则跳转)、bgt(大于则跳转)、blt(小于则跳转)等。
  • 方法返回ret(退出方法,栈顶值为返回值;若方法返回 void,则栈为空)。
4. 方法调用与对象操作
  • 方法调用
    • call:调用静态方法(直接指定方法,无虚方法调度)。
    • callvirt:调用实例方法(带虚方法表调度,支持多态)。
  • 对象创建与转换
    • newobj:创建新对象(调用构造函数,如 newobj 类名::.ctor)。
    • box:值类型转引用类型(装箱,如 intobject)。
    • unbox:引用类型转值类型(拆箱,如 objectint)。

三、语法执行模型

IL 是基于堆栈的语言:指令执行时,会从栈“弹出”操作数,执行运算后将结果“压入”栈。例如,执行 add 时,栈会弹出两个值、相加后将结果压回栈。需注意栈平衡(压入和弹出的次数要匹配),否则会导致运行时错误。

(若需了解“PLC 领域的指令列表(IL)”,其为工业控制的汇编式语法,以“助记符+操作数”控制 PLC 寄存器/IO,如 LD %I1.0(加载输入寄存器值)、OUT %Q1.0(输出到寄存器)等,但结合前序问题,此处重点为 .NET 平台的 IL 语法。)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯文小提莫

努力提高作品质量

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值