主题:为什么高级语言可移植性强于汇编
euclid
[专家分:1670] 发布于 2005-06-06 09:32:00
这虽是个常识。汇编语言转化成对应cpu的机器码,而高级语言同样要编译成机器码,为什么后者产生的机器码能适应不同的cpu呢?难道编译程序事先要判断所在的机型再产生对应的机器码吗?
请一定要指教啊
回复列表 (共12个回复)
沙发
digital1010 [专家分:1430] 发布于 2005-06-06 19:37:00
汇编涉及到所有硬件。它依赖CPU。
不同的CPU有不同的汇编。
而高级语言。没有太多的对低层硬件的操作。
所以高级语言要强于汇编。
这就是为什么,高级语言在低层硬件操作方面永远不如汇编。
换句话说也高级语言和低级语方的差别,一是高级指令代码人类化。低级的如汇编是助记符。这一点没什么。
主要是它们一个可以更多的操作低层世界。
如果那一个高级语言能够控制硬件。那它一定是独立的,不可移植的。
简单的说是这样。
板凳
euclid [专家分:1670] 发布于 2005-06-06 20:03:00
晕,先谢谢。可你说的我知道,关键问题是高级语言如何实现对多系统的支持的?
3 楼
digital1010 [专家分:1430] 发布于 2005-06-06 20:49:00
如何实现。
这就复杂了。
想想JAVA它就是因为“无孔不入”,所以速度慢。不能控制硬件。随着技术的发展。不知以后会怎样。
其实可移植的软件都要写一大半的兼容代码。
想想VC++为什么那么宠大。
3D游戏怎么那么宠大。
4 楼
euclid [专家分:1670] 发布于 2005-06-06 21:02:00
对呀,为什么?呵呵
5 楼
aaxwh [专家分:40] 发布于 2005-06-06 23:41:00
这主要是说源程序吧,而不是说目标代码
6 楼
digital1010 [专家分:1430] 发布于 2005-06-11 08:36:00
再作个比喻:
如计算机有0123456789个级别的指令。
汇编写的程序 高级语言指令
0 4
3 5
2 8
1 7
2 6
3 9
END END
看过这个应该明的差不多了吧。
用汇编肯定主要来写一些很低层的程序。而每个计算机的低层代码又都不一样。
所以它所用的汇编代码很多的要产生计算机低层的指令。
而高级语言一般用来写些高层的代码。所以它一般用4--9级的指令。
要不然为什么高级语言所写的系统程序。就没有不用系统指令好移植呢。
我想信如果用汇编只写一些算术题,一定好移植。(一些游戏软件,不都是用高级语言写一些常用的处理程序。而一些要求速度极高的,一般都要用汇编的)
道理就是这样。
7 楼
jqt008 [专家分:0] 发布于 2008-03-06 09:53:00
可问题是高级语言虽然不直接操作底层硬件,可这个的事情还是要做的啊,这个任务是什么程序做的呢?
难道是不同型号(系列)的机器(cpu)他们虽然指令系统不同,但同时为高级语言提供了统一的标准的高级程序接口吗?
请各位帮助解答,谢谢!
8 楼
臭石头雪球 [专家分:23030] 发布于 2008-03-06 10:56:00
[quote]可问题是高级语言虽然不直接操作底层硬件,可这个的事情还是要做的啊,这个任务是什么程序做的呢?
难道是不同型号(系列)的机器(cpu)他们虽然指令系统不同,但同时为高级语言提供了统一的标准的高级程序接口吗?
请各位帮助解答,谢谢![/quote]
需要编译的高级语言,如果需要更换平台,则需要换用新平台的编译器重新编译。之所以说移植性好,是指源代码不需要太大的改变,并非指编译出来的可执行文件可以直接跨平台。
而 JAVA 这种半编译,半解释的程序,编译成半成品,然后由不同平台的解释器去执行,因此虽然跨平台,但同等条件下,效率稍低一些。
9 楼
ccpp [专家分:9360] 发布于 2008-03-06 13:24:00
可移植性,指的是源代码的可移植性
不是编译后的可执行的程序。
java程序运行在虚拟机上,但不同平台的虚拟机 是不一样的。
P.S. 汇编语言没有可移植性
10 楼
我是大喊三 [专家分:3010] 发布于 2008-03-07 00:44:00
某种机器上的第一个高级语言恐怕还是要用汇编来写吧(比如C编译器)。然后又用此编译器来展开其它的东西
我来回复