写单片机程序到底用汇编还是C语言,也是一直存在的争议。
还是先摆出观点:
如果你只是想用单片机玩玩,做一些简单DIY应用,那么C语言足够,但是如果你想在走入嵌入式技术行业,精进原理,那么,用心学学古老但经典的汇编是肯定不会错的! /* 请注意加粗字眼*/
汇编能完成C语言完成不了的功能
作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。
Linux 内核,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分。
由于这部分代码与硬件的关系非常密切,即使是 C语言也会有些力不从心,而汇编语言则能够很好的扬长避短,最大限度地发挥硬件的性能。
举例:
Bootloader、启动代码都是用汇编写的。
如果想从事嵌入式技术的同学,Linux下做开发肯定是逃不掉的。
在Linux下的Bootloader种类比较多,都是开放源代码的,现在比较流行用u-boot,
什么是Bootloader?
简单的说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,以便为最终调用操作系统做好准备。
Bootloader的启动过程又分为两个阶段stage1和stage2。
stage1全部由汇编编写,它的主要工作是初始化硬件设备、为加载Bootlodader的stage2准备RAM空间、拷贝Bootloader的stage2到RAM空间、设置好堆栈段为stager2的C语言环境做准备。
由于每种嵌入式设备的硬件都不尽相同,所以肯定会存在需要修改Bootloader的,也就是Bootloader移植。
如果不懂汇编,咋移植?
帮助我们更加透彻理解底层
我们在学习编程的时候,其实就是在学高级语言,也就是那些为人类设计的计算机语言。
机器语言是纯粹的二进制数据表示的语言,是电脑可以真正识别的语言。
汇编语言和高级语言经过编译连接最终都会变成机器语言才能被CPU识别和运行。
汇编语言离机器更近,高级语言离人更近。
所以,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。
计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。
比如大家学编程的过程中,是否有这种疑问:
指针究竟是怎么运作的?
定义变量时变量的名字和变量值是不是存在相同的地址?
有些场合为什么要定义静态变量?
想要了解上述的几个问题,必须了解汇编,这就是汇编的魅力,帮助我们更加了解底层,了解你所写的代码。