1、简单的C#代码如下
using System;
class HelloWorld
{
  public static void Main()
  {
   Console.WriteLine("Hello World !");
  }
}
2、编译代码 Csc HelloWorld.cs
3、ildasm /output: helloworld.il hellworld.exe
   执行后的生成的helloworld.il代码如下:
   
//  Microsoft (R) .NET Framework IL Disassembler.  Version 1.1.4322.573
//  Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 1:0:5000:0
}
.assembly hello
{
  // --- 下列自定义属性会自动添加,不要取消注释 -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
  //                                                                                bool) = ( 01 00 00 01 00 00 )
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module hello.exe
// MVID: {88322604-DD05-427D-B4E1-5400E019D7D3}
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x06ce0000
//
// ============== CLASS STRUCTURE DECLARATION ==================
//
.class private auto ansi beforefieldinit HelloWorld
       extends [mscorlib]System.Object
{
} // end of class HelloWorld

// =============================================================

// =============== GLOBAL FIELDS AND METHODS ===================

// =============================================================

// =============== CLASS MEMBERS DECLARATION ===================
//   note that class flags, 'extends' and 'implements' clauses
//          are provided here for information only

.class private auto ansi beforefieldinit HelloWorld
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  Main() cil managed
  {
    .entrypoint
    // 代码大小       11 (0xb)
    .maxstack  1
    IL_0000:  ldstr      "Hello World !"
    IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000a:  ret
  } // end of method HelloWorld::Main

.method public hidebysig specialname rtspecialname
          instance void  .ctor() cil managed
  {
    // 代码大小       7 (0x7)
    .maxstack  1
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method HelloWorld::.ctor

} // end of class HelloWorld

// =============================================================

//*********** 反汇编完成 ***********************
// WARNING: Created Win32 resource file hello.res

4、小结
   们粗略的感受是它很类似于早先的汇编语言,但它具有了对象定义和操作的功能。我们可以看到它定义并实现了一个继承自System.Object 的HelloWorld类及两个函数:Main()和.ctor()。其中.ctor()是HelloWorld类的构造函数,可在"HelloWorld.cs"源代码中我们并没有定义构造函数呀--是的,我们没有定义构造函数,但C#的编译器为我们添加了它。你还可以看到C#编译器也强制HelloWorld类继承System.Object类,虽然这个我们也没有指定。关于这些高级话题我们将在以后的讲座中予以剖析。

那么PE文件是怎么执行的呢?下面是一个典型的C#/.NET应用程序的执行过程:

1.
 用户执行编译器输出的应用程序(PE文件),操作系统载入PE文件,以及其他的DLL(.NET动态连接库)。
 
2.
 操作系统装载器根据前面PE文件中的可执行文件头跳转到程序的入口点。显然,操作系统并不能执行中间语言,该入口点也被设计为跳转到mscoree.dll(.NET平台的核心支持DLL)的_ CorExeMain()函数入口。
 
3.
 CorExeMain()函数开始执行PE文件中的中间语言代码。这里的执行的意思是通用语言运行时按照调用的对象方法为单位,用即时编译器将中间语言编译成本地机二进制代码,执行并根据需要存于机器缓存。
 
4.
 程序的执行过程中,垃圾收集器负责内存的分配,释放等管理功能。
 
5.
 程序执行完毕,操作系统卸载应用程序。

声明:参考著作《.NET框架程序设计(修订版) 》.李建忠

转载于:https://www.cnblogs.com/kuailewangzi1212/archive/2007/02/27/658313.html

donet编译原理(C#)相关推荐

  1. c++ tuling123_现代编译原理-图灵计算机科学丛书.pdf

    基础的重要性(程序员之路) 学习编程有几年了,感觉走了不少弯路,而不少的学弟学妹又在重蹈我当初的覆辙,不免有些痛心.最近在网 上也看了许多前辈们的经验建议,再结合自己的学习经历在这里谈谈基础的重要性, ...

  2. 学了编译原理能否用 Java 写一个编译器或解释器?

    16 个回答 默认排序​ RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...

  3. 对学习编译原理的看法

    我认为编译原理这本书是一门与代码做斗争的课程,学习编译原理能够追寻程序设计语言的本质,了解计算机各种语言编译的原理.学习了编译原理能够更加深入的了解计算机各种高级语言使用的原理,能使自己更加容易更加好 ...

  4. 《OpenMP编译原理及实现技术》摘录

    内容摘自<OpenMP编译原理及实现技术>第2章 代码测试环境:Windows7 64bit, VS2010, 4核机. 可以说OpenMP制导指令将C语言扩展为一个并行语言,但OpenM ...

  5. 编译原理(六)自底向上分析之LR分析法

    自底向上分析之LR分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本概念 1. LR分析:从左到右扫描(L)自底向上进行规约(R),是规范规约,也即最右推导(规范推导) ...

  6. 编译原理上机实习c语言小子集编译程序的实现报告,编译原理上机实习指导书(2015-11修改).pdf...

    <编译原理上机实习>指导书 一.上机实习目的 理解编译程序的构造原理,掌握编译程序的构造方法与技术.通过实习,使学生既加深对 编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力 ...

  7. 我看过的编译原理方面的好文章

    本文不定期更新,最后更新于2019-7-6 编译原理 编译原理三大经典书籍(龙书 虎书 鲸书) 前端为什么要会正则表达式 - 知乎 一次性搞懂JavaScript正则表达式之引擎 - 掘金 没有AST ...

  8. 添物 不花钱学计算机及编程(预备篇)— 编译原理

    编译原理是将一门语言翻译为另一门语言的学科.如果您只是想当个简单的程序员是可以不用学习的,或者有个了解就可以.但是如果您想更好的发展,就要很好的掌握了. 这门课程最大的特色就是,要自己写代码学习,不能 ...

  9. 计算机的编译原理pdf,计算机编程基础--编译原理.pdf

    第一章 引论(1) 1.1 什么叫编译程序 编译程序:是指这样的程序,它能够把某种 语言的程序转换成另一种语言的程序, 而后者与前者在逻辑上是等价的.如果 源语言是诸如FORTRAN.Pascal.C ...

  10. 学习编译原理对下面这段java跳不出死循环大概能有较好的解释吧

    java 线程问题? public class ThreadTest {public static void main(String[] args){System.out.println(" ...

最新文章

  1. 写的书太受欢迎怎么办?北大《深度强化学习》重磅开放下载
  2. 大推荐——家庭书架·成功读库系列
  3. c语言变量名必须用小写 常量用大写,day02 -C语言 常量 变量 数据类型 进制转换 数据溢出...
  4. 什么样的数据应该放入缓存
  5. 洛谷 P2735 电网 Electric Fences Label:计算几何--皮克定理
  6. jQuery的表单验证
  7. 这样的AI技术实战方式,大boss都看不下去了!
  8. html添加自动视频播放器,html5教程:[3]video标签轻松添加视频
  9. 《统计学》第八版贾俊平第八章假设检验知识点总结及课后习题答案
  10. Syzmlw 蜗居大结局
  11. ADB 常用技巧 汇总
  12. 云服务器aip,云服务器API接口-云服务器的使用
  13. 人脉就是钱脉,培养人脉的100个技巧。。。
  14. 我为什么鼓励你读博士?
  15. 图解排序算法及实现——快速排序 (Quick Sort)
  16. 怎么对阿里iconfont两个项目中的字体图标合并
  17. C++教程系列之-02-win10系统下codeblocks-20.03下载与安装
  18. 金属复合金属纳米簇/双金属纳米簇/贵金属纳米簇的制备步骤
  19. idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder
  20. [附源码]java毕业设计智慧农产品朔源系统

热门文章

  1. 银联二维码支付之主扫、被扫、查询接口
  2. 基于C#的图书管理系统
  3. 将CSDN文章下载为markdown文档
  4. 局域网打印机怎么连接_苹果手机怎么连打印机?苹果系统怎么连接网络打印机?一看就会...
  5. 阿里巴巴国际站关键字抓取工具
  6. maven配置环境变量
  7. 可靠性测试设备技术含量_可靠性测试中心
  8. 利用单片机做手机连点器(附别踩白块自动点击程序)
  9. 柯马机器人示教器编程_COMAU柯马机器人示教器按键失灵,无显示专业维修
  10. EMF图片插入WORD另存为PDF图片不清晰