Assembly ARM减法指令的第四个参数

Assembly ARM减法指令的第四个参数,assembly,arm,Assembly,Arm,是否有人可以向我解释/确认这一点(尤其是子行): 我在想它可能与c代码相当: if ((align==2) || (align==5) || (align==8)) { xpos -= width >> 1; } 我找到了这个,但我不理解第四个参数,imm12。它只是说: SUB指令从Rn中的值减去操作数2或imm12的值 我觉得你对代码功能的假设是正确的 但我不明白第四个参数,imm12 第四个参数不是imm12,而是width(我假设它是一个通用寄存器的别名)。谢谢,是的a

是否有人可以向我解释/确认这一点(尤其是子行):

我在想它可能与c代码相当:

if ((align==2) || (align==5) || (align==8))
{
  xpos -= width >> 1;
}
我找到了这个,但我不理解第四个参数,
imm12
。它只是说:

SUB指令从Rn中的值减去操作数2或imm12的值


我觉得你对代码功能的假设是正确的

但我不明白第四个参数,imm12


第四个参数不是
imm12
,而是
width
(我假设它是一个通用寄存器的别名)。

谢谢,是的
align
width
xpos
都是这样定义的
align RN 10
。我理解这是一个命名寄存器。实际上,最后一个可以是寄存器或立即数(因此是imm)。在上面的例子中,立即数是1。你想的是一个不同的立即数。问题中的
imm12
参考很可能来自指令的
SUB{cond}{Rd},Rn,#imm12
形式(即OP只是查看文档中错误的指令形式)。
if ((align==2) || (align==5) || (align==8))
{
  xpos -= width >> 1;
}