搜索
bottom↓
回复: 41

关于汇编和C的比较,以及其它

[复制链接]

出0入0汤圆

发表于 2004-12-5 17:54:46 | 显示全部楼层 |阅读模式
汇编和c同样重要,相互配合,缺一不可!



汇编的重要性:

    .帮助你从根本上彻底和完全了解芯片的结构和性能,以及工作原理,如何使用。

    .在小的芯片上实现小的系统。

    .系统的调试。尽管你使用了高级语言,在调试中可以帮助你了解C代码的性能和特点,甚至找到使用开发平台本身的BUG。

    .编写时序要求严格的代码,实现一些高级语言不易实现的功能。



    将出版的AVR128的书里面,第五章中主使用C作为系统开发设计语言,这是因为M128的速度高,内部有4K的RAM,128KFLASH,适合于实现比较高级的应用,所以采用C语言作为系统开发的设计语言。但作为开发工程师来讲,熟悉M128的结构和应用原理,基本掌握它的汇编语言是必要的基础。



    从目前的技术和应用发展来看,对硬件工程师的要求越来越高。以我的观点,作为单片机和嵌入式系统开发真正的高手,应具备以下几个方面的综合能力:

    .硬件。模拟、数字电路的雄厚基础,了解跟踪现在市场上的各种元器件的应用和发展,能够进行可靠、完善的电路设计以及PCB的设计。

    .软件。不仅需要精通汇编语言,也要精通C语言,要有好的单片机系统程序设计理念和能力,学校中学的那些分支结构、循环结构等基本原理远远不够!要有基本的数据结构的知识。否则你如何设计实现USB HOST读U盘的接口?如何实现嵌入式WEB系统?以及如何使用真正了解和使用RTOS?

    .具备计算机网络和数字通信的基础知识,从根本上熟悉和了解各种协议的构造和实现,如:UART、RS232、SPI、I2C、USB、IEEE802、TCP/IP等。

    .计算机应用的高手。

    .熟练阅读英文资料。

    .热爱和喜欢电子技术,具备刻苦精神、踏踏实实,不弄虚作假,不浮躁。多动手,勤实践。有强烈的专业和钻研精神。最后一条最重要!



    我曾经开设的课程有:《BASIC语言》、《FORTRAN语言》、《C语言》、《数据结构》、《数值分析》、《计算机应用(初级)(中级)》、《计算机网络与通信》、《计算机局网原理与应用技术》、《ASP与动态WEB网站技术》、数值分析》、《INTERNET原理与应用》、《数字逻辑实验》、《Z80单板机实验》、《计算机接口_技术》、《计算机原理与8086汇编》、《单片机嵌入式系统原理与应用(初级)(中级)》、《数字图象处理基础》、《数字图象压缩与编程》等。



首次发表:21icbbs 2004-12-05

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2004-12-5 20:16:30 | 显示全部楼层
cma关于没有仿真器的情况下如何开发AVR:

<尽量使用高级语言开发系统程序 您有没有在写汇编程序时,标错一个标号而浪费您大把时间找错或跳转偏移量过大而不得不改动程序结构的经历。其实您如果使用高级语言开发程序,就不会有这样的痛苦。 在开发程序时,除了建立一个良好的开发文档外,使用语言的选择也很重要。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗? 高级语言的优越性是汇编语言不能比的>  



cma关于汇编和C的比较:

<汇编和c同样重要,相互配合,缺一不可!



汇编的重要性:

    .帮助你从根本上彻底和完全了解芯片的结构和性能,以及工作原理,如何使用。

    .在小的芯片上实现小的系统。

    .系统的调试。尽管你使用了高级语言,在调试中可以帮助你了解C代码的性能和特点,甚至找到使用开发平台本身的BUG。

    .编写时序要求严格的代码,实现一些高级语言不易实现的功能。>





看来关于对汇编和c的看法就是马老师也有的"举棋不定"

出0入0汤圆

 楼主| 发表于 2004-12-5 21:26:52 | 显示全部楼层
不是“举棋不定”,而是二者都要很好的掌握。

    在基础阶段,芯片的硬件结构,工作原理,汇编的使用都必须认真学习和使用。通过对某一款芯片彻底的学习和真正掌握了其工作原理,那么它为你建立了牢固和雄厚的基础,不管以后如何发展,你都能够很快的了解和掌握。我在大学学习时,学校根本没有PC机,最后一个学期才见到一台“苹果II”。但我学的《计算机组成原理》一课却使我受益不浅,尽管是以DJS130机(一种国产的计算机,很快就淘汰了)的CPU为蓝本,指令只有22条,使用纸带穿孔机输入机器码指令,但其基本原理,思想方法与今天的没有区别。我所说的掌握汇编,不是指你必须熟记某一芯片的所有指令,而是指掌握汇编的精华,汇编的原理,汇编程序的编写技术。我用过6502、8088、8051、AVR的汇编编写系统程序,但到现在也背不出几条他们的的汇编指令,但我能很快的看懂汇编程序,看到汇编不会头疼。

    由于单片机芯片不断的推陈出新,开发的技术、产品也在发展,使用C语言已成为趋势,这是指在具体产品的开发中的应用技术。我不认为使用汇编完成TCP/IP协议有更多的优势可言,而仅通过使用C完成了X=A+5,你也不知道MCU(CPU)是如何实现的。

    编写单片机和嵌入式系统的程序员与编写PC机上应用程序的程序员是不同的。PC的资源丰富,加上有DOS或WINDOWS的支持,程序员不直接面对硬件和低层。而编写单片机和嵌入式系统的程序不同,你要面对不同的硬件设计,你要编写最适合的低层接口,你要考虑你的RAM空间只有几百个字节......。

    掌握汇编和C是现在单片机和嵌入式系统工程师所必备能力,二者各有优点,其一的优点便是其二的不足,二者只能相补,不是互斥。在学习中,两者都必须掌握其精华。在实际应用中,则应根据实际情况,选择最适合的方法。做到这一步,你已上升到一个高级阶段了。
头像被屏蔽

出0入0汤圆

发表于 2004-12-5 22:26:10 | 显示全部楼层
用C或basic等高级语言开发AVR,编译后下载到芯片内的代码已经转换成汇编了。



经过这种转换,效果在理论上肯定会比直接用汇编开发差(注意“理论上”这三个字)。



如果对代码长度、运行效率、时序要求很高时,汇编会有巨大的优势,也经常是C等高级语言很难做到的。



但现在我们做的项目的绝大部分,代码长度、运行效率、时序可能已经不是最主要的考虑因素。开发所需的时间、以后维护修改代码的成本(代码的可维护性) 经常是最主要的考虑因素,这时,使用汇编就有点不适合或代价太大了,尤其在在系统比较庞大时。

出0入0汤圆

发表于 2004-12-5 22:41:16 | 显示全部楼层
同意阿莫的观点,C占主流,汇编为辅.
头像被屏蔽

出0入0汤圆

发表于 2004-12-5 22:47:18 | 显示全部楼层




咦,我上面没有说“C占主流,汇编为辅.”啊。这个问题只能一分为二地看。某些场合用汇编比较好,某些场合用C比较好。



但如果硬是要作出“那一个更好”的结论,恐怕是一个永远也争论不休的话题。没有必要也是不可能得出“那一个更好”的结论。



当然,有一句话是很正确的:懂汇编肯定比不懂汇编要好!

出0入0汤圆

发表于 2004-12-5 22:51:08 | 显示全部楼层
我自己删除...
-----此内容被hotpower于2004-12-18,02:01:25编辑过

出0入0汤圆

 楼主| 发表于 2004-12-5 23:04:43 | 显示全部楼层
hotpower,从你的帖子提出的问题看出,你对这些问题是了解的,绝对不是“新手”和学生。你能东戳一下,西顶一下,为什么不写点有用和实际的东西,让更多的人从中受益多好。
头像被屏蔽

出0入0汤圆

发表于 2004-12-5 23:10:29 | 显示全部楼层
哈哈.... machao 说出了我一直想说的话!   “东戳一下,西顶一下” 形容得很生动啊!
头像被屏蔽

出0入0汤圆

发表于 2004-12-5 23:29:07 | 显示全部楼层
晕,8M 收不到。你上传到这个论坛吧。帖子发表后,你立即将它删除就可以了。其它人看不到,我能看到。



或者不用将下载的地址路径贴到帖子里,将地址路径通过邮件发给我即可。谢谢。

出90入0汤圆

发表于 2004-12-7 20:33:07 | 显示全部楼层
要想高可靠,还得用汇编。C编译器可有不少BUG。用到航空航天上的C编译器,可得要很多。。。。。。认证啊

出0入0汤圆

发表于 2004-12-7 21:41:12 | 显示全部楼层
代码越长越易出错,汇编比C更容易出错,怎么能说要高可靠性要用汇编呢?

编译器bebug问题,不能用来说明汇编比C健壮

出0入0汤圆

发表于 2004-12-17 16:22:20 | 显示全部楼层
我想知道马老师上面列出的课程的参考书,是不是都有马老师自己的著作啊?

出0入0汤圆

发表于 2005-1-1 14:42:06 | 显示全部楼层
其实现在教学都是拧劲的!

应该是先学c,能够动手做开发,等到了一定功底的时候再去研究汇编自然水到渠成。

搞不懂大多数学校的配置,先学很难上手的汇编,磨掉学生的积极性,并且后面又很快忘掉了,汇编比较实用的场合是后期优化,直接在汇编上很难让学生学到编程的思想和整体的设计。

出0入0汤圆

 楼主| 发表于 2005-1-1 22:16:50 | 显示全部楼层
对于高校电子专业的学生讲,一般在学习单片机前都学过了汇编(8086)和C语言程序设计的课程,应该讲具备了基础。但我们的教育体制,培养的学生是会背不会用的。我认为,从学习和真正掌握单片机的角度来讲,应该从汇编出发,如果你真正掌握了汇编,使用C是不成问题的。况且,单片机的“C”同PC的“C”有许多不同,不了解汇编,你也写不出好的单片机的“C”。



    我提出尽量使用C语言,是从开发产品的角度讲的。从产品开发应用的角度出发,配合AVR的特点,使用C或高级语言更加方便。而作为合格的硬件工程师,硬件、汇编与C都是必须要掌握的。



    学校的课程,主要是基本原理,引导学生入门。“师傅领进门,修行靠自己”。

出0入0汤圆

发表于 2005-1-1 23:42:29 | 显示全部楼层
真理...为什么有很多人向往着"汇编级的C"呢???



因为从各方面考虑应该尽量采用高级语言编程,但从MCU的资源上考虑,就希望编译器的优化效率能接近设计需要...

出0入0汤圆

发表于 2005-1-2 17:22:25 | 显示全部楼层
哇。马老师竟然学过“DJS130机”?不会是77年的第一届老大哥吧

出0入0汤圆

 楼主| 发表于 2005-1-2 18:21:20 | 显示全部楼层
78年第二届的。

出0入0汤圆

发表于 2005-1-2 18:55:59 | 显示全部楼层
恰好我的感觉就是汇编更好上手,想改哪个寄存器就改哪个寄存器,想读哪个单元就读哪个单元,上手的时候简单明了,条理非常清晰。高级语言对于应用来说也必不可少,真正想学的人不会失去积极性的。
-----此内容被nitta于2005-01-02,18:57:17编辑过

出0入0汤圆

发表于 2005-1-2 20:10:53 | 显示全部楼层
觉得还是C好!

学三年汇编的人,有可能还没有刚学单片1个月(用C)写得程序经得起实际应用考验!!

N多人在学校学了,到社会要重新再来(重新自学).

出0入0汤圆

发表于 2005-1-10 16:21:20 | 显示全部楼层
同意马教授的观点。两者缺一不可,不熟悉寄存器层的知识,也很难写出好的c代码。

出0入0汤圆

发表于 2005-10-21 18:02:13 | 显示全部楼层
对于马潮老师的观点我不敢苟同,可能在开发人机界面或者对上位机通信、网络等等对实时性要求不是很高的场合,用C语言有更大的优势,但是根据我这几年来的编程经验来看,发现汇编语言有更大的实时控制优势,具体表现在代码长度和执行效率上,我原来开发过一些电力电子传动的控制器、继电保护装置和一些军用电子设备,要求实时性很高,程序执行一遍大概在1.5-10ms之间,用C语言就显得执行时间比较长了,很难满足实时控制的要求,特别是在代码优化,软件抗干扰的要求下,汇编语言比高级语言有更多的优势,因为高级语言很难在代码执行时间和代码长度上作出有效的平衡考虑,并且代码优化以后,可能会造成代码压缩而产生代码损失(这一点我没有验证,别人验证过KEIL软件有这种情况出现),所以,在要求实时性很高的场合,如传动、快速运动控制、快速显示、精确定时(至少uS级别),高速响应触发等,采用汇编语言比较合适,而并不推荐采用高级语言,特别是位操作,更加如此。

当然,高级语言易用易读,可移植性强,人机调试界面比较友好等优点还是能够满足很多一般控制的要求的,如果对于CPU不是很清楚,建议使用高级语言,但是如果对于系统和CPU内部结构比较熟悉,那么采用汇编语言将会获得代码长度、代码效率和程序执行时间上的最大优化,而且软件抗干扰性也会在一定程度上相对于高级语言有所提高。

出0入0汤圆

发表于 2012-7-30 10:40:04 | 显示全部楼层
学习了,顶

出0入0汤圆

发表于 2013-4-20 14:05:40 | 显示全部楼层
告诉你们,很多厂家因为各种原因,只能用汇编编写,虽然是几万吗量,呵呵,东莞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 00:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表