MSIL简介 - Part1 - HelloWorld
原文链接
让我们从一个简单的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相关推荐
- php语言开始和结束分别为,0055 PHP语言简介和HelloWorld
0055 PHP语言简介和HelloWorld 作者:PHPYuan 时间:2018-10-01 03:41:29 第3章学习了如何编写JavaScript代码来动态修改网页内容. 虽然JavaScr ...
- MSIL简介 - Part 2 - 使用局部变量
在MSIL简介系列的第2部分,我将会探索局部变量的使用.如果没有变量,那么一个程序将会很无聊.为了解释如何使用变量,让我们写一个简单的求和程序. 在一个MSIL函数中,变量可以通过.locals指令声 ...
- OpenCL学习笔记(三):OpenCL安装,编程简介与helloworld
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. OpenCL安装 安装我不打算 ...
- std string与线程安全_C++标准库多线程简介Part1
Part1:线程与互斥量 本篇文章将简单的介绍一下C++的标准线程库,本篇内容十分基础,如果你有C++多线程相关的使用经验或者知识,就不必在这篇文章上浪费时间了... 如果你认为本篇文章对你有帮助,请 ...
- MSIL简介 - Part 3 - 定义类型
在本期的MSIL 系列中,我将描述类型是怎么定义的. 下面是一个最小引用类型,House. .class Kerr.RealEstate.House {.method public void .cto ...
- Java简介与HelloWorld第一行代码
一.基本信息 1.设计人:詹姆斯·戈士林博士(Sun公司研究院院士) 2.创建时间:1995年 3.特点:跨平台,用Java编写的程序可以运行在任何平台和设备上,如跨越IBM个人电脑.MAC苹果计算机 ...
- zz JNI学习(一)、JNI简介和HelloWorld示例
写的不错,分享下 http://blog.csdn.net/lonelyroamer/article/details/7930073
- 神码ai人工智能写作机器人_机器学习简介part1与人工智能的比较
神码ai人工智能写作机器人 https://www.eastwestbank.com/ReachFurther/en/News/)https://www.eastwestbank.com/ReachF ...
- 16、GATK使用简介 Part1/2
转载:http://blog.sina.com.cn/s/blog_6721167201018fyw.html GATK (全称The Genome Analysis Toolkit)是Broad I ...
最新文章
- 32位地址的寻址方式
- 我用 MySQL 干掉了一摞简历
- TextView的部分点击事件和点击事件
- 周报_2012第11周(2012/03/11-2012/03/17)
- 浅谈分布式存储系统的数据分布算法
- mysql 选取数据库_mysql选取数据库
- NET Core-学习笔记(二)
- 零基础云计算学习路线,到底什么是云计算?
- 数字贸易标准体系框架
- 10分钟带你进入Swagger的世界,快来看一看吧
- 常用的140个Win XP设置技巧
- java SSM 框架 多数据源
- 辞职的理由,似乎大家都说不是为了钱
- PTA Easy chemistry 化学方程式等价判定 string 状态机
- 张志华-统计机器学习-概论
- 异步请求 ajax的使用详解
- 【RT-Thread】nxp rt10xx SFUD和FAL组件搭建与使用
- 64位WIN7下虚拟机安装winxp
- 数据库迁移之mysql到达梦数据库
- 语音识别之HTK入门(一)HTK的下载配置