打印
[经验分享]

单片机为什么有汇编又有C语言?

[复制链接]
2123|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2025-1-11 16:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、单片机的演进史
单片机为什么要使用C语言呢?每件事物又有它的成长历史,开始说说它的发展历史。

单片机在选用语言上共进化了三次:二进制机器码→汇编语言→C语言。下面来说说



二、早期的二进制机器码
最早期的时候,CPU也很简单,指令集很少,二进制位数也不多。那时候编译器也没被发明,编程语言也没被发明,那时候就是用二进制直接编程的。

总结:最早的编程没有语言也没有编译器,程序员直接使用二进制和机器(CPU)对话。就是用如 0xff 直接对CPU内的寄存器操作。现在所用C语言编程其本质上也用二进制码来操作CPU,是这样的,C语言编译。

CPU只识别0和1,因从其原理说起,数电里的“与”“或”“非”我们最熟悉不过了,与或非门成就了整个电子界的发展。印象最深的就是“非”字了,但是我们的老师是长沙人,“与或灰”就是这三个字让我影响深刻。



单片机生产原理就是按照很多个与或非门组合实现的,所以单片机CPU只识别0和1。

这种方式的坏处就是不容易扩展,随着CPU的进一步复杂化,指令的变多,指令位数的变多,编程难度呈几何倍数增长。人的大脑慢慢就跟不上这个节奏。一旦出了麻烦就会出现像钟南山这样的有英雄,所以就有人发明了汇编语言。

**

三、二进制机器码到汇编语言
**

第一次革命:发明了汇编语言。汇编语言就像是C语言的宏定义,本质就是用一个符号来代替一串二进制。

MOV 10101010101010

SUB 01010101010101



有了汇编语言之后,程序员就不用再去**二进制序列了。编程时只需要用汇编指令来编程即可,汇编指令就是一个符号(符号就是由文字构成的,如MOV)。因为人类大脑天生对文字符号更加友好,因此用符号编程更简单。

用汇编语言编写的源程序不能直接给CPU运行,必须通过一个翻译过程,把源代码翻译成二进制序列才能给CPU。这个翻译的过程就叫汇编,执行翻译动作的就是汇编器。

汇编语言也有一些不尽如人意的地方,比如没有可移植性。

现在大部分的开发其实都不在需要汇编语言,甚至在单片机领域都不在用汇编语言编写程序,但是有些公司在招聘X研发岗位是要求要会汇编。

我猜原因可以以下几点:

1.汇编语言对理解高级语言的特性有很大帮助。可以先举几个例子:在C语言中,有两种传递参数的种类,一种是值传递,一种是指针传递。也就是值传递,是把变量的数值传递给子函数。我们经常有一个疑问,一个变量传递给子函数为什么会只是传值呢,如果你了解汇编语言,知道C语言的函数调用时栈的变化你就会理解这是怎么回事。

2.汇编语言有助于程序的调试。

**

四、汇编语言到C语言
**

汇编语言没有可移植性。在这个CPU上写的汇编程序无法直接在另一个CPU上运行。因此汇编语言是和CPU一一对应的。

为了可移植性于是乎发明了高级语言C。第一个高级语言就是C语言。C语言进一步靠近人的思维,为人的思维发明了很多CPU没有的东西,譬如数组。最终的目的就是降低编程难度,让高级语言更接近人的思维,然后通过编译器、汇编器等的翻译将这些源代码变成二进制然后给CPU运行。

**

五、革命无穷尽、层次变更多
**

在C语言之上还有更高级语言,譬如:C++、Java、C#、bash等。越往上越靠近人的思维,越往上语言本身提供的封装越多,越往上编程难度越低、语言的掌握越容易。

以后会不能有C语言到XX语言呢这个不好说,比如Android开发是用Java语言,近年来出现了python语言也可以开发Android,而且实现同一功能python的实现代码要比Java的少。

一个完整的Python HelloWorld程序只要一行代码:

print("Hello World")


一个完整的Java HelloWorld需要几行代码:

public class HelloWorld {

public static void main(String[] args) {
System.out.println("Hello World"



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43727385/article/details/105259450

使用特权

评论回复
沙发
jonas222| | 2025-2-4 20:03 | 只看该作者
C语言是一种高级语言,具有良好的可读性和可移植性,代码易于理解和维护

使用特权

评论回复
板凳
sanfuzi| | 2025-2-4 20:42 | 只看该作者
在一些资源紧张的单片机系统中,通过合理地使用汇编语言编写代码,可以将程序的内存占用降低到最低限度,以满足系统的运行要求。

使用特权

评论回复
地板
juliestephen| | 2025-2-4 21:14 | 只看该作者
C语言支持结构化编程,丰富的库函数和高级特性(如指针、数组、结构体)大大提高了开发效率。

使用特权

评论回复
5
pmp| | 2025-2-4 22:19 | 只看该作者
使用C语言可以快速实现程序逻辑,缩短开发周期,提高软件的可读性和可扩展性

使用特权

评论回复
6
macpherson| | 2025-2-5 07:52 | 只看该作者
汇编语言能够直接访问和操作硬件寄存器,实现对硬件的精确控制,适合处理时间敏感或硬件相关的任务

使用特权

评论回复
7
primojones| | 2025-2-5 14:37 | 只看该作者
汇编语言允许开发者精确控制硬件寄存器和内存,适用于需要精细控制的场景,如中断处理和实时系统。

使用特权

评论回复
8
janewood| | 2025-2-5 16:55 | 只看该作者
随着技术的发展,虽然高级语言逐渐出现并应用,但早期大量的汇编语言代码已经存在,并且一些经典的算法和底层驱动等仍然使用汇编语言编写。

使用特权

评论回复
9
mikewalpole| | 2025-2-5 17:49 | 只看该作者
掌握汇编语言可以使开发者在必要时对关键代码进行手动优化。虽然现代的编译器已经能够生成高效的代码,但在某些情况下,通过汇编语言进行优化可以获得更高的性能。

使用特权

评论回复
10
hearstnorman323| | 2025-2-5 18:39 | 只看该作者
C语言支持不同函数的数据覆盖,有效利用片上有限的RAM空间。

使用特权

评论回复
11
plsbackup| | 2025-2-5 20:32 | 只看该作者
对于资源受限的8位MCU,汇编语言能更好地控制程序大小和堆栈调用,优化内存占用,避免ROM空间不足或堆栈溢出等问题

使用特权

评论回复
12
jimmhu| | 2025-2-5 22:14 | 只看该作者
C语言拥有丰富的库和工具支持,可以大大提高开发效率。

使用特权

评论回复
13
zerorobert| | 2025-2-6 10:29 | 只看该作者
这样既可以充分发挥汇编语言的优势,又可以利用 C 语言的开发效率和可移植性,提高整个系统的性能和开发效率。

使用特权

评论回复
14
averyleigh| | 2025-2-6 12:02 | 只看该作者
单片机需要与各种外部设备进行交互,如传感器、执行器、存储器等。汇编语言可以直接对这些设备的寄存器进行读写操作,实现对硬件设备的精确控制

使用特权

评论回复
15
sdlls| | 2025-2-6 12:30 | 只看该作者
汇编语言是底层语言,与机器指令一一对应。通过学习和使用汇编语言,可以深入理解计算机的工作原理、指令执行过程、寄存器和内存的交互等重要概念。

使用特权

评论回复
16
macpherson| | 2025-2-6 14:22 | 只看该作者
C语言提供了硬件抽象层,使得程序员无需深入了解单片机的具体硬件细节,就能编写出高效的程序。

使用特权

评论回复
17
nomomy| | 2025-2-6 14:39 | 只看该作者
单片机的特殊功能(如定时器、PWM等)需要在特定的硬件操作上进行配置和控制,汇编语言提供了直接访问硬件寄存器和底层操作的能力,更容易实现这些特殊功能。

使用特权

评论回复
18
xiaoyaodz| | 2025-2-6 15:47 | 只看该作者
单片机的资源有限,包括内存、寄存器等。汇编语言可以直接操作这些硬件资源,能够更灵活地分配和使用内存空间,避免资源的浪费。

使用特权

评论回复
19
jtracy3| | 2025-2-6 16:09 | 只看该作者
C语言编写的代码可以在不同的硬件平台上重用,大幅度减少开发工作量。

使用特权

评论回复
20
usysm| | 2025-2-6 17:32 | 只看该作者
在一个智能家电控制系统中,使用 C 语言实现用户界面和网络通信功能,同时使用汇编语言编写电机控制和传感器采集的程序。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2108

主题

16232

帖子

16

粉丝