计算机C语言与汇编语言的区别.docx
《计算机C语言与汇编语言的区别.docx》由会员分享,可在线阅读,更多相关《计算机C语言与汇编语言的区别.docx(53页珍藏版)》请在冰豆网上搜索。
![计算机C语言与汇编语言的区别.docx](https://file1.bdocx.com/fileroot1/2023-4/17/6cedc800-d20d-4960-9364-eae0c12e9580/6cedc800-d20d-4960-9364-eae0c12e95801.gif)
计算机C语言与汇编语言的区别
如果你做得程序比较小几k而已,用汇编代码程度会比c小点,应为你可以规划的很清楚,但是如果你的程序稍微大一些那么c的优势就体现出来了,开发速度比汇编快了多得多,代码长度也不错(因为你无法规划到最最优化),维护修改比汇编容易得多(恐怕没有那个项目老板的要求不会改吧?
),一般的实时性没有问题,真的要求时间非常精确也可以嵌入汇编(以前做cpu卡,7816-3的标准,就用汇编做最底层单字节读写然后用c主程序调用)
简单地说,很小的程序,主要是硬件简单控制的可以用汇编,
稍微复杂一点尤其是牵涉到一些计算或者管理等方面的最好用c
现在的c编译器,优化功能很好而且bug也很少了。
劝你还是开始用c吧,你会发现开发有乐趣的多(推荐keil c 7.04),去.xiao-(好像是这里下载)
---------------------------------------------------------------
c是高级语言中最接近低级的语言,如果运用熟练、恰当再结合汇编,其综合评价高于仅使用汇编。
1:
若只有较简单的逻辑操作、逻辑算法、简单运算,使用汇编会得到较为精准的代码,但用c也同样可以做到。
2:
若掺有复杂运算、浮点运算、非线性方程等,汇编恐怕无能为力了(最起码难度很大)。
3:
单片机种类繁多,各自的汇编语法大都不一样,若仅使用汇编,可扩充性、可移植性都很差,用c就会好的多。
4:
设想一下,当你花了很大力气用熟了一种汇编,又有新的品种出现,你要么甘心落后,要么拼命跟进,不是俄死,就是累死。
以上只是个人浅见,有错当改。
-----------------------------------------------
汇编:
效率高,对硬件的可操控性更强,体积小,不易维护,可移植性很差
C:
效率比较低,硬件可操控性比较差,目标代码体积大,容易维护,可移植性很好
从事嵌入式系统开发多年,对于软件方面,从初期的单片机汇编语言编程,到后来的C++界面程序编写,已有相当多的经验累积。
正是有了多年的实战经验,对于汇编与高级语言在原理及应用等方面形成了自已的一些理解,也是我经常思考的问题,但一直没有以书面的方式记录下来,今天之所以写下这些文字,正是想做一个归纳,日后也好参考。
其实,C语言与汇编语言的区别一直是程序员们津津乐道的话题。
如果你问一个程序员这样的问题,他也许会这么回答你:
“C语言可读性好,代码便于维护,便于开发;汇编语言编写的程序不容易看懂,可维护性不好,但是执行效率高。
”这样回答是没有错的,但只是一个概括,不够深入。
比方说,汇编语言为什么执行效率比C语言高呢?
C语言的可读性又好在哪里呢?
汇编语言不同样可以用注解来提高可读性吗?
等等这些的问题。
要真正能回答这些问题,不是一件简单的事情,也不是三言两语能解释得清的,需要比较彻底地分析汇编与C的本质上的区别。
真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
先说汇编,写过汇编的程序员都知道,“汇编语言实质上机器语言的助记符。
”这句话需要这样来解析:
1.CPU只能运行它所支持的指令集,而这些指令集当中的每天条指令都是一些二进制数的序列,也就是“0”和“1”的有序组合;2.“0”和“1”的组合不便于程序员的记忆因此有了“MOVA0x40”等这样的助记符,也就是说在程序员编写程序的时候,用“MOVA0x40”来代替一串“0”和“1”的序列,这样一看就知道是吧“0x40”单元中的数据搬到累加器A当中来。
而如果是用0”和“1”的序列,毫无特征,很难被程序员记住。
这也是为什么要有汇编语言产生的原因了。
以上对汇编语言的解释基本上就道出了汇编语言的本质,知道了汇编语言的本质,我们不难理解,汇编语言编译成CPU可执行的机器语言其实只要做一个翻译的动作就好了,因为,助记符与对应的二进制指令是一一对应的。
进而,我们再来解释为什么汇编语言会比C语言有更高的执行效率。
首先,我们要理解一点,类似于C的高级语言面对的对象是程序员,而不是CPU,为什么这样说呢?
原因非常简单,CPU不认识C语言,CPU只认识以“0”“1”形式存在的指令。
而C语言的所有语法以及它代码组织形式都是有助于程序员编写代码的。
所以,C语言编写完程序后,需要通过编译器将C语言编译成与相应CPU指令集对应的机器语言。
问题来了,前面我们说过,汇编语言与机器语言是一一对应的。
但是C语言呢?
当然没这么好事了。
C语言的语法是固定的,C语言编写的程序要编译成CPU能读懂的机器语言指令没办法一一对应,所以就需要有编译规则了。
比方说一个for循环会有若干条实现对应for循环功能的机器指令对应,而一个switch,也相应会有机器指令段代替。
所以C语言最终要编译机器代码,必须要遵从许许多多的这样的规则才行。
我试验过,用C编写一个简单的程序,比方说只包含一个for循环,编译出的代码和用汇编写的最优代码几乎是一样。
但代码量一大,由于受制于规则(不受制也不行呀,否则编不出来),编出来的代码与用汇编语言写出来的代码相比就走了不少“弯路”了。
虽然说,现在的很多C编译器在编译的时候都会有优化,但是,不可能做得到效率上等同于与机器语言一一对应的汇编语言的效率。
毕竟,汇编语言可以理解为直接就是面对CPU的,只不过是机器语言用助记符代替而矣。
以上只是两种语言效率上区别的一个主要原因,其实,对于资源的利用上,汇编语言同样有优势。
汇编是直接面对CPU的语言,只要是在指令集支持的范围内,汇编语言可以直接而灵活地管理包括特殊功能寄存器、通用寄存器、存储单元的每一个字节,甚至是每一个bit。
C语言对内存的使用及管理功能也是很强大的,但毕竟还是受制于语法。
举个最简单的例子,C语言当中没有对应三字节或是五字节的变量类型,要么int型,要么long型,所以每次申请必须是固定的字节数,势必造成内存使用上的浪费。
而大部份汇编语言根本没有这样的语法,在伪指令的帮助下(其实也只是提高可读性),汇编语言程序可以使用任意字节数的变量,当然处理起来比C语言麻烦得多,最终还是一个字节一个字节地拼接处理,而用C语言写程序就轻松了,不用管这些,最终编译器会搞定嘛。
而轻松的代价就是造成了浪费。
而内存使用效率不高同时也会影响到整个程序的整体效率。
汇编的最后部份,来说明一下伪批令这个东西吧。
一个不善于用伪指令写汇编程序的程序员不是一个好的程序员,这就和写C语言不用宏是一个道理。
伪批令存在价值在于他提高了汇编语言的可读性,同时也能简化汇编语言的编程。
比方说最通用的创建立即数名称,而不是用二进制或十六进制数;创建数据表;ARM当中的创建全局及局部变量等。
这个不多说了,针对于不同的MCU或CPU有不同的伪指令。
再来说说C吧,C语言丰富而实用的语句决定了C语言程序灵活性以及强大的代码组织能力。
利用C语言,我们可以很方便地编写出庞大的工程,在版本管理工具的帮助下,可以很轻松地实现多人协作编程。
特别是引入RT-OS以后,C语言的程序框架更加灵活了,添加功能(任务)更加轻松。
因为,所有的任务的调控可以直接交给操作系统来做,而程序员需要做的是编写任务(含一个或多个功能模块)的内容,以及设置任务的优先级,堆栈数等等。
而任务间的通信可以摆脱“全局变量”这个祸害,完全可以通过信号量、邮箱、队列等形式来沟通。
为什么说“全局变量”是祸害呢?
单程序量不大的时候,“全局变量”可能是好东西,因为方便嘛,哪都能改它,哪都能读它。
可是,一旦程序大了,源码文件一多,如果都习惯用全局变量来传递及存贮共用量的话,灾难就会降临。
你会看到数以千计的全局变量在各各函数间纵横交错,如果真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
这些变量不是你创建的,你会很难知道它的作用,因为系统太大了,它出现的地方太多了,而且,像这样的变量实在太多,你会因此而感到恐惧,相信很多有经验的程序员都经历过吧!
然而,这将埋下系统崩溃级别的隐患。
因为,这些全局变量太多,而且出现在太多的地方,很难完全统计出哪些地方可能会修改它们,一量有遗漏,变量的值可能就会和我们想要的值有出入,后果非常严重。
更有甚者,当全局变量是指向数组的指针或者是数组本身的时候。
有的程序员可能对多得数不清的这些变量感到困惑,容易犯的一个错误是写这些全局数组时没有加以保护,经常都会写出数组的范围,而将其它无关的变量给莫名其妙地改了。
导致的后果可能是出错,也有可能是死机,而且,由于这种问题极其隐蔽,很难找出来。
所以,在大的系统当中,幸亏有了OS这种东西的存在,它不但能帮我们摆脱全局变量这个祸害,而帮助程序员更加方便地组织各个功能模块。
并且,让每个任务单一化,进而降低了程序编写的难度。
而用汇编语言编写较大的工程,是困难重重的事情。
首先,必须面对上面提到的全局变量的问题,另外还得面对其它的困难,比方说内存的使用。
在C语言里,程序员只要申请各种类型的变量然后就可以使用了,而具体用的是哪个单元的空间,交给编译器去管理就好了。
而你用汇编语言写程序的时候,必须要指明所用内存的地址,问题来了,程序员不得不对所有内存的使用了如指掌,因为所有内存单元的使用都必须体现出来,这也是汇编语言的特点。
当程序量一旦大到某种呈度的时候,规划这些内存的使用本身就是一个高难度的工作,因为同时你还得保证各个地方在使用它们的时候没有冲突。
真的很难,我是有体会的。
这时候,我们再想象一下,如果程序太大,我们要几个人来协作编写的话,问题就更加复杂了,因为,没有了编译器的帮忙,程序员之间要协商好内存使用的规则,这太难了,因为面对它们的只不过是一些数量庞大的地址空间,光是划分区域倒是简单,但涉及到程序间的交互很大的麻烦就来了,每个程序员必须提供各自的变量接口,因为汇编的可读性本来就差,这些接口包括了每一个可能共用的变量(在汇编中只是内存空间资源),以及说明它们的功能,这个工作量非常大,而且一旦做得不好,很容易出错,出了错还很难查。
用汇编编写程序还有很多比C困难的地方,再举一个简单的例子。
汇编语言是低级语言,是机器语言面向程序员的一个一对一的翻译,所以对于程序员来说,它的功能不够丰富。
在C语言里写一个(13200.68/98.56)*256.24的程序,可以直接就表示成"doublea;a=(13200.68/98.56)*256.24;",而在汇编里就没这么轻松了,汇编里面一般都没有直接支持浮点运算的指令,通常情况下都是得专门编写一个函数来做浮点运算。
结果就是汇编程序编写比C麻烦很多,而且还不直观。
另外,用汇编语言编写程序对程序员的要求也更高,因为,程序员必须能撑握CPU或MCU的内存结构、总线结构、功能模块、堆栈系统、中断资源及机制等等,否则,是写不下去的。
最后总结,C语言与汇编根本不是一码事,怎么可能几句话就能道出它们的区别呢?
就目前的情形来说,由于IC工艺的成熟,MCU的存贮资源越来越便宜,工作频率也越来越高,所以在资源利用率以及执行效率上没有像以前要求那么高了。
而且,实现的功能越来越强大,这些因素都助长了C以及C++在嵌入式开发当中地位越来越高。
就连MCS-51的程序编写也以C语言主导了,这还要归功于KEIL这个强大且十分容易入手的工具。
面向程序员的高级语言比面向CPU的汇编语言好用得,在硬件条件允许的情况下,程序员当然选择用高级语言编程,不旦提高了编程效率,也提高了代码的可维护性,并且十分有利于编写大型的工程。
真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
如何做好初中英语总复习
——关于初三英语有效复习的探讨
中考复习是初中英语教学的一个重要组成部分,中考是对初中阶段教学效果的检验,中考成绩的好坏不仅取决于平时的刻苦与否,还取决于是否在考前进行了认真、扎实、有效的总复习。
英语教学内容繁多、知识点语言点分散,复习时间短暂,无形之中增加了师生双方的精神负担和备考压力。
教师希望最后的复习能为中考“锦上添花",学生渴盼能在最后复习中看到前方胜利的曙光,以优异的成绩结束初中英语的学习。
因此,如何引导学生进行行之有效的中考复习,是初中英语教师所面临的最重要的问题。
众多英语教师一直在探索“事半功倍",的崭新的复习训练模式,
一.以“大纲”和“中考说明”为依据,以“教材”为中心
第一轮:
紧扣课本“课课过关”,夯实基础,通过单元知识要点指导及语言训练,使学生加深对课文的全面理解,更扎实地掌握每单元的重点、难点,巩固双基,扩展解题思路,提高“四会"能力。
教师把单元的重点、难点编成复习提纲,在课堂上用十分钟讲解并要求学生做好笔记,或通过提问要求学生做出解答,使学生在课堂上速记所学内容。
然后要求学生在二十分钟之内独立完成配套练习。
最后用十分钟来讲评和总结,落实好每节课所讲的内容。
第二轮:
专项复习,“点点过关’’,深化基础,分别通过词性、时态、语态、句型等辅导,引导学生将分散零乱的知识内容集中起来,形成系统体系,进一步加强对规律方法的掌握运用,发挥学生综合潜能。
第三轮:
“练习巩固,提高能力,通过专项技能辅导,提高学生题解题能力,使学生掌握答题技巧;通过模拟测试,对学生的复习体系进行查漏补缺,并且调整好学生的状态,这有利于学生综合能力和应试技能的提高。
二、采用精讲、巧练及讲练结合的复习方法,提高复习效率。
l、精讲。
讲授是教师运用语言系统地向学生传授知识、发展智力的方法。
讲要适度,不能不分主次、不分轻重地把学过的知识重新再讲一遍。
正确的方法是教师在对教材提炼的基础上,帮助学生对学过的知识进行分类归纳,把分散的知识系统化、条理化、网络化,突出重点、难点,用最简练的语言进行讲授,使学生一目了然,从而提高复习效率。
2、巧练。
练习是学生巩固知识提高能力的重要手段,也是教师获得反馈信息的重要途径。
复习要体现精讲多练、边讲边练、以练为主的原则。
教师要依纲据本,精心设计,从不同角度、不同层次精编不同类型的练习题,尽量使教材内容题目化,强化学生对基础知识的掌握,提高学生运用英语的能力。
所谓巧练就是在课堂上要给学生提供更多的练习机会,练的习题要精,练的内容及形式要准,练的方法要活,尽量达到做一题学一法。
3、讲练结合。
讲练结合决非简单地讲练交替,而是在保证讲清重点、难点的基础上,造出典型习题,对学生进行解题思路及解题技巧的指导,帮助学生分析命题角度,点拨解题技巧,提高学生应试能力。
、
复习的最后阶段通常以套题为主,但每一节课的重点应放在一个专题上,如:
单词拼写题中的词义、词形、词性的把握,单选题和完形填空题中的语境因素,词义辨析等。
这种教学目的是全面复习、阶段侧重、全面练习、重点突破。
三、树立学生复习迎考信心,注重学法方法传授。
真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
在复习教学中,我们要树立学生的复习迎考信心。
在教学中不能仅仅抓住课堂教学,而应多管齐下。
如课外活动、兴趣培养、学习习惯培养、学法指导、学习目的的教育等等。
因为,只有我们的学生有明确的学习目的和强烈的学习动机,他们才愿意顽强地跟随戍们学好外语。
当然,也有的学生尽管目的明确,动机强烈,学习热情高,可是外语不像母语,学习起来困难更大,效果也不那么明显,容易失去信心。
因此,我们就得时刻去注意并且及时地给予学法指导,帮助他们提高学习效率,让他们获得成就感,进而维护他们的学习兴墼。
课堂教学要注意备课充分,既备学生又备教材教法,了解学生需要,加强师生情感交流,确保学生的主体地位,贯彻知识目标和能力目标。
课堂教学要模式、但不要搞模式化,要构建切合学校和善生实际的模式进行教学。
此外,加强个别辅导,促进临界生的转化。
对英语单科成绩的临界生,要加强对他们的知识网络进行查漏补缺,学会一点,练习一点,记住一点,归纳一点,巩固一点,督促他们建立错误档案,打好基础。
英语成绩大起大落的学生,主要是基础知识和基本技能掌握不清晰,不牢固。
这类学生的关键是理清知识体系,稳定情绪,冷静发挥,他们需要鼓励和树立信心。
最后,还要进行考试技巧辅导,稳定学生的考前心理,争取让学生在考场上正常的发挥。
复习的最后阶段,即要对学生进行高效率的知识和能力训练,又要教育他们善于自我调节,从而提高临场的心理承受力度,以便从容应试。
总之,复习的方法是多种多样的。
不管用什么复习方法,一定要坚持教为主导,学为主体,练为主线,思为核心。
教给学生复习的方法,培养学生的学习能力,提高复习质量。
真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
小学六年级语文上册期末试题
二、精彩回放:
请打开记忆的宝库,让我们成功运用积累的成果吧。
(22分)
1、看拼音,写词语。
zhúfáqīánkūntuǒtiēkāngkǎiēncìwēiyí
()()()()()()
zīxúnjiānmièzhānyangténgxiéjǐnshènzhǐxiè
()()()()()()
2、春节将至,你想送给台湾同胞一副什么春联?
3、本学期,我们积累了许多像扬长避短、深入浅出等由反义词构成的成语,你能写几个这样的词吗?
(最少写4个)
4、某小学准备在草坪边树一块警示牌,意思是提醒同学们不要踩草坪,老师们都不赞成用“禁止进入”、“严禁践踏”动脑筋,写一句合适的话,不超过10个字。
5、正像小草难以报答春天的阳光一样,儿子的爱心怎能报答得了那深重的恩情呢?
写出此意思的原诗句,并写出作者、诗的题目以及表达父母爱儿女的俗语一个。
三、慧眼识真:
相信自己会做出正确的选择(8分)
1、下面四组词中,完全正确的一项是( ),完全错误的一项是( )
A、波澜状阔 盛气临人防灾错施和蔼可亲
B、瞻仰电钮一丝不苟 栩栩如生
C、抱偿慰籍会集折除
D、馋猫停泊出版名誊
2、选择下列句子中加点字的意思,将正确答案的序号写在括号里。
光:
一点不剩
荣誉、光彩
只、单
1.女排姑娘当年顽强拼搏,为祖国争了光。
( )
2.落光了叶子的柳树挂满了亮晶晶的银条儿。
( )
3.任务如此艰巨,光靠你们两人恐怕不行。
( )
安:
怀着
平安
安装
1.党的富民政策使小山村户户都安上了有线电视。
( )
2.经医生全力抢救,英雄已转危为安了。
( )
3.刁德一这样一说,不知他安的什么心。
( )
真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
3、下面没有表示两个连续动作的句子是()。
A、李老师推开门走进教室。
B、他拿出本子做作业。
C、他一回家就复习功课。
D、同学们讨论并通过了决议。
4、照样子写出由反义词构成的成语。
例:
弄(假)成(真) 口()心() 积()成( ) ()惊()怪 化()为() 喜()厌() 扬()避() 由()及()
四、才艺展示:
仿照例句,续写两个与例句构成排比:
(4分)
例:
人生路上,有时一个微笑,可以让我们看到春天的温暖。
人生路上,
人生路上,
五、阅读与思考:
积累与运用给了你成功的快乐,深入思考更会让你尝到劳动的甘甜。
(一)(10分)
大雪整整下了一夜,早晨,天放晴了,太阳出来了。
推开门一看,嗬!
好大的雪啊!
山川、树木、房屋,全都罩上了一层厚厚的雪,万里江山变成了粉妆玉砌的世界。
落光了叶子的柳树上,挂满了毛茸茸、亮晶晶的银朵儿;冬夏常青的松树和柏树,堆满了蓬松松、沉甸甸的雪球。
一阵风吹来,树枝轻轻摇晃,银朵儿和雪球儿簌簌地落下来,玉屑似的雪末儿随风飘扬,映着清晨的阳光,显出一道道五光十色的彩虹。
大街上的积雪有一尺多深,脚踩上去发出咯吱咯吱的响声。
一群群孩子在雪地里堆雪人,掷雪球,那欢乐的叫喊声,都快把树枝上的积雪震落下来。
1、照样子写出四个你课外积累的词语。
毛茸茸
2、“嗬!
好大的雪啊!
”这句话表明了 。
3、在这段话里,你能领悟到什么表达方法?
(至少两处)
4、选择正确的答案序号,写在括号里。
(1)“落光了叶子……沉甸甸的雪球。
”这个句子所表达的感情是()。
A喜好B喜爱C惊异D惊奇
(2)“推开门一看…彩虹!
”这部分的写作顺序是()。
A从上到下B从整体到部分C动静结合D由远及近
5、用“”画出描写“雪大”的语句,用“~~~”画出描写“景美”的语句。
(二)他要感谢那只手(16分)
感恩节的前夕,美国芝加哥的一家报纸编辑部向一位小学女教师约稿,希望得到一些家境贫寒的孩子画的图画,图画的内容是:
他想感谢的东西。
孩子们高兴地在白纸上描画起来。
女教师猜想这些贫民区的孩子们想要感谢的东西是很少的,可能大多数孩子会画上餐桌上的火鸡或冰淇淋等。
当小道格拉斯交上他的画时,她吃了一惊,他画的是一只手。
真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
是谁的手?
这个抽象的表现使她迷惑不解。
孩子们也纷纷猜测。
一个说:
“这准是上帝的手。
”另一个说:
“是农夫的手,因为农夫喂了火鸡。
”
女教师走到小道格拉斯一个皮肤棕黑色又瘦又小头发卷曲的孩子桌前弯腰低头问他能告诉我你画的是谁的手吗
这是你的手老师孩子小声答道
她回想起来了,在放学后,她常常拉着他粘乎乎的小手,送这个孩子走一段。
他家很穷,父亲常喝酒,母亲体弱多病,没有工作,小道格拉斯破旧的衣服总是脏兮兮的。
当然,她也常拉别的孩子的手。
可这只老师的手对小道格拉斯却有非凡的意义,他要感谢这只手。
我们每个人都有要感谢的,其中()有物质上的给予,()还有精神上的支持,诸如得到了自信和机会。
对很多给予者来说,也许,这种给予是微不足道的,可它的作用却难以估计。
因此,我们每个人都应尽自己的所能,给予别人。
1、给第(5)、(6)自然段加上标点符号。
2、第(7)自然段中说:
“可这只老师的手对小道格拉斯却有非凡的意义”,这里的“非凡的意义”指的是(不超过20个字)
3、在第(8)自然段中的括号里填上恰当的关联词。
4、从全文看,第(7)自然段的记叙顺序是();第(8)自然段的作用是()。
5、这篇充满人情味的散文表达了一个极为明确的观点,这就是 。
6、假如给你一个同样的主题——我想感谢的东西,请你画一画,你会画什么?
请用简笔画画下来,并用文字说明画的是什么?
为什么?
六、妙笔生花:
敞开你的心扉,书写你的心声,相信自己是最棒的!
1、假如你有幸采访凡卡、霍金、玄奘、费俊龙、聂海胜等人,你会对他说些什么呢?
请设置一段情景对话。
(不少于六句)(5分)
2、人无完人,金无足赤,从小到现在你可能受过无数次表扬,也许你记忆深处有一次难忘的批评,请你以“批评”或“表扬”为话题写一篇作文,题目自拟,表达自己的真情实感。
不少于450个字。
(30分)