【问题标题】:What is the difference between the various MOV opcodes?各种 MOV 操作码之间有什么区别?
【发布时间】:2014-04-14 07:11:09
【问题描述】:

在参考指南中,我看到MOV 的操作码是 88、89、8A 等。为什么一条指令有多个操作码?

【问题讨论】:

    标签: assembly x86 opcode mov


    【解决方案1】:

    这是因为从 CPU 的角度来看,这些指令略有不同。虽然助记符相同,但操作数不同。比如this reference,指令栏清楚地显示了这些操作码之间的区别。

    【讨论】:

      【解决方案2】:

      它们适用于不同类型的来源和目的地。对于 CPU 而言,在注册表和内存位置之间移动 8 位和 16/32 位值之间存在很大差异,因此它被编码为不同的操作码。

      List of opcodes.

      【讨论】:

        【解决方案3】:

        CPU 需要能够解码指令的含义。

        由于不同类型的操作数有多种移动,CPU 需要知道如何解释它们。如果操作码相同,则无法判断以下位是寄存器号还是内存地址。更不用说具有相同助记符的不同类型的指令实际上使用不同的字节数进行编码,因此 CPU 甚至无法判断下一条指令从哪里开始。

        详情见Intel® 64 and IA-32 Architectures Software Developer’s Manual中的附录B。

        【讨论】:

          猜你喜欢
          • 2015-03-25
          • 2012-01-13
          • 1970-01-01
          • 2021-07-24
          • 2011-05-24
          • 1970-01-01
          • 2019-03-31
          • 1970-01-01
          • 2020-06-08
          相关资源
          最近更新 更多