机器码、CPU指令集、汇编指令集、操作系统、API接口、C标准库的关系。

问题列表:1.不同的CPU对应不同的机器码吗?如果是,那么关于机器指令,既然都是由0与1组成,那么有统一的标准吗,比如说"+"号就是010101?
2.机器码对应于该CPU本身,那CPU的指令集与其机器码有什么区别和联系吗?
3.汇编指令集是针对于CPU指令集编写的还是针对于其机器码编写的?汇编指令集与CPU指令集是一一对应关系吗?
4.C标准库与CPU指令集的关系,C库函数是用汇编实现的吗?那"C标准库没有规定其实现,是为了方便移植性"这句话又怎么理解?C的编译器又是什么语言实现的?C库函数与windows api的关系?
5.windows os为什么用C、汇编来写,而不是其他高级语言?API接口由操作系统封装的吗?不同的操作系提供不同的API?Windows API都是用C\C++\汇编来写?它的最终实现是调用了汇编指令集(cpu指令集)吗?

你好,我来初步解释你所提的问题,仅供参考。

1、不同的CPU肯定对应不同的机器码,其实这种说法不规范,应该是不同的机器码集,或机器指令集,因为汇编指令和机器指令是一一对应的,也可以说成是汇编指令集。我们编写的程序最后都是处理(这里的处理根据不同的高级语言,可能是解释、预编译、编译、链接等等)成由汇编指令集里面的指令构成的指令序列,然后调入内存,再一条条由知道这每条指令干什么用的CPU来执行的。
你说的“+”号,其实就是加法指令,当然不可能是“010101”,因为没有6位的指令,只可能是4位、8位、16位、32位、64位。
位数相同不同型号的CPU,指令集略有不同的,但绝大多数指令应该是相同的。比如类似你说的“+”等算术运算,当然还有更多的其它指令,都是相同的二进制编码。这就是你的同一台电脑可以使用INTEL的CPU,也可以使用AMD的CPU的原因,并不会因为你换了CPU,电脑就不能运行了。
那么32位的CPU还能执行16位的指令吗?那么64位的CPU还能执行32位、16位的指令吗?这就看CPU是否向下兼容了。如果你的程序(exe文件)很老,一运行就出错,或者蓝屏了,呵呵,就不兼容了。CPU不再认识你的程序里的那些“老”指令了。
2、这个问题在回答1里已经说的很清楚了,机器码就是CPU的指令,CPU的指令集就是机器码的集合,说白了,就是CPU的API(应用程序编程接口),只不过这里的应用指的是汇编语言。
3、和2是同一个问题,汇编指令集当然和CPU指令集是一一对应的。一种新的CPU生产出来后,它的指令集就是固定的。生产厂家就会推出对应的新的汇编系统,与其指令集相配套。然后那些编译系统开发商们也会对他们的系统进行升级,增加新的特性。
4、C标准库也是机器指令构成的程序,当然和CPU指令集有关系。所谓的标准,不是针对机器语言来说的,而是针对C语言的编码来说的。比如sin(x);这个函数,在不同的电脑(PC机、苹果机甚至手机、单片机等),用C语言编写代码时,都是sin(x),不会是别的(比如sn(x))。诸如此类的所有函数形成的集合就是一个标准库。所以我们编写的标准C程序,可以再PC机上编译成PC机能运行的机器指令,也可以再苹果机上编译成苹果机能运行的机器指令,PC机上有PC机的"翻译",苹果机上有苹果机的“翻译”,他们将这个你编写的这个相同的C程序翻译成不同的机器指令,但最终程序的运行结果是一样的。这就是可移植性,因为遵循了标准。标准不光指的标准库,还包括数据类型、关键字、运算符、语法等。标准库的实现当然和你所使用的计算机的CPU的指令集是紧密相关的。C的编译器的实现可以是机器语言、汇编语言,也可以是C语言实现。呵呵,这个好像不太好理解。所谓的编译,就是将你的由字符构成的源程序转化成机器能理解的二进制,二进制无非是0、1构成的一串符号,先存在硬盘,再调入内存运行。机器语言、汇编语言、C语言都能处理二进制,都能生成那个最终的二进制文件,明白了吧。
C库函数和windows api基本没有关系。windows有自己的一套库函数,就是API,事实上,C的标准库已经没有多大意义了。如果我们编写没有图形界面的某些应用程序,如控制台应用程序,可能还会用到标准库。
5、windows如果不知道CPU的指令集,如何发挥windows的最佳效率?而汇编语言、C语言和CPU联系的最紧密,当然要用它们来写。
所谓封装,就是隐藏其实现,暴露其接口。正如CPU一样,我们知道ADD A,B是计算A加B,怎么计算的,不用知道。CPU指令集就是这台裸机(无操作系统)给我们的一个API。
一台安装了windows系统的计算机,其实是一台建立在裸机基础上的“虚拟机”。这就好比一个初生儿和一个成人一样,初生儿其实具备了一个人的所有特征,但你无法和他交流(即使是机器语言也不行,呵呵),但他的确什么都会,你能说一个初生儿不会说英语吗,他会的,他已经具备了说英语的所有条件,因为他有嘴巴、会发音,有嘴巴就会说。但是让初生儿说英语实在是太难了,也就是这个API不好弄。一个成人就是安装了操作系统的长大了的初生儿,他的功能更多了。比如肌肉发达了(相当于外设增加了),能很看懂英语和说英语了(高级语言有了)。但最终还是要和初生儿一样用嘴巴说英语!只不过说的更好听而已,也就是API更丰富罢了。但不论你吃的是什么山珍海味,还是五谷杂粮,最终都转换成氨基酸、葡萄糖、微量元素和水供肠胃吸收。不论你用什么语言编写的程序,最终都是CPU执行的二进制机器指令。
API本质上一个windows系统调用的集合,调用windows给我们提供的所有功能,比如创建一个窗口。如果windows没有提供这个集合,那么windows还有用吗?至于windows是怎么提供这个API的,API是怎么实现的,这个就要问microsoft了。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网