【问题标题】:What is the difference between machine code and opcode?机器码和操作码有什么区别?
【发布时间】:2012-06-14 07:38:26
【问题描述】:

这个问题主要与 PHP 有关,因为恕我直言操作码大多在 PHP 上下文中被提及。根据这个description,下面是一个php代码到opcode的转换过程:

php文本->扫描/解析->结果=令牌->编译>结果=操作码

这里有几个问题:

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

【问题讨论】:

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


    【解决方案1】:

    这个问题主要与 PHP 有关,因为恕我直言操作码大多在 PHP 上下文中被提及。

    事实上,Java 因其字节/操作码而更受欢迎

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

    是的,但是这个操作码是机器相关的。 Java 或 PHP 字节码的有趣之处在于它是独立于机器的,并且运行在特定于平台的虚拟机中。

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

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

    Lexer => Tokenizer => Compiler
    

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

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

    【讨论】:

    • 我不会说字节码被转换成机器相关的操作码。相反,它由在机器本身之上运行的虚拟机解释。
    【解决方案2】:
    • 机器代码 - 准备好由机器处理器执行的代码
    • 操作码 - 解释器执行的代码

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

    【讨论】:

    • 在机器码中,操作码是整个指令的一部分,说明它是什么类型的指令(添加或加载),与指示操作数的部分分开。例如x86 操作码:sparksandflames.com/files/x86InstructionChart.html。字节码也有操作码,但声称操作码总是意味着字节码是不正确的。
    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多