语言的最终产物是什么?
计算机其实是一系列逻辑门电路的集合。我萌生了一个想法,而查阅各种资料无果。。
想法如下了:
CPU在设计完成之后都会提供一组“0 1”指令集用以去操作CPU,进而操作整部计算机。
所以语言的最终产物,就是这些“0 1”指令集的集合(稍微注意下 ~ 这里指令集说的是 CPU 指定的“ 0 1 ”组合,而不是杂论无序的 0 1 ),而无论是汇编语言还是高级语言。。
各个CPU即使有展示自己特性的CPU指令集,但是由于提供了一个公共,通用的指令集,所以这就造就了一些高级语言比如C的可移植性,而如果汇编也只使用这些通用的指令集的话,那么汇编也可以移植(一万个网页中,一万个说汇编不可以移植)。
以上想法纯属猜测,,但十分想知其正确与否而不得。。所以还请各位大侠指点一二,感激不尽!!
我还很想知道语言的编译器(解释器)到底是如何把英文字母转化为 0 1 的,因为编译器是运行在计算机上的,所以无论如何,计算机面对的是英文字母。。如果说手动编译的话,我觉得我也可以对照着一张表把 mov 当做 0 1 的一种组合的。但是运行在计算机上的编译器到底是如何做到的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
汇编就是不可移植的,因为都是针对底层平台的指令集,而每套指令集都有各自平台的特性,没法通用(抽象度不够高)。但是你说的这种东西(“可移植的汇编”)我觉得应该类似于java 字节码或者.Net IL,它们各自实现了一套平台无关的指令集,你可以看看相关的资料。
第二个问题太大了,应该是与编译原理相关的内容吧。
有兴趣可以玩玩单片机。单片机的电路跟电脑的没法比简单太多了,然而即便如此,不同的单片机之间都很难移植代码,更何况计算机这么复杂的电路。
关于编译器那里,你可以去看看《编译原理》,你甚至可以自己DIY一个CPU出来编译你的汇编代码。
然而这世界上的每一个技术都是博大精深的,所以学习前分清主次和方向,事无巨细对每件事都刨根问底不是不好,可惜生命太短暂。真想再活500年,哈哈!
推荐一个相关阅读:https://www.cnblogs.com/index...,浅显易懂的用例子解释了楼主的最后一个问题
关于平台的通用,x86指令集应该都是一样的,所以一个windows下的exe就可以随意地运行在任意的windows下,但是却没法运行在同样硬件平台上的ubuntu系统。所以我觉得可移植性的问题应该不只是底层的指令集的兼容。
至于x86和ARM,底层指令集都不一样,就没什么可移植性可说的了,但是可以通过java或者.net或者nodeJS的方法来实现比较高层的兼容和可移植。