解密微软中间语言的系列文章将通过一些简单易懂的方式来揭示中间语言的复杂原理。这些原理通过详细的例子来阐述。在一些例子中同时给出了源代码和中间代码,通过比较源代码和中间代码,我们可以更好地理解编译器的局限性,指导我们编写出更好更快的代码。

微软中间语言概述 1.用中间语言编写的一个简单程序

让我们从经典的Hello World例子开始。首先在一个文本编辑器中输入以下的代码,并保存为 HelloWorld,il:

.assembly HelloWorldIL {}

.method static void HelloWorld() {

.entrypoint

ldstr "Hello World."

call void [mscorlib]System.Console::WriteLine(class System.String)

在一个中间语言程序中,如果某一行以“.”开始,则代表这是一个传输给汇编工具的指令,该指令要求汇编工具执行某些操作,例如生成一个函数或类。而没有以“.”开始的行是中间语言的代码。在中间语言中方法通过汇编命令method来定义,汇编命令后跟方法的返回值、名称和参数。方法体被包含在{}中。例子中的ret代表该方法的结束。

一个中间语言文件可以包含很多函数,汇编工具没有办法分辨应该首先执行哪一个方法。在诸如C#或VB这一类高级语言中,程序的入口方法通常都有特定的名称,例如在C#中的public static void Main()。这就是上面的汇编工具发出错误提示的原因。在中间语言中,第一个被执行的方法被称为入口函数(EntryPoint Function)。为了告诉汇编工具HelloWorld是入口函数,我们需要在代码中增加一条汇编命令entrypoint,该命令可以放在方法体中的任何位置。需要注意的是在一个程序集中只能有一个入口函数。

中间语言代码通常被编译成一个模块,该模块隶属于一个程序集。在.Net中模块和程序集的概念非常重要,因此开发人员需要很清楚地了解它们。在后面的文章中我们将详细讨论.Net程序的结构。通过在代码中加入assembly命令,可以告诉汇编工具中间代码隶属于那个程序集。assembly命令的格式如下:

.assembly <程序集名称> {}

需要注意在method命令后加入了static关键字,这是因为每个入口函数必须是静态的,例如在C#中我们将Main方法定义为public static void Main()。

刚刚查询:MSIT 法鲁哥 工业内窥镜 伊斯兰合作组织 四射珊瑚 辣泡菜拌饭 ȷ 爨莹 The Six Wives of Henry VIII Affirmative 红糖辫子面包 妖将 吟诵的维尔斯·蓝 天池山 一阵阵 大理岩 住院医师 容积率 姚素薇 黄初平(黄大仙)传说 declaration 娘道成寺:蛇炎之恋 新石器时代细绳纹圜底陶釜 还姓 花雷 slavery 1994.9 最后一个学生 十分相似 Cosmebio 铁路干线 卫生防疫 转账支票 绿色资源堂维生素C 反刍动物营养需要及饲料营养价值评定与应用 江心坡 总攻大人 中国科学技术大学学生舞蹈艺术团 东山歌册 建立者 惊惶失措 火神M167式20mm高射炮 ӡ 紫苋芙蓉蛋汤 鎏金银八角杯 舒美堡健身俱乐部 拟人化 鲜虾仁紫菜滚瘦肉 p-blockelement 汇款人 阴极射线管 阿克西米西杏子 信卫平 助产士 lmo 风云变幻 ribonucleoprotein 到底会 特瑞族 ̵籣У 大问题 汤加丽写真日记 郑州方特欢乐世界 奥林匹克 气象学报(英文版) 儿童期 下交汤帝庙 花园里 血糖调节 火枫 热狗芝士面包 减字木兰花·阿谁曾见 occurring 应届毕业生 宝洪茶 张大宇 草花
友情链接: 知道 电影 百科 好搜 问答 微信 值得买 巨便宜 天天特价 洛阳汽车脚垫 女装 女鞋 母婴 内衣 零食 美妆 汽车 油价 郑州 北京 上海 广州 深圳 杭州 南京 苏州 武汉 天津 重庆 成都 大连 宁波 济南 西安 石家庄 沈阳 南阳 临沂 邯郸 保定 温州 东莞 洛阳 周口 青岛 徐州 赣州 菏泽 泉州 长春 唐山 商丘 南通 盐城 驻马店 佛山 衡阳 沧州 福州 昆明 无锡 南昌 黄冈 遵义
© 2025 haodianxin 百科 消耗时间:0.031秒 内存2.5MB