请教一下老师们,汇编语言是如何发展成C语言的?
现在搞明白了汇编语言,但是对C语言一头雾水,不明白它是如何运行的,当年科学家们又是如何想到把汇编语言变成C语言的?而且还能有对应关系? 分立元件 发表于 2019-12-7 11:33原来还有这个过程
简单说就是懒。
上个世纪二十年代,美帝一个化学家生了个很懒的不爱读书成绩很差的儿子,不读书成绩不好自然无法子承父业做化学家,只能在二战爆发的时候去当炮灰,不过他运气好没被炮灰掉,反而在军队里爱上了无线电,发现哎呀无线电理论太高深看不懂咋办?就跑去大学补课补课再补课,终于 50 年代的时候找了个好工作,就是在十八摸公司计算弹道导弹,这个工作呢成天要把一大堆计算公式用汇编写给计算机看,他写了几年,烦了,这工作太难做啦 :dizzy:你看现在的年轻人就是这样,怕苦怕累,写个汇编都受不了,矿坛的老头子们肯定又要起来鄙视得不要不要的了 ;P
于是这个年轻人就和当时的十八摸董事说,哎老董你看我们十八摸的计算机那么好,就是汇编不太好,程序员成天写错程序,要不我发明个简单的?你看这样那样再那样,就不容易错了 :lol 因为这个语言是为了方便他本人负责的计算弹道导弹录入数学公式的,所以这个语言就叫做 Formula Translation(公式翻译)语言,后来简称为 Fortran 语言。
所以,高级语言的发明,是一个很烂的差生因为写汇编太难发明的,用来偷懒的东西。
那么,C 语言又是怎么发明的呢?是这样的,上个世纪 60 年代中叶,美帝委托哔哩哔哩实验室开发一个超级计算机用的操作系统,有个打工的年轻人就利用这个项目编了个太空对战的小游戏每天玩得不亦乐乎...可是好景不长,这个项目黄啦,这个年轻人一看没电脑可以玩游戏了咋办?正好哔哩哔哩实验室有一台没人用的电脑,他就想拿这个电脑来玩游戏,可是当初他编游戏是在超级电脑上编的,咋办?他就教唆了另一个年轻人,说我们来一盘消消乐...不,太空对战吧你看好玩不?好玩,嗯和我一起把这个游戏移植到这台没人用的电脑上以后我们可以天天玩 :lol 于是他们在已有的 B 语言基础上发明了 C 语言,终于实现了消消乐...不,太空对战游戏的移植,于是两个年轻人终于可以整晚修仙 :P
以上,就是高级语言和 C 语言的发明简史,一个是为了偷懒,一个是为了玩游戏。 C语言就是在一堆汇编语言支持下运行的。每一个C语句都对应着汇编的解释---给计算机看的。任何高级语言都是如此,不过具体的细节使用者就不知道了。 w6955 发表于 2019-12-7 09:53
C语言就是在一堆汇编语言支持下运行的。每一个C语句都对应着汇编的解释---给计算机看的。任何高级语言都是 ...
就像是:汇编是元器件,C是集成电路,多个不同的汇编组合完成了不同的C语句吗? 分立元件 发表于 2019-12-7 09:58
就像是:汇编是元器件,C是集成电路,多个不同的汇编组合完成了不同的C语句吗?
这样理解基本没问题,任何高级语言与机器码之间都会有一个或者几个中间层,最低一级就是汇编。没有汇编的年头写程序就得写机器码了。 汇编不是一下子就发展到C的,中间至少还隔着Fortran和B。那时候各种高级语言百花齐放,可是计算机之父老冯坚决反对搞高级语言。 一步一步发展成C语言的 wenjunlin1979 发表于 2019-12-7 10:33
汇编不是一下子就发展到C的,中间至少还隔着Fortran和B。那时候各种高级语言百花齐放,可是计算机之父老冯 ...
原来还有这个过程 个人认为c语言学好还是很有必要的,它用起来很方便。一个是c不需要你自已去管理寄存器,用寄存器之前也不必去找这个寄存器以前前用没用过,现在是不是还在用。堆栈满了没有,某部分地址的内存安排做什么用,这都不用考虑了。再一个是c语句和数据结构等都很灵活,简单的几句话就能代替汇编的很多语句,也不用写任何的跳转位置标号。对于大量数据的处理很方便。尤其是各种数学运算,用起来很方便。再就是移植。一个用于pic单片机的c程序我很轻松就能看懂,修改后用于我熟悉的stm8。汇编的话没有注释,读别人的程序真的是难。总的来说,单片机像个比较单纯人,自己写汇编可以让他一令一动的做事。如果用c的话,用编译器可以把我的意图转变成,解释成汇编。尽管我不明白一个数开方怎么用汇编实现,我可以让编译器来告诉单片机怎么做。对于这样单纯的人,我要告诉他把大象装冰箱每一步该怎么做,但是如果有一个正常的人(编译器),我只需要告诉他把大象装冰箱就行。我不需要知道他怎么去指导那个单纯的人装,我只要一个结果,而且很多时候编译器指导的很好。比我装的明白的多。。。 正在学习C语言编程 高级语言其实就是有组织的从程序库中调用事先编好的机器码子程序,入口的参数传递在单片机中一般是放在指定的寄存器,运算结果也是放在指定的寄存器中,这样众多的子程序就构成了一个个语句模块,在编译的时候只要识别出了语句的代码,再调用指定的相关子程序,对指定寄存器里数据进行处理,再把结果存入输出的寄存器,就实现了高级语言的操作,把这个操作过程记录到目标文件中就实现了高级语言的编译,工作时执行的是事先编译好的代码,这个过程可以优化,运行速度比较快。解释程序则不需要形成过程目标文件,直接到库里调用子程序进行运算,这个过程就很难进一步优化,所以解释语言比编译语言速度要差。高级语言的执行速度比汇编语言的要慢,因其存在调用子程序的统一化创作,就不能用最精炼的操作,例如单字节的操作就比多字节的要快,而解释语句时可能是按多字节的来运算,这样自然就慢了许多。 washu 发表于 2019-12-8 20:27
简单说就是懒。
上个世纪二十年代,美帝一个化学家生了个很懒的不爱读书成绩很差的儿子,不读书成绩不 ...
懒人使社会进步! 计算机语言出现了至少一百多种,多数都死了。 w6955 发表于 2019-12-8 21:59
计算机语言出现了至少一百多种,多数都死了。
现在就C语言、汇编语言没有淘汰, 玩惯硬件的人再去玩软件,汇编语言是个无法忽略的过程。在汇编中可以看到、听到甚至触摸到一条语句如何让一块冷冰冰的金属物件动起来,这让汇编语言顿时变得多姿多彩;不过这种感受不是所有人都会有的,多数人觉得汇编极其枯燥乏味。
14楼的朋友不是做过74门的模拟微控制器吗?不妨在此基础上再写个C编译器玩玩,看看一条C语句如何生产出一堆汇编语句来:lol。
页:
[1]
2