假设可执行程序是完全静态的,不需要动态库的支持 实际上我问的也算是 可执行代码是依赖操作系统的还是依赖cpu架构的?为什么? 高手赐教,莫嫌菜鸟提出的问题有点傻,呵呵
2012-05-24 11:38
网友采纳
相同的CPU架构只是指程序运行的硬件是相同的,而软件(操作系统、操作系统下生成的程序)是不一样的,最后生成的针对硬件操作的机器语言也不一样。生成的程序最后都要汇编成机器语言才能被运行,而机器语言在同一种架构下都可以用.但不能运行在不同架构的平台下。
追问
有道理,但是可执行程序不就是机器语言吗,而机器语言在同一种架构下都可以用,那为什么在同一种cpu架构 不同操作系统下不能通用呢?
回答
我觉得你是几个概念没弄清楚。 机器语言、高级语言。 机器语言是直接面对硬件,硬件要想运作只认识机器语言,一般是二进制代码0和1。 可执行程序是高级语言,高级语言是面向用户的语言。无论何种机型的计算机,只要配备上相应的高级语言的编译或解释程序,则用该高级语言编写的程序就可以通用。 可执行程序如何被机器硬件运行,其实就是 通过编译,链接程序,将高级语言转换为计算机能直接识别的二进代码的过程。 所以你用不同操作系统生成的可执行程序,本身高级语言就不同;因为操作系统不同导致编译的过程也不相同,最后的机器语言自然也不相同。你用一个操作系统生成的可执行程序最终的机器语言在另外一个操作系统下不被识别,自然就不会被运行。
追问
可执行程序是高级语言?不是机器语言么,都编译链接过了
回答
简单点说,高级语言给用户看的,通过汇编或反汇编,转换成机器看的机器语言,机器看懂的正确的机器语言才会执行操作。用户只能看到高级语言和最后机器运行的结果,剩下的都是机器的事情了。 可执行程序是高级语言,只有通过转换成机器语言,电脑才能识别运行,你所谓的编译连接只是该程序和其他数据库文件之间编译连接了。 记住,机器语言就是0.1码。