【发布时间】: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