我正在为 ARM 操作码编写反汇编程序,但我正在为特定的编码而苦苦挣扎。违规指令是E1F120D1。我想我已经严格按照说明进行操作,并期望反汇编是mvns r2,r1但在http://www.onlinedisassembler.com上尝试它会给我ldsrb r2,[r1,#1]!.
似乎20D1指令中的低位导致在线反汇编器 ti 从 切换mvn到ldrsb。这是反汇编程序中的错误 - 不太可能 - 还是我误解了手册中的指令编码?
我正在为 ARM 操作码编写反汇编程序,但我正在为特定的编码而苦苦挣扎。违规指令是E1F120D1。我想我已经严格按照说明进行操作,并期望反汇编是mvns r2,r1但在http://www.onlinedisassembler.com上尝试它会给我ldsrb r2,[r1,#1]!.
似乎20D1指令中的低位导致在线反汇编器 ti 从 切换mvn到ldrsb。这是反汇编程序中的错误 - 不太可能 - 还是我误解了手册中的指令编码?
如果您查看 ARM 体系结构参考手册,您应该能够看到第 A5 章带您完成 ARM 指令的解码。
从表 A5-1 开始,您的指令有 -
cond (31-28) = 1110
op1 (27-25) = 000
这匹配
cond = not 1111, op1 = 00x => Data Processing & Miscellaneous instructions (A5.2)
然后对于 A5.2 节中的表 A5-2,您的说明有 -
op (25) = 0
op1 (24-20) = 11111
op2 (7-4) = 1101
与这些位匹配的编码是 -
op = 0, op1 = not 0xx1x, op2 = 11x1 => Extra load/store instructions (A5.2.8)
最后,对于 A5.2.8 节中的表 A5-10,您的指令有 -
op2 (6-5) = 10
op1 (24-20) = 11111
Rn (19-16) = 0001
这匹配
op2 = 10, op1 = xx1x1, Rn = not 1111 => LDRSB (immediate)
所以,是的,位 7-4 肯定会影响该指令的解码。
这是 LDRSB:
条件 000 PU0W L Rn Rd 0 0 0 0 Rm
这是MVN:
条件 001 1111 ...
不同之处在于 I 寄存器。MVN 只是注册到注册。