机器代码和操作码之间有什么区别?

时间:2012-06-14 07:38:27

标签: php assembly opcode machine-code vm-implementation

问题主要与PHP有关,因为IMHO操作码主要在PHP上下文中提到。根据这个description,这是一个将PHP代码转换为操作码的过程:

php text - >扫描/解析 - > result = tokens - >编译> result = opcode

这里有几个问题:

1)操作码只是机器代码的一部分,机器代码是否由操作码组成? 2)在Wamp服务器的上下文中思考,PHP模块负责什么?该模块是PHP解释器,它将PHP代码转换为令牌,还是将令牌编译为在硬件(处理器)上执行的操作码的编译器?

2 个答案:

答案 0 :(得分:3)

  

问题主要与PHP有关,因为IMHO操作码主要在PHP上下文中提到。

事实上,Java的字节/操作码

更受欢迎
  

1)操作码只是机器代码的一部分,机器代码是否由操作码组成?

是的,但此操作码与机器有关。 Java或PHP字节码中有趣的事情是它独立于机器并在特定于平台的虚拟机中运行。

  

2)在Wamp服务器的上下文中思考,PHP模块负责什么?

没有模块,它是核心的一部分。

Lexer => Tokenizer => Compiler
  

该模块只是PHP解释器将PHP代码转换为令牌,还是编译器将令牌编译为在硬件(处理器)上执行的操作码?

不完全是。生成的字节码与机器无关(命名为" Zend-opcode"),不能直接在硬件上运行。最后一步是将此字节码转换为与机器相关的操作码。

答案 1 :(得分:1)

  • 机器代码 - 可由机器处理器执行的代码
  • 操作码 - 由口译员执行的代码

操作码由php核心执行,它是内部功能。 为了加速php脚本,有一个模块PHP Accelerator,它缓存编译后的字节码,以便下次直接由处理器执行