C语言是介于低级语言和高级语言的一种中间体,具有直接反映底层行为的能力同时具有一定的抽象性。所以在易用性和效率上有一个不错的折中,所以低端嵌入式开发还是以它为主。并不奇怪。
深入学习后就可以非常方便的自己在某个平台上把C和ASM互转了,看到C就知道大概ASM是啥样的,看到ASM也很容易重建其C代码。
最近研究了一下汇编语言和C语言,发现两者相似的地方也挺多的!很多都一一对应!
C都可以直接转机器码了!
传送指令
汇编:MOV A,B
C语言:A=B
汇编:MOV A,#100
C语言:A=100
运算指令
汇编:ADD A,B
C语言:A+B
无条件转移指令
汇编:LJMP
C语言:goto
条件转移指令
汇编:JZ、JNZ、JC、JNC、CJNE
C语言:if、while、do while、switch
循环转移指令
汇编:DJNZ
C语言:for
定义一个函数(比如a)相当于定义了一个寄存器或RAM存储单元
指针就是RAM地址
数组就是连续的内存单元
[修改于 4年10个月前 - 2020/02/05 10:53:44]
C语言是介于低级语言和高级语言的一种中间体,具有直接反映底层行为的能力同时具有一定的抽象性。所以在易用性和效率上有一个不错的折中,所以低端嵌入式开发还是以它为主。并不奇怪。
深入学习后就可以非常方便的自己在某个平台上把C和ASM互转了,看到C就知道大概ASM是啥样的,看到ASM也很容易重建其C代码。
所以说学习ASM和学习C并举可以加深对两者的理解。我个人闲的无聊,喜欢拿ASM直接创建执行映像。比如我参考(抄袭)正点原子的OLED驱动代码如下,原来的C函数OLED_DrawPiont被我抄写成ASM版本DrawPiont了,转换是直译加意译,不是简单的直译,直译不费脑子但是效率低,意译是读懂了C函数的逻辑以后再根据CPU指令集的特点进行重构,保证高效精简。
当然,我自己也额外添加了两种矩形填充方式,因为画点方式效率低,但是非对齐访问太难有点费神,现在还没有实现。这个是直接由ASM构建的对齐式矩形填充,转化为C函数对我来说也很容易。
引用0x00000000发表于2楼的内容所以说学习ASM和学习C并举可以加深对两者的理解。我个人闲的无聊,喜欢拿ASM直接创建执行映像。比如...
能灵活的运用两者,技术不错!
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。