zoukankan      html  css  js  c++  java
  • 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

    崔国亮

  • 相关阅读:
    【转发】揭秘Facebook 的系统架构
    【转发】淘宝网架构分享总结
    【转发】淘宝网采用什么技术架构来实现网站高负载的
    【转发】浅析淘宝网首页信息架构的变迁
    【转发】Html5 File Upload with Progress
    (9/18)重学Standford_iOS7开发_动画、自动布局_课程笔记
    (8/18)重学Standford_iOS7开发_协议、block、动画_课程笔记
    (7/18)重学Standford_iOS7开发_视图、绘制、手势识别_课程笔记
    (6/18)重学Standford_iOS7开发_控制器多态性、导航控制器、选项卡栏控制器_课程笔记
    (5/18)重学Standford_iOS7开发_视图控制器生命周期_课程笔记
  • 原文地址:https://www.cnblogs.com/cuiguoliang/p/9981597.html
Copyright © 2011-2022 走看看