单片机用C语言编程很好学,为什么还要用汇编呢?


C语言是发展趋势 。汇编可以帮助学生熟悉单片机内部结构 。
首先汇编语言和C语言都是编程语言 。汇编是一种机器语言直接面对底层 。与单片机底层硬件构架息息相关 。相对于C语言 。是一门低级语言 。C语言面向过程的语言 。在编译执行会转为汇编在生成单片机可执行文件 。是一门高级语言 。两种语言各有优缺点 。
一 。C语言/汇编优缺点 。
1学习难度 。
汇编因为的理解难度和开发难度比C语言大,所以学习难度大 。都是对寄存器操作 。学习汇编就要学习这个单片机的硬件结构和基本组成、存储器访问方式、单片机I/O操作时序、定时计数器、中断处理、指令系统、寻址方式等知识点;而且每个系列芯片的内部寄存地址和寄存器都有差异 。维护起来也十分困难 。

单片机用C语言编程很好学,为什么还要用汇编呢?

文章插图
2执行效率
汇编实时性比C语言好 。占用单片机资源少 。生成的执行文件更小 。汇编语言程序直接被转换成机器指令 。而C语言编译过程会先形成汇编 。在转为机器语言 。
3移植性
C语言比汇编移植性好 。程序可读性比汇编要强 。实现相同功能 。C语言的代码数量会比较短 。对于汇编来说 。每一种单片机汇编语言都不一样 。所以移植性差 。
C语言通过结构体 。指针映射寄存器地址 。当有需要时候 。只需要简单更改寄存器地址 。或者更改寄存器定义 。即可满足程序和工程的移植 。
4 。调试
C语言调试方便 。例如STM32开发过程中 。可以使用jlink通过SWD进行在线仿真 。调试各语法 。语句执行情况 。还可以查看各变量值的变化 。很容易就能定位到BUG问题 。而汇编调试困难 。很多时候难以很快定位问题 。
单片机用C语言编程很好学,为什么还要用汇编呢?

文章插图
二 。单片机开发不一定都能用C语言
单片机在上个世纪七十年代开始出现 。早期都使用汇编语言进行开发 。随着技术的发展进步 。制程工艺快速提升 。单片机的处理速度越来越快 。很多单片机的开发环境都使用C语言编译 。生产二进制文件 。
但因产品BOM成本要求 。很多的低端单片机还是OTP一次性烧录 。程序空间小 。许多的型号 。还是在用汇编进行开发 。如义隆 。松翰等 。
三 。学习汇编并不是无用
1,大学时学习汇编 。有助于理解单片机系统构架 。指令集 。和寄存器寻址等知识点 。也促进对于C语言的指针的用法 。
2,目前的linux开发的部分底层bootload文件 。或stm32的.s启动文件就是使用汇编语言的文件 。都使用汇编进行底层引导 。修改堆栈 。或者程序起始运行的位置 。都需要在对应文件中修改 。或者学习UCOS也会涉及修改启动文件内相关数据 。
单片机用C语言编程很好学,为什么还要用汇编呢?

文章插图
四 单片机发展趋势:C语言
当前设备半导体的成本 。随着制程工艺的提升而降低 。越来越多的低端8位单片机开始从汇编转向到C语言,单片机也往更高集成度 。更强大功能发展 。
所以学习单片机不一定要精通汇编 。但对汇编有一定了解 。对学习单片机有帮助 。只有在某一些功能需求时 。可以适当运用汇编 。
其他观点:
现在一般单片机都支持C语言和晦涩难懂的汇编语言 。在许多介绍单片机应用技术的教材中有相当一部分是用汇编语言编写的这说明汇编语言在学习单片机和编写单片机程序时尤其独特的优势 。现在我把学习单片机使用汇编语言的一些优势来发表自己的看法 。希望能够通过我说的这几点给学习单片机的朋友们一个参考意见并顺便解答一下这个问题 。
单片机用C语言编程很好学,为什么还要用汇编呢?

文章插图
第一点单片机汇编语言在执行效代码效率非常高
虽然单片机汇编语言在刚学初期会显得“晦涩难懂”但也并不是“一无是处” 。在有些方面是单片机C语言所不能企及的 。比如汇编语言首先在机器码生成方面其效率要比C语言高20% 。所以用汇编语言编写程序能够减少占用单片机里的寄存器单元 。特别是对于容量小的单片机而言很重要 。总之汇编语言要比C语言执行效率更高 。
单片机用C语言编程很好学,为什么还要用汇编呢?

文章插图
第二点单片机汇编语言执行速度快
我们知道任何编程语言最终都要生成单片机能够“识别”和执行的二进制码 。由于汇编语言可以直接访问单片机的内部寄存器 。所以单片机的汇编语言执行速度要比C语言快的多 。可以实施精细而准确 的控制 。在一些实时控制要求比较严格的控制场合一般要求用汇编语言 。

推荐阅读