【问题标题】:Confused about how an ARM32 processor distinguishes between a register and immediate instruction对 ARM32 处理器如何区分寄存器和立即指令感到困惑
【发布时间】:2020-07-20 00:03:56
【问题描述】:

我正在查看 ARM32 处理器的各种指令,并且对处理器如何区分对寄存器进行操作的指令和对立即值进行操作的指令感到困惑。例如,在 ARM32 中,对于 MOV 指令,对于立即数和寄存器版本,对我来说,您似乎有可能在机器代码中拥有完全相同的指令。如果是这样,处理器如何“知道差异”?

【问题讨论】:

  • 您可能想尝试组装这两个版本并查看机器代码。我想你会发现它们不一样。仔细阅读说明规范应该可以确认这一点。
  • 如果您仍然不确定,您能否发布一个您认为编码相同的两条指令的具体示例,您认为相应的机器代码是什么,以及您认为的逻辑所以?他们肯定不会,但有人可能会帮助您发现逻辑中的缺陷。
  • IIUC,ARM 32 位机器代码(非拇指)对大多数操作码使用“灵活的第二操作数”,可以是寄存器、移位寄存器或立即数。这种差异以某种方式编码。查看手册了解详细信息。不,当然 2 个不同的指令不能具有相同的编码。相同的位模式总是以相同的方式解码。
  • @PeterCordes 我认为您正在考虑 thumb2 对 thumb 的扩展,它们是论坛上未定义的指令,会变成两个半字指令。前 16 位显示它是 thumb2 整个 32 位是指令,其余部分编码在情况下
  • 所有说明都是独一无二的。

标签: assembly arm instructions machine-code instruction-set


【解决方案1】:

这两个是你困惑的吗?

xxxx0011101x0000xxxxxxxxxxxxxxxx mov immediate
xxxx0001101x0000xxxx00000000xxxx mov register

第 25 位不同。

请阅读 ARM 文档。

【讨论】:

  • 如果您在文档中阅读更高的内容,您会看到 xxxx00Z 其中 27:26 是 00,即数据处理 Z = 0 是数据处理寄存器,Z = 1 是数据处理立即数。所以 xxxx000 是数据处理寄存器,接下来的位被记录以指示和,或,减法,测试,mov 等,然后你进入寄存器和立即数和其他东西,前四个当然是条件字段。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2012-06-22
相关资源
最近更新 更多