ARM 汇编程序中“添加”和“添加”之间的区别?

逆向工程 手臂 气体
2021-06-24 06:12:24

我开始更精确地研究 ARM 汇编程序,并从objdump. 我看到了很多的指令(add是不是唯一的一个),一个额外的s末(addssubs,...)。

我查看了一下 ARM 文档,它似乎意味着一些重要的东西,但我无法弄清楚到底是什么(我发现的有关它的文档对我来说似乎非常模糊)。

有人对在s某些 ARM 指令末尾添加的这个额外含义有什么见解吗?

2个回答

s添加到 ARM 指令的额外字符意味着APSR(应用处理器状态寄存器)将根据指令的结果进行更新。

状态寄存器 (APSR) 包含四个标志NZCV其含义如下:

  • N == 0:结果大于或等于0,被认为是正数,因此N(负)位设置为0。
  • Z == 1:结果为 0,因此Z(零)位设置为 1。
  • C == 1: 我们丢失了一些数据,因为结果不适合 32 位,所以处理器通过设置C(carry) 为 1 来指示这一点
  • V = 0: 从二进制补码的有符号算术的角度来看,0xffffffff 真的意味着-1,所以我们所做的操作实际上是 (-1) + 1 = 0。该操作显然不会溢出,因此V(overflow) 设置为 0。

可以在此处找到有关 ARM 体系结构中条件标志的更多信息

通常ADD不更新标志。 ADDS做。请参阅arm infocenter 中更好的文档正如它在那里写的那样:

如果指定了 S,这些指令会根据结果更新 N、Z、C 和 V 标志。