找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 70417|回复: 262
收起左侧

C语言与汇编,学什么?

  [复制链接]
ID:123289 发表于 2017-2-28 12:39 | 显示全部楼层 |阅读模式
C与汇编:

C:经编译后,成汇编。
汇编:是自己“完成”了C的工作。

C:是从通用化出发的,考虑了单片机的特点,极大地减少了人为的错误与不合理。
汇编:因人为异,有许多技巧是C无法做到的,所以汇编更灵活,不过这建立在精通的基础上。汇编稍有不小心就会出错,要命的是:不易察觉。

C:由于通用,C只能按部就班,因此程序长,重复多,运行时间多。
汇编:因灵活程序方式,可以节省内存,节省运行时间。
通常,汇编程序会比C少用内存及时间在30%以上。但大多数情况下,内存现在不是问题了,时间也不会太紧。所以节省内存与时间的意义不大,但也有特例。

说明一下:
C是用堆栈传递参数的,但每次参数要弹出压入,所以传递时有多花一点时间。汇编传递参数直接到达目标,快多了。
C一个子程序一个包。而汇编的一个子程序可以切入跳转另一个子程序中,以节省内存。

特别的一个实例:时间内存要求高的项目(前提:用51单片机):
16*64的LED点阵显示 + 14个LED数码管显示 + 中文汉字显示处理 + 无线收发 + 生产记录(计划、产能、次品、待产)+ 年月日精确时间(普通晶振,日差小于一秒)。
单就解决显示的扫描闪动(驱动显示1136个LED段,不得不分8次扫描,1136个点时刻会变,要占的内存多,显示处理时间多),程序运行需要时间(汉字解码+无线通讯+时钟+扫键……)。
解决扫描显示的闪眼与程序任务多,在时间上的矛盾尤其特出,必须精心策化。这时用C来策化就捉襟见肘了,因为C本来就耗时。

C的优势:
1、用汇编需用很强的优化寄存器及内存的能力,用C的好处是,不需要你去考虑这些复杂的问题,使得编程简单。
2、 C出错的机率远小于汇编,汇编稍有不小心就会出错,要命的是:不易察觉。
3、 C有团体合作的优势, 这是 C的特点,便于交流。如果是汇编,很难与他人交流。
4、 对于运算程序, C已有前辈们做好了运算库,很难想像一般人能用汇编去:开方、三角函数(当然,也可以让C先编译,再做成汇编的库)。
5、 C 有庞大的公用程序库(子程序),这对于程序量大的程序更有优势。汇编的程序库多为个人积累,很难得到。

其实C只有一个优点!看一下单片机程序结构就明白了:
单片机程序通常结构:1硬件初始化、2软件参数初始化(含内存安排)、3主程序(事件处理)、4中断程序。
汇编:以上一切由你处理,除非你已获得了很多相关的汇编数据库。
C:在你未写程序之前已为你做了什么?
1、硬件初始化,C仅能做很少的部分。(注:这就是为什么在做硬件时你总是要一行行慢慢写的原因,与汇编比几乎没有优势)
2、软件参数初始化(含内存安排),C完成其中的大部分,你定义一下就OK了,不用就烦放在哪里,也不会错,错了报警重来。(注:比汇编操心少啊)
3、主程序(事件处理),C有大量的库函数可以调用,可以减少你大部分工作量。(注:比汇编操心少啊)
4、中断程序。调用库的机会不多(注:本人不建议在中断中完成事件处理,而建议尽最大可能只在中断中做一些事件标志!而让事件在主程序中依标志进行处理,因为中断有优先权,处理事件往往需要的时间多,会耽误其它事件的处理,如这时按键就会伪“失灵”)。

可见 C的这个优点是,C能帮你完成程序中的很大一部分工作。(其实是你调用了前辈们已做好的工作,这此工作是:编译器所做的、程序库所做的)

道理很简单:一件事能用工具设备完成的尽量用,无法用时用人工。C就是写单片机程序的一个极好的“工具设备”。

用C的风险在哪里?
一个程序什么都OK了,就缺一些库文件!找又找不到。
如果你会汇编,就可以自己做这个找不到的这个库。

总之C适合大多数的人,汇编仅适用很少的一部分人,但用汇编写程序的人,一定是高手,否则他驾驭不了单片机。
做汇编需要彻底地了解单片机,做C无需要了解到很底层。而要精通单片机,汇编又是最佳手段。

个人建议:所有学单片机的同学学C,C是在大势所趋,也适合绝大多数人。特别是团体作战,未来不是单打独斗的年代!
也建议那些想精通单片机的同学,学好汇编,汇编天马行空,不受库存文件、头文件限制,不受C的规矩。当然不能放弃C。

一但学好了汇编,你再打开你的C编译后的汇编看看,这时就知道缺点在那里,就能提高自己C语言的水平。也能轻松掌握C当中绕人的难点。


评分

参与人数 4黑币 +45 收起 理由
yousunny + 30 很给力!
青蛙打伞 + 5 绝世好帖!
zh234 + 5 很给力!
h832ea + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:1058626 发表于 2022-12-21 20:35 | 显示全部楼层
无法直接说清哪个用处大,不过用c的开发者肯定比汇编的多。  优缺点:  c开发比汇编容易很多,隐藏了cpu细节,标准库运行库等很丰富,免费编译器、ide和开源代码很多,能轻松开发多种平台程序,基本可以认为硬件无关,开发起来模块化程度高,逻辑性和可读性高。  汇编需要时刻关注cpu细节,没太多的库可用,免费编译器和、ide不多,每种编译器对语言的语法等要求差异大,代码模块化程度低,逻辑混乱难以阅读,具有很大的平台相关性和硬件相关性,所以开发起来要更吃力。  相比而言,c更受欢迎,但是汇编也有其优势,首当其冲的就是性能,如果c做出来的代码性能难以优化而且性能不足,汇编是无可替代的刚需。其次,汇编是嵌入式开发,比如红绿灯等功能硬件,汇编能更更能满足需要。再次,汇编逆向爱好者们的家常菜,把别人的程序直接反编译,可以轻松得到汇编源代码。第四,系统底层功能,比如驱动等,可以用汇编开发。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:73992 发表于 2022-12-31 21:41 | 显示全部楼层
对于安全,可靠性,精度,性能要求高的场合用汇编是适宜的。说c用的人多的,是因为区域做高精度设备和装备的公司少像医学检测设备,化验设备。科技研发型企业也不多,像手机系统,电子音乐,芯片,模拟感官,等等。基础科技研发公司也不多,比如光学 化学 微生物,数学 等等自然科学。这是环境造成的,不是c比汇编好造成的。之所以看到用C的多,是因为像收音机,热水器,电子表,流水灯等等,远程水表,发光广告字,像这些场合,用汇编相当于大材小用了。
汇编语言是质朴的语言,世界上很多宏伟巨著都是用最质朴的语言写的。那些书上甚至没有形容词,因为形容词无法准确描绘那些场面,只有用最质朴的语言与方法,才能做到。
C就像是形容词,什么万里无云,什么晴空万里,风和日丽,等等。用这些形容词也能拼出文章出来。
如果是个人爱好,或者diy,或者自己研究什么项目的,我推荐汇编。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:247571 发表于 2023-9-5 10:53 | 显示全部楼层
这个有意思,能够深入单片机技术。每个人的发言我都看过了,都比较片面。我91级计算机专业,大学毕业后,一直做单片机开发工作,一直用汇编语言写单片机项目,到2002年逐渐改用Franklin C51,也就是现在keil的前身。基本上市场上常见的8位,16位,32位单片机我都开发过产品。
要写好单片机,必须要精通单片机的汇编语言,c语言也要精通。小米的雷军早年间用PC的汇编写了很多PC端的程序,精髓都在汇编里面。单片机也一样,能够灵活运用汇编语言,就能够写出高效的代码,用c的达不到汇编的高效率的;特别在高性能单片机,例如stm32单片机,写出好的嵌入式软件,要用汇编写好bootloader引导程序,中断代码,程序架构,代码的坚固性、程序的实时性(不卡),都是有汇编来保证的。32位单片机里面有设计专门为OS打造的寄存器和软件中断等资源,如果用汇编写,那效率会很高的。c语言用来完成app应用比较高效,这里指的是开发项目时间比汇编快。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1165569 发表于 2026-4-1 16:02 | 显示全部楼层
学习了,吸取经验
回复

使用道具 举报

ID:1169031 发表于 2026-3-31 19:03 | 显示全部楼层
语言越偏底层逻辑编写时就越繁琐
回复

使用道具 举报

ID:472975 发表于 2026-3-29 08:20 | 显示全部楼层
用C语言入门,能够熟练操控单片机之后,还想再提升优化就学汇编,别一开始就被汇编给整得连积极性都没了。
回复

使用道具 举报

ID:1110944 发表于 2026-3-28 23:33 | 显示全部楼层
1.C语言有生态。汇编没有。

2.写的不好,或者一般的话,汇编说不定更糟糕。

3.任何程序都要后期升级,排错,补充功能啊。C好很多。
回复

使用道具 举报

ID:977066 发表于 2025-7-3 09:48 | 显示全部楼层
C语言的优点是语法简单易懂,上手容易,可以跨平台使用等等,初学者建议还是从C语言入手比较好
回复

使用道具 举报

ID:977066 发表于 2025-7-3 09:47 | 显示全部楼层
汇编预研运行效率更高,占用内存更小,对内存和效率有很高要求的场合,建议还是用汇编。而且汇编语言有很多编程技巧是C无法实现的。
回复

使用道具 举报

ID:1137639 发表于 2025-7-1 10:05 | 显示全部楼层
对于安全,可靠性,精度,性能要求高的场合用汇编是适宜的。说c用的人多的,是因为区域做高精度设备和装备的公司少像医学检测设备,化验设备。科技研发型企业也不多,像手机系统,电子音乐,芯片,模拟感官,等等。基础科技研发公司也不多,比如光学 化学 微生物,数学 等等自然科学。这是环境造成的,不是c比汇编好造成的。之所以看到用C的多,是因为像收音机,热水器,电子表,流水灯等等,远程水表,发光广告字,像这些场合,用汇编相当于大材小用了。 汇编语言是质朴的语言,世界上很多宏伟巨著都是用最质朴的语言写的。那些书上甚至没有形容词,因为形容词无法准确描绘那些场面,只有用最质朴的语言与方法,才能做到。 C就像是形容词,什么万里无云,什么晴空万里,风和日丽,等等。用这些形容词也能拼出文章出来。 如果是个人爱好,或者diy,或者自己研究什么项目的,我推荐汇编。
回复

使用道具 举报

ID:1153248 发表于 2025-6-9 12:07 | 显示全部楼层
我个人认为是学C语言,比汇编语言更容易学习,容易理解,可移植性也比较好,适合多种操作系统和硬件平台(・∀・)
回复

使用道具 举报

ID:1153239 发表于 2025-6-9 11:25 | 显示全部楼层
学c,c的就业市场和认可度较高,现在这就业形式还是先打好c的底子,有机会再慢慢熟悉汇编吧
回复

使用道具 举报

ID:1153239 发表于 2025-6-9 11:22 | 显示全部楼层
建议学c,c
回复

使用道具 举报

ID:1153239 发表于 2025-6-9 11:22 | 显示全部楼层
c的市场还是比汇编宽泛很多的,而且很多公司招人条件上也会写上C,可以先打好c的底子再熟悉汇编嘛
回复

使用道具 举报

ID:1129742 发表于 2024-7-28 20:03 | 显示全部楼层
C语言和汇编语言都是编程语言,但它们在用途、抽象级别和学习难度上有所不同。以下是两种语言的简要介绍和学习建议:

C语言:
用途:C语言是一种广泛使用的高级编程语言,适合系统编程、嵌入式系统、操作系统开发等。
抽象级别:C语言是一种过程式语言,提供了比汇编语言更高的抽象级别,使得编程更加直观和易于理解。
学习难度:相对于汇编语言,C语言更易学,有大量的学习资源和社区支持。
为什么学习C语言:
它是许多现代编程语言的基础。
有助于理解计算机系统的底层工作原理。
提供了对硬件的直接控制能力,但比汇编语言更易于编写和维护。
汇编语言:
用途:汇编语言主要用于编写需要与硬件紧密交互的程序,如驱动程序、性能关键型应用程序等。
抽象级别:汇编语言是一种低级语言,非常接近机器语言,需要对计算机体系结构有深入的了解。
学习难度:汇编语言比C语言难学,因为它需要对计算机的指令集和硬件有深刻的理解。
为什么学习汇编语言:
深入了解计算机的工作原理。
优化程序性能,编写高效的代码。
在某些特定领域(如嵌入式系统、操作系统内核等)具有不可替代的作用。
学习建议:
如果你是编程初学者,建议从C语言开始学习,因为它更易于上手,有丰富的学习资源,并且可以为你打下坚实的编程基础。
如果你对计算机硬件或底层系统感兴趣,学习汇编语言可以帮助你更深入地理解计算机的工作原理。
结合学习:在学习C语言的基础上,逐渐了解一些汇编语言的概念,可以帮助你更好地理解程序是如何被执行的。
无论你选择学习哪种语言,重要的是理解编程的基本概念,如变量、控制结构、函数等,并且通过实践来加深理解。随着经验的积累,你可以更自由地选择适合特定任务的语言和工具。
回复

使用道具 举报

ID:713651 发表于 2024-7-24 15:20 | 显示全部楼层
ljchip 发表于 2023-9-5 10:53
这个有意思,能够深入单片机技术。每个人的发言我都看过了,都比较片面。我91级计算机专业,大学毕业后,一 ...

看了这么多发言,就您的发言中肯中听
回复

使用道具 举报

ID:1116913 发表于 2024-7-24 14:50 | 显示全部楼层
C语言是一种通用的、过程式的编程语言,它支持结构化编程、词汇范围以及递归等特性。C语言被广泛用于系统软件与应用软件的开发,因为它具有以下特点:

高效性:C语言编写的程序执行效率高。
可移植性:C语言编写的程序易于在不同的操作系统和平台上编译和运行。
强大的库支持:C语言拥有丰富的库函数,方便进行文件操作、字符串处理、数学计算等。
系统级编程:C语言常用于开发操作系统、数据库、编译器等系统软件。
学习C语言,你将掌握基本的编程概念,如变量、数据类型、控制结构(循环、条件判断)、函数、指针等。

汇编语言
汇编语言是一种低级语言,它提供了与机器语言更为接近的编程方式。汇编语言允许程序员对硬件进行更精细的控制,适用于需要高性能或特定硬件操作的场景。

硬件控制:汇编语言允许直接访问和控制硬件设备。
性能优化:在某些情况下,使用汇编语言可以编写出比高级语言更高效的代码。
嵌入式系统:汇编语言常用于嵌入式系统、驱动程序和操作系统的开发。
学习汇编语言,你将了解如何直接与计算机的硬件进行交互,包括寄存器操作、内存寻址、指令集等。
回复

使用道具 举报

ID:1129518 发表于 2024-7-24 11:07 | 显示全部楼层
xzbzb 发表于 2022-12-21 20:35
无法直接说清哪个用处大,不过用c的开发者肯定比汇编的多。  优缺点:  c开发比汇编容易很多,隐藏了cpu细 ...

绝世好贴!
回复

使用道具 举报

ID:1083996 发表于 2023-9-7 15:36 | 显示全部楼层
先汇编,这是基础,后学啥都快;
若先学C,以后很多东西还得回头再找补
回复

使用道具 举报

ID:582723 发表于 2023-9-7 10:47 | 显示全部楼层
C语言相对入手更加容易
回复

使用道具 举报

ID:420836 发表于 2023-9-7 09:42 | 显示全部楼层
C 语言和汇编语言都非常有用,具体取决于您的程序要求。 C语言是跨平台通用的高级计算机语言。 汇编语言是依赖于硬件的编程语言,对于不同类型的单片机来说,汇编语言是不同的。
回复

使用道具 举报

ID:1091487 发表于 2023-9-6 19:08 | 显示全部楼层
学习c或者汇编,个人爱好,再就是实践应用确定
回复

使用道具 举报

ID:1067540 发表于 2023-9-6 18:19 | 显示全部楼层
性能越好语言越接近机器语言,同时也越不好学
回复

使用道具 举报

ID:304306 发表于 2023-9-6 09:58 | 显示全部楼层
汇编语言效率高,但是汇编需要了解硬件且不同类型单片机之间指令是有区别的;C可移植性比较好。
回复

使用道具 举报

ID:517951 发表于 2023-9-6 07:31 | 显示全部楼层
全力学c,C++ 辅修汇编就行.
回复

使用道具 举报

ID:1088185 发表于 2023-9-5 23:07 | 显示全部楼层
我都是混着来用,用汇编不是喜欢不喜欢的问题, 而是有的情况你没的选择。
重要的是在非用不可的情况下你会用不?
回复

使用道具 举报

ID:1059989 发表于 2023-9-2 07:49 | 显示全部楼层
建议:
先学汇编,使用汇编写一些练习程序,掌握基本原理及用法。
然后再学c,因为有汇编基础,对c能有更好的理解。
实际项目都使用c,基本涉及不到汇编。
回复

使用道具 举报

ID:1040201 发表于 2023-9-1 22:50 | 显示全部楼层
先学C,后面根据实际需要再学汇编
回复

使用道具 举报

ID:1092275 发表于 2023-8-30 15:56 | 显示全部楼层

新手建议从C学起
回复

使用道具 举报

ID:1040201 发表于 2023-5-26 17:39 | 显示全部楼层
都选C
回复

使用道具 举报

ID:1074206 发表于 2023-5-22 14:57 | 显示全部楼层
无脑选C,汇编用的方面还是少了
回复

使用道具 举报

ID:1078890 发表于 2023-5-21 15:52 | 显示全部楼层
c吧 感觉c广泛点
回复

使用道具 举报

ID:997051 发表于 2023-5-19 21:49 | 显示全部楼层
个人认为: c是一份可口的快餐. 养眼, 裹腹, 方便.
汇编则是一个大菜. 快餐易成, 而大菜则是个人功力的集成. 系统底层(rom)都是汇编的
回复

使用道具 举报

ID:420836 发表于 2022-12-22 09:07 | 显示全部楼层
如果你在大学里上过计算机语言课程,你通常已经学过汇编语言。 那么你应该开始学习并使用 C 或 C++ 进行设计和编程。
回复

使用道具 举报

ID:1058494 发表于 2022-12-20 20:59 | 显示全部楼层
学C把单片机摸熟
回复

使用道具 举报

ID:1054554 发表于 2022-12-20 16:19 | 显示全部楼层
这篇文章太好了,精辟。
回复

使用道具 举报

ID:1054442 发表于 2022-12-2 00:45 | 显示全部楼层
c吧,学完简单的c之后,很多其它语言就可以触类旁通
回复

使用道具 举报

ID:1049317 发表于 2022-11-30 22:54 | 显示全部楼层
建议先学C C学好了再接触汇编会轻松一些
回复

使用道具 举报

ID:378108 发表于 2022-11-29 23:35 | 显示全部楼层
精通C,汇编要了解,至少要能看懂
回复

使用道具 举报

ID:1054441 发表于 2022-11-28 17:40 | 显示全部楼层
俺啥也不会
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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