矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: stalk12

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

[复制链接]
     
 楼主| 发表于 2020-6-28 22:56:51 | 显示全部楼层
washu 发表于 2020-6-28 22:53
已经说得很明白,高级语言比如 C 语言写的程序,一样要经过编译变成汇编,所以不存在只有汇编可以实现但 ...

感谢你的谆谆教导,我很受用,高屋建瓴啊。
回复 支持 反对

使用道具 举报

     
发表于 2020-6-28 23:05:04 | 显示全部楼层


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

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

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

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

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

回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-6-28 23:15:13 | 显示全部楼层
washu 发表于 2020-6-28 23:05
这是一个一直以来的错误认识,它建立在 电子攻城狮 和 数学家/程序猿 的区别之上。

计算机的发明是 ...

好吧 长见识了
回复 支持 反对

使用道具 举报

     
发表于 2020-6-29 23:10:26 来自手机 | 显示全部楼层
个人认为凡是c能做的,汇编一定都能做
回复 支持 反对

使用道具 举报

     
发表于 2020-6-30 09:48:17 来自手机 | 显示全部楼层
年代不同,我们当年的一伙人里,大多能用汇编,能用C的几乎没有。学硬件的出身,容易理解CPU内部的处理器寄存器中断堆栈这些,看见C有点头大。和当年程序存储器空间有限有一定关系,C写出来可能会长。
回复 支持 反对

使用道具 举报

     
发表于 2020-6-30 12:36:07 | 显示全部楼层
只要你功力深,没有汇编做不了的事,用汇编更省空间,执行效率更高
回复 支持 反对

使用道具 举报

     
发表于 2020-6-30 14:43:07 | 显示全部楼层
yzx0201 发表于 2020-6-30 12:36
只要你功力深,没有汇编做不了的事,用汇编更省空间,执行效率更高

UI你用汇编试试
回复 支持 反对

使用道具 举报

     
发表于 2020-6-30 15:32:38 | 显示全部楼层
yzx0201 发表于 2020-6-30 12:36
只要你功力深,没有汇编做不了的事,用汇编更省空间,执行效率更高

前面提到的格蕾丝·霍珀,功力肯定没你深,所以才跑去发明编译器,发明 COBOL 语言对吧

Cg-4zFTMx0aITsKfAARC7Bwo1TsAATfqwJVKCcABEME515.png
回复 支持 反对

使用道具 举报

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

其实C51用熟练了能完成所有汇编的任务,本来就不存在谁能做谁不能做的情况!
只是不同的人针对不同的任务所用的方法不一样吧。
我对比过经过优化后C51生成的目标代码已经无限接近汇编产生的目标代码了,二者效率几乎一样的。
回复 支持 反对

使用道具 举报

     
发表于 2020-6-30 16:03:30 | 显示全部楼层
有人造了轮子,有对应的库C语言什么都能实现
不基于库的话,汇编能实现多任务切换C语言不能
回复 支持 反对

使用道具 举报

     
发表于 2020-7-1 16:35:37 | 显示全部楼层
汇编最直观,但移植困难。C更抽象,移植更容易。
回复 支持 反对

使用道具 举报

     
发表于 2020-7-1 18:42:19 | 显示全部楼层
看这段,用了汇编,比C少一半的代码,效率提高,速度快一倍。
  1. #pragma save
  2. #pragma disable_warning 59
  3. unsigned long getCount(){
  4. /*    unsigned long r;
  5.     __data char *p=&r;
  6.     *p=P0;
  7.     *(p+1)=TL0;
  8.     *(p+2)=TH0;
  9.     *(p+3)=inB3;
  10.     return r;*/
  11.     __asm
  12.         mov        dpl,_P0
  13.         mov        dph,_TL0
  14.         mov        b,_TH0
  15.         mov        a,_inB3
  16.     __endasm;
  17. }
  18. #pragma restore
复制代码
回复 支持 反对

使用道具 举报

     
发表于 2020-7-3 09:14:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2020-7-13 12:56:28 | 显示全部楼层
washu 发表于 2020-6-30 15:32
前面提到的格蕾丝·霍珀,功力肯定没你深,所以才跑去发明编译器,发明 COBOL 语言对吧

编译器编译时不也是走的底层?难道不用转?编译器走的是什么
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-7-13 23:07:41 | 显示全部楼层
好像延时,很多情况也只能用汇编。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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