编译需要指令集吗
㈠ 编译时转化成二进制代码,需要借助一定的语法吗这语法是什么知识领域里的
任何编译器都是先将程序转换成汇编,汇编就是指令集编程,任何一个系统或者CPU都有他自己的指令集,这个不同公司的产品指令集不同,特别是CPU指令集直接和硬件结构挂钩,你不可能指望电脑的CPU会和电视遥控器的指令集相同,因为构造就不一样。。。。
高级语言先按照编译器制定的规则编译,这些规则由运算符,关键字,预编译只能决定,如果你熟悉指令集,自己都能猜出来是怎么转换的。。编译成汇编之后,由厂商提供的机器码运算规则(按照这套规则你可以用演草纸算出机器码),或编译器编译成机器码。。。。
㈡ cpu指令集的问题
你说的x86和x64或者ia64是CPU架构,也就是编译程序的标准,而MMX、SSE这些是指令集。指令集并非会限制某些程序的运行,而会影响程序运行的速度。
通俗的说,指令集是优化某些程序中的可执行代码的执行效率,就是说,某些程序在运行在支持某个指令集的CPU上会有很高的性能。比如说,SSE指令集就是为了多媒体程序的性能而设计的,使用了SSE指令集编写的程序,当他运行在支持这个指令集的CPU上时,性能会有极大提升,而运行在不支持SSE指令集的CPU上,虽然CPU的速度和指标可能一致,但是会有极大地下降。
指令集是一种知识产权,所以amd和intel的不一样,如果AMD想支持intel的指令集,是需要为intel付费的,所以amd会另外开发一套指令集,以白皮书的形式发放给程序员,让程序员编制出适合amd cpu使用的程序。
往往一个程序不只可以兼容一套指令集,假如编译时选择兼容多种指令集,程序的体积会大一些,但是这并不会造成太大的问题。
而X86是CPU的架构,也就是在只支持X86架构的计算机上,为X64编写的任何程序是不能运行的,这个不是指令集。
综上,指令集并不能限制程序是否能够在该计算机上运行,而是制约了程序运行的速度。
㈢ 程序是通过编译器编译才能执行的,那么编译器又是怎么
一般来说,程序语言的编译有两个变量,一个是语言本身的语法体系,另外一个是目标机器的指令集体系结构。
对于前者,我们要发明一个新的编程语言的时候,一般是用已有的编程语言写新语言的编译器;
对于后者,要进行交叉编译,即在A指令集的计算机上编译B指令集计算机要用到的二进制程序。
本质上是一个鸡生蛋蛋生鸡的问题。
然而还是会绕到最终的问题:最最开始的第一只鸡(蛋(编译器))哪里来的?
当然是拿汇编语言写的啦~
那第一个汇编语言的汇编器是怎么写的?当然是直接手写二进制代码啊。。。