单片机交流
登录
直播中
王利祥
8年用户
1508经验值
私信
关注
[问答]
请问单片机为什么有汇编又有C语言?
开启该帖子的消息推送
单片机
单片机
为什么要使用C语言呢?
请问单片机为什么有汇编又有C语言?
回帖
(1)
江根磊
2021-10-15 17:37:28
一、单片机的演进史
单片机为什么要使用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"
一、单片机的演进史
单片机为什么要使用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"
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
C
语言
和
汇编语言
在开发
单片机
时各有哪些优缺点?
2021-10-19
2037
用
C
语言
或
汇编语言
进行
单片机
编程哪一个会更好
2021-10-19
1876
用
C
语言
编写51
单片机
程序与用
汇编语言
编写51
单片机
程序
有
何不同?
2021-07-15
1974
请问
C
语言
和
汇编语言
在
单片机
应用上各有什么优点?
2019-03-29
2979
请问
单片机
为什么要使用
C
语言
?
2021-10-18
1413
请问
单片机
用的是
c
语言
的吗?
2023-11-02
360
如何利用
C
语言
去编写
单片机
程序呢
2021-11-02
1799
学习
单片机
中该学
汇编
还是学
C
语言
?
2021-10-14
1832
请问
C
语言
和
汇编语言
进行
单片机
设计那个比较好?
2020-03-11
2036
单片机
的编程
语言
2015-10-28
3782
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分