原文链接

让我们从一个简单的main函数开始。和C#不同,CLI不要求一个方法属于一个类。入口函数也不一定要叫做main;但是为了简单起见,我将会使用这个命名。

.method static void main()
{.entrypoint.maxstack 1ldstr "Hello world!"call void [mscorlib]System.Console::WriteLine(string)ret
}

main函数被称作函数定义,因为同时提供了签名和函数体。相反,当只提供了函数签名,而没有提供函数体时,它被称为函数声明。函数声明经常被当作调用对象使用,而函数定义提供了真正的实现。

一个函数定义由 .method 指令开始,并在全局作用域或者一个类中被定义。程序入口必须是静态的,意味着调用这个函数不需要实例,我们使用static关键字来表示。声明一个全局函数是静态的看起来是冗余的,但是如果你在某些情况下忽略了static关键字,那么ILASM编译器就会发脾气。如果函数签名变为 ’ void main() ‘,那么就表示不返回值,并且不需要参数。

.entrypoint 指令告诉运行时这个函数是这个程序的入口。一个程序只能有个一个方法用这个指令指示。

.maxstack 指令表示这个函数希望有多少个栈槽。比如把两个数相加需要把这两个数都推入栈中并调用add指令,add指令会把两个数从栈中弹出,并把返回值推到栈中,那么你将需要两个栈槽。

ldstr指令把字符串推入栈中,在Writeline函数中作为参数。call指令调用 System.Console类中的静态函数Writeline,这是一个函数声明的例子。它提供了Writeline函数完整的签名,所以运行时可以确定调用哪个WriteLine。

最后ret指令返回控制权给调用者。在入口函数中调用它,会导致程序结束。

MSIL简介 - Part1 - HelloWorld相关推荐

  1. php语言开始和结束分别为,0055 PHP语言简介和HelloWorld

    0055 PHP语言简介和HelloWorld 作者:PHPYuan 时间:2018-10-01 03:41:29 第3章学习了如何编写JavaScript代码来动态修改网页内容. 虽然JavaScr ...

  2. MSIL简介 - Part 2 - 使用局部变量

    在MSIL简介系列的第2部分,我将会探索局部变量的使用.如果没有变量,那么一个程序将会很无聊.为了解释如何使用变量,让我们写一个简单的求和程序. 在一个MSIL函数中,变量可以通过.locals指令声 ...

  3. OpenCL学习笔记(三):OpenCL安装,编程简介与helloworld

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. OpenCL安装 安装我不打算 ...

  4. std string与线程安全_C++标准库多线程简介Part1

    Part1:线程与互斥量 本篇文章将简单的介绍一下C++的标准线程库,本篇内容十分基础,如果你有C++多线程相关的使用经验或者知识,就不必在这篇文章上浪费时间了... 如果你认为本篇文章对你有帮助,请 ...

  5. MSIL简介 - Part 3 - 定义类型

    在本期的MSIL 系列中,我将描述类型是怎么定义的. 下面是一个最小引用类型,House. .class Kerr.RealEstate.House {.method public void .cto ...

  6. Java简介与HelloWorld第一行代码

    一.基本信息 1.设计人:詹姆斯·戈士林博士(Sun公司研究院院士) 2.创建时间:1995年 3.特点:跨平台,用Java编写的程序可以运行在任何平台和设备上,如跨越IBM个人电脑.MAC苹果计算机 ...

  7. zz JNI学习(一)、JNI简介和HelloWorld示例

    写的不错,分享下 http://blog.csdn.net/lonelyroamer/article/details/7930073

  8. 神码ai人工智能写作机器人_机器学习简介part1与人工智能的比较

    神码ai人工智能写作机器人 https://www.eastwestbank.com/ReachFurther/en/News/)https://www.eastwestbank.com/ReachF ...

  9. 16、GATK使用简介 Part1/2

    转载:http://blog.sina.com.cn/s/blog_6721167201018fyw.html GATK (全称The Genome Analysis Toolkit)是Broad I ...

最新文章

  1. 32位地址的寻址方式
  2. 我用 MySQL 干掉了一摞简历
  3. TextView的部分点击事件和点击事件
  4. 周报_2012第11周(2012/03/11-2012/03/17)
  5. 浅谈分布式存储系统的数据分布算法
  6. mysql 选取数据库_mysql选取数据库
  7. NET Core-学习笔记(二)
  8. 零基础云计算学习路线,到底什么是云计算?
  9. 数字贸易标准体系框架
  10. 10分钟带你进入Swagger的世界,快来看一看吧
  11. 常用的140个Win XP设置技巧
  12. java SSM 框架 多数据源
  13. 辞职的理由,似乎大家都说不是为了钱
  14. PTA Easy chemistry 化学方程式等价判定 string 状态机
  15. 张志华-统计机器学习-概论
  16. 异步请求 ajax的使用详解
  17. 【RT-Thread】nxp rt10xx SFUD和FAL组件搭建与使用
  18. 64位WIN7下虚拟机安装winxp
  19. 数据库迁移之mysql到达梦数据库
  20. 语音识别之HTK入门(一)HTK的下载配置

热门文章

  1. FPGA学习——基本结构
  2. 山东省考中级护士需要职称计算机,护师职称计算机考试相关政策
  3. 96年创业者给你的建议
  4. linux系统中如何退出vim编辑模式
  5. P2111 考场奇遇
  6. 【Unity】Unity地形入门问题集锦
  7. Twelfth3: Keepalived highly available Ceph deployed distributed storage | Cloud computing
  8. Flink大数据量调优思路总结(一)
  9. Java-类作为形式参数的问题
  10. 企业微信汇报怎么定时提醒?如何导出?