谁知道为什么c语言程序为何可以在不同CPU上运行,还有,如果一个操作系统如果使用汇编语言开发,除了

谁知道为什么c语言程序为何可以在不同CPU上运行,还有,如果一个操作系统如果使用汇编语言开发,除了繁琐,和c语言操作系统还有什么劣势?
还有,c语言为什么运行起来与硬件无关?

因为运行的并不是C语言的代码,而是被编译器编译过的C语言代码,只要编译器设置正确,在不同的CPU上想完成相同的任务,C代码是完全一样的,只就是所谓的代码移植,编译好的C程序是不能移植的,但是相同的代码可以在任何有编译器的环境中编译.
至于操作系统,用汇编写的话,很难让人理解,查错,修改,升级都会比较麻烦,但是性能上,直接用汇编写,如果你的技术够高,肯定会比C的要好.追问

那如果编译器设置正确,那么汇编语言在跨硬件上(都是计算机CPU)应该和c一样吧?

追答

很遗憾,不是,每一个系列的CPU有不同的汇编语法,简单地说,会编写的程序,只适用于一种CPU或一系列,而C语言的语法是完全通用的(在计算机CPU上,通过重新编译来获得正确的程序).
同样的一句C代码可以在任何一台装有任意一款CPU的计算机上成功编译,只要语法正确.
但是,不同的CPU要求不同的汇编语法,这就意味着,想要在两个不同的CPU上完成相同的任务,需要不同的两句汇编代码.
C语言并不是运行起来与硬件无关,在计算机上运行的是机器语言,并不是你写什么就运行什么,CPU只认识机器语言,而每一种CPU都有自己的机器语言语法,是有固定的硬件特性决定的,而C语言之所以没必要考虑CPU的不同是因为这部分工作已经被编译器做完了,编译器会把你的一句C代码根据当前的CPU自动的翻译成相应的机器语言,以适应其工作,而翻译完后的东西就不再是移植性超好的C了而是机器语言,把翻译好的东西在拿到别的CPU上他照样会崩溃,但是如果你把C语言重新搬到别的CPU上去,编译器重新编译,会重新适应新的CPU重新便宜出合适的机器语言,汇编之所以没有这样的移植性,是因为汇编语言的特性,汇编语言每一句话与机器语言的一段代码一一对应,这就导致其实它和机器语言完全一样,一个CPU一个语法,只是人看着舒服点,没有封装的存在,就没法突破这个问题,但是java解决了这个问题,java的编译器并不把java翻译成机器语言,而是java底层解释语言,这样,只要在计算机上安装了解释器,任何计算机都可以运行同一段java代码,达到同样的效果,这样,就和CPU的特性根本没关系了.

重点在于,CPU其实在运行什么,CPU单个拿出来是很低级的东西,他只能根据你给的高低电平来执行固定的动作,而高低电平在计算机里正好是机器语言里的二进制数,这些数字有规律的排列既可以形成一系列可以完成一种任务的动作命令,成为了程序,而高级语言,事实上也最终变成这些数字,只是在程序员写的时候还是高级语言的样子,高级语言的语法,这样会给编程带来方便,让编译器来解决这个CPU兼容的问题,移动程度上就解决了移植性的问题.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-20
C语言操作系统,没这个系统吧。unix,Linux,Windows,Android,MacOX等平台,操作系统。追答

你说的是移植性能好,可以跨平台部署。

相似回答