1.一般的编译器,是先将高级语言转换成汇编语言(中间代码),然后在汇编的基础上优化生成OBJ目标代码,最后Link成可执行文件。
2.高级语言为什么不直接编译成机器码,而编译成汇编代码?
1)其中有一个好处是方便优化和调试,因为编译器也是工具,也是机器,毕竟是机器生成的程序,不可以非常完美的,而汇编是机器指令的助记 符,一个汇编指令就对应一条机器指令(特殊指令除外),调试起来肯定会比机器指令方便的方便,这样优化起来也方便。
2)高级语言只需要编译成汇编代码就可以了,汇编代码到机器码的转换是由硬件实现即可,有必要用软件实现这样分层可以有效地减弱编译器编写的复杂性,提高了效率.就像网络通 讯的实现需要分成很多层一样,主要目的就是为了从人脑可分析的粒度来减弱复杂性。
3)如果把高级语言的源代码直接编译成机器码的话,那要做高级语言到机器码之间的映射,如果这样做的话,每个写编译器的都必须熟练机 器码。这个不是在做重复劳动么?
汇编需要是直接操作cpu的一种底层语言,可以查一下BIOS的组成,会发现除了逻辑电路之类的组件之外就是汇编语言最底层了。高级语言也都是通过编译器翻译成汇编语言,进而转化成机器指令才得以运行的。高级语言处于比较顶层的位置。
论速度来说,汇编语言使用的是可以直接操作cpu的指令,同时可以直接对内存进行操作。汇编语言的运行速度和编译速度都快于高级语言,楼主也可以使用反汇编查看一下自己写的代码被编译器翻译的汇编代码。
论简易程度,高级语言比较易于编写。往往一条高级语言都会对应一条甚至多条汇编代码。所以汇编通常适合在局部代码中进行运行速度的优化,这就是所谓的内联汇编。指的是汇编和高级语言交替使用。
汇编用在一些对运行速度有追求的地方,也可以用在破解上。
另外汇编分为好多种。不同的cpu通常有不同的汇编语言对应。