汇编语言在C语言学习中的应用.docxVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言在C语言学习中的应用 摘 要:汇编语言是和机器语言一一对应的一种符号语言。通过汇编语言能够看到程序执行的全过程。通过查看高级语言(这里以C语言为例)对应的汇编语句,可以更加深入地理解程序的执行步骤。本文通过一个C语言表达式的例子来说明利用汇编指令能够解释C语言中晦涩难懂的语句的执行过程。 关键词:汇编语言;机器语言;符号语言;高级语言 一、引言 在C语言的学习过程中,不同的读者会使用不同的编译器进行程序的运行和调试,不同的C语言编译器由于开放厂商不同,对于C语言的某些晦涩难懂的表达式产生不同的结果。尽管这些问题只占C语言学习过程中的小部分,但是对于C语言的初学者来说会有学习障碍并产生畏难情绪。目前很多编译器都有一个反汇编功能。这里的反汇编特指将C程序源代码反向编译成汇编语言的代码。由于汇编语言和机器语言是一一对应的,因此通过汇编语言能够看到对应的C语言代码在机器中的运行全过程,这个过程仅仅通过C程序代码来看是不够清晰的。本文以一个表达式的例子来说明反汇编后的语句能够解释C代码中的疑难问题。特别说明的是这里需要读者对汇编语言有简单的了解。 二、汇编语言与高级语言 计算机能够识别的只有二进制的机器指令,然而由于机器指令繁琐且难懂,因此产生了一种符号语言即汇编语言。汇编语言用一些常见的英文字母和数据表示一个指令,同时汇编语言中的汇编指令与机器指令是一一对应的,而目前流行的高级语言是做不到的。汇编语言是机器语言的助记符,在各种计算机语言中,除了机器语言,汇编语言是执行速度最快的语言,所占的内存空间也很小。汇编语言曾经是非常流行的程序设计语言,但是随着软件规模的不断增长,人们对于软件开发的进度和效率的要求越来越高,汇编语言显得有些力不从心,高级语言就逐渐代替了汇编语言。汇编语言的应用逐渐转向了嵌入式领域和工业控制领域。但是高级语言并不能完全代替汇编语言,汇编语言能够最大限度地发挥硬件的性能。 我们经常接触的C语言、C++语言、Java语言、C#语言都属于高级语言的范疇,高级语言和机器语言有一定的鸿沟,它属于偏向人类自然语言的一种计算机语言。高级语言中的语句类似于数学表达式,人们更加容易理解,因此高级语言成为了目前主流的计算机语言。尤其是近些年来,面向对象的思想能够更加准确地模拟了自然界的行为,因此面向对象的高级语言(如C++、Java、C#)成为了软件设计的主流语言。 三、一个例子 这里举一个C语言的例子,程序输出由三个自增运算符相加后的结果。运行的环境是VC++6.0。这里有必要说明的是,该语句在不同的编译器下面可能会产生不同的结果。而对于不同结果的解释则要通过将C语言转换成对应的汇编语言才能够解释清楚。限于篇幅,这里只将程序的核心语句列出: int i = 1; int s; s = (++i) + (++i) + (++i); printf(%d\n, s); 很多初学者看到这个表达式,不假思索地就会得出6,因为他们认为i初始值为1,自增后都为2,因此结果为6。还有一部分人想得深入一些,他们认为编译器会先计算第一个++i,i自增以后为2,然后计算第二个++i,自增后i的值是3,最后计算第三个++i,得到4,计算2+3+4值为9。这种想法看似合理,然而通过编译器VC++6.0运行后的结果是10。这个结果让人无法理解,这里只有通过该表达式对应的汇编语言才能解释清楚。通过VC++6.0中的反编译工具,得到了语句s = (++i) + (++i) + (++i)所对应的汇编语言如下: mov ecx, dword ptr[ebp-8] add ecx, 1 mov dword ptr [ebp-8], ecx mov edx, dword ptr [ebp-8] add edx, 1 mov dword ptr [ebp-8], edx mov eax, dword ptr [ebp-8] add eax, dword ptr [ebp-8] mov ecx, dword ptr [ebp-8] add ecx, 1 mov dword ptr [ebp-8], ecx add eax, dword ptr [ebp-8] mov dword ptr [ebp-0Ch], eax 从对应的汇编语言中可以看出,VC++对该语言进行了优化。先算的是前两个++i,即此时i的值为3,前后两个i都为3。然后相加后再计算第三個++i,此时i的值为4,这样最后的结果就是3+3+4的和为10,和程序运行后的结果一致。这里体现出了汇编的思维,而不仅仅是

文档评论(0)

w13245 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档