矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 8466|回复: 46

请教有哪些任务是汇编能做的,C51做不了;有哪些任务是C51能做的,汇编做不了?

[复制链接]
     
发表于 2020-6-27 20:43:02 | 显示全部楼层 |阅读模式
对于51单片机,有哪些任务是汇编能做的,C51做不了;有哪些任务是C51能做的,汇编做不了?
     
发表于 2020-6-28 23:05:04 | 显示全部楼层


这是一个一直以来的错误认识,它建立在 电子攻城狮 和 数学家/程序猿 的区别之上。

计算机的发明是一个坎坷的道路,人类最初发明的是机械计算机,而发明它的人,必须在数学和机械上都有极高造诣;随着电子时代来临,人类发明了电子计算机,但最初的电子计算机,它也是非常机械的 --- 用继电器来实现。甚至流行至今的 Debug 概念,最初就是因为飞虫到处乱飞挡住继电器触点,美军上将格蕾丝·霍珀(女性)不得不亲自去继电器计算机里捉虫而发明的词汇。
Cg-4zFTMx0aITsKfAARC7Bwo1TsAATfqwJVKCcABEME515.png

顺便说下,格蕾丝·霍珀连汇编都不用,她可以直接给计算机写机器码!包括大家耳熟的比尔盖茨也一样,他们都是可以直接读写机器码,汇编都不用的大神级早期程序员(比尔盖茨在成为一个成功的商人之前,是哈佛大学数学系高材生和程序员)。

燃鹅机器码和高级语言遵循的思路是不同的思路,前者是机械、机器的,后者是数学的,这是一个非常重要的问题,什么是数学?数学描述和机器描述并不一致。所以,使用高级语言 --- 实际上 C 或者更老的 Forran 语言,都是函数式的,使用数学而非机器的描述。

因此,高级语言和汇编,并非谁比谁难,而是数学描述和机器描述的差异。

回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-6-27 21:28:48 | 显示全部楼层
汇编是最基本的 其他高级语言都是基于汇编的 所以没有汇编干不了的。
回复 支持 反对

使用道具 举报

     
发表于 2020-6-27 22:29:48 | 显示全部楼层
cwf2011 发表于 2020-6-27 21:28
汇编是最基本的 其他高级语言都是基于汇编的 所以没有汇编干不了的。

那其他单片机也可以用汇编编程?
回复 支持 反对

使用道具 举报

     
发表于 2020-6-27 23:07:17 | 显示全部楼层
汇编是软件,C51是硬件,怎样比较?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-6-28 09:14:29 | 显示全部楼层
chhds 发表于 2020-6-27 23:07
汇编是软件,C51是硬件,怎样比较?


C51特指针对单片机的C语言定制版。
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 09:25:08 | 显示全部楼层
大多数情况下,用汇编是不必要的

认识误区: 会用汇编才是高手,为了让自己看起来更像高手,所以学汇编

语言只是工具,核心的东西是方案电路,这个确定后,用什么语言没多少区别

评分

3

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 10:39:09 | 显示全部楼层
本帖最后由 washu 于 2020-6-28 10:45 编辑
stalk12 发表于 2020-6-28 09:14
C51特指针对单片机的C语言定制版。


一般语境下,C51 指 Intel 的 i80C51,以及 Atmel 的 AT89C51
89c51.jpg

如果你使用的概念不是众所周知的,你需要提前说明,比如你可以说 C51 指 Keil C。

但是,即使如此,它也不是唯一的,可以被特指为“对单片机的C语言定制版”这个玩意,因为照样有很多人不用 Keil C,实际上不用的更多 --- 因为 Keil 是死要钱的,你用的一定是破解版(我相信你一定没掏钱),而大多数口袋里没钱又不愿意用盗版软件的人,用的是其它免费 C 编译器,比如我用的是 GCC,这个是免费的,而且 Windows 和 Linux 上都可以用的。

回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 10:50:14 | 显示全部楼层
王占文 发表于 2020-6-27 22:29
那其他单片机也可以用汇编编程?

你需要掌握一个基本概念,就是所有编译*型高级语言,都需要经过编译,变成汇编语言,然后再转变成二进制代码。

所以不管是其它单片机,甚至不是单片机,比如你在用的 PC 都好,在它上面的高级语言也是要编译成汇编的。

所以,不管是单片机还是 PC 还是更大型的电脑,都可以用汇编写程序,无非难度大小而已。

*除了编译型语言,还有解释型语言,解释型语言不需要编译成汇编,而是由解释器执行,比如 Java 语言或 VBS 语言
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 11:10:08 | 显示全部楼层
washu 发表于 2020-6-28 10:50
你需要掌握一个基本概念,就是所有编译*型高级语言,都需要经过编译,变成汇编语言,然后再转变成二进制 ...

嗯嗯,明白了,谢谢
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 12:29:30 | 显示全部楼层
王占文 发表于 2020-6-27 22:29
那其他单片机也可以用汇编编程?

都可以汇编编程 ,包括台式机电脑,不同的CPU有不同的汇编 ,汇编是底层。想用汇编必须非常了解对应的CPU,编写效率低可读性不强 不易维护,移植性极差。优点代码效率最高 速度最快。现在的单片机 CPU资源丰富 已经很少人用汇编写程序了。
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 12:31:51 | 显示全部楼层
cwf2011 发表于 2020-6-28 12:29
都可以汇编编程 ,包括台式机电脑,不同的CPU有不同的汇编 ,汇编是底层。想用汇编必须非常了解对应的CPU ...

感觉汇编比c难
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 12:48:53 | 显示全部楼层

是的 感觉玩汇编的人要脑力强大
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-6-28 19:31:10 | 显示全部楼层
那么问题又回去了,对于单片机开发,哪些任务是只有汇编语言可以实现,C语言做不了的?
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 20:08:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 22:53:08 | 显示全部楼层
stalk12 发表于 2020-6-28 19:31
那么问题又回去了,对于单片机开发,哪些任务是只有汇编语言可以实现,C语言做不了的?

已经说得很明白,高级语言比如 C 语言写的程序,一样要经过编译变成汇编,所以不存在只有汇编可以实现但高级语言不能实现的事情。

但,高级语言编译成汇编是根据一定规则实现的,因此高级语言编译后的汇编,不一定是用汇编实现的最优解,所以,由于编译结果可能且通常比用汇编可以实现的最优解,高级语言编译的结果需要更多程序空间和运行空间。因此,对某些程序空间和运行空间有限的单片机来说,高级语言编写的程序可能太大或效率太低而难以实现,但汇编的编写人员可以从机器代码角度去实现。

这不是高级语言和汇编语言的能或不能问题,而是编译器考虑到大多数人需求做的规则问题。

你的问题,我还是建议你去系统学习计算机专业一年级课程,《编译原理》和《操作系统设计与实现》这些,比你东问一点西问一句要强。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 00:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表