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

一、单片机的演进史

单片机为什么要使用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"

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值