我开始更精确地研究 ARM 汇编程序,并从objdump
. 我看到了很多的指令(add
是不是唯一的一个),一个额外的s
末(adds
,subs
,...)。
我查看了一下 ARM 文档,它似乎意味着一些重要的东西,但我无法弄清楚到底是什么(我发现的有关它的文档对我来说似乎非常模糊)。
有人对在s
某些 ARM 指令末尾添加的这个额外含义有什么见解吗?
我开始更精确地研究 ARM 汇编程序,并从objdump
. 我看到了很多的指令(add
是不是唯一的一个),一个额外的s
末(adds
,subs
,...)。
我查看了一下 ARM 文档,它似乎意味着一些重要的东西,但我无法弄清楚到底是什么(我发现的有关它的文档对我来说似乎非常模糊)。
有人对在s
某些 ARM 指令末尾添加的这个额外含义有什么见解吗?
s
添加到 ARM 指令的额外字符意味着APSR(应用处理器状态寄存器)将根据指令的结果进行更新。
状态寄存器 (APSR) 包含四个标志N
、Z
、C
,V
其含义如下:
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 标志。