代码之家  ›  专栏  ›  技术社区  ›  Ian Rehwinkel

处理器在操作码和数据之间有什么区别?[副本]

  •  3
  • Ian Rehwinkel  · 技术社区  · 6 年前

    例如,这是“Hello World”的字节表示: 0x48 0x65 0x6c 0x6c 0x6f 0x20 0x57 0x6f 0x72 0x6c 0x64 0x00

    _ _ INS INS OUTS AND _ OUTS JB INS _ ADD

    一个解释是非常受欢迎的。

    2 回复  |  直到 6 年前
        1
  •  2
  •   old_timer    6 年前

    处理器知道,因为入口点是已知的。处理器按执行顺序解码,这也是您应该如何对可变长度指令集进行反汇编的方式。固定长度您可以直接从入口点线性地通过内存,但可变长度您需要按照执行顺序进行。这当然不是万无一失的,很容易让拆卸器出故障,所以要知道这是可能的,我建议你保持跟踪。我通常会将指令的入口点(在某些isa中是操作码)和非入口字节列成一个表,这样,如果我分支到指令的中间,我就可以在那里停止反汇编程序的路径(当然,您必须覆盖所有可能的路径)。

    关于操作码和数据,只要工具链和程序员做了正确的工作,那么一条指令将根据需要传递给另一条跳过数据区域的指令。

    处理器是非常愚蠢的,他们没有很多真正的功能,一些算术逻辑单元的东西,读写地址,移动数据进出寄存器。一半的工作是给他们提供遵循规则的程序。

        2
  •  4
  •   Margaret Bloom    6 年前

    在Harward架构中,数据和代码的显式分离将防止这个问题,在Von Neumann架构中,代码就是数据。

    由程序员决定

    推荐文章