if ConditionPassed(cond) then
Rd = Rn + shifter_operand + C Flag
if S == 1 and Rd == R15 then
if CurrentModeHasSPSR() then
CPSR = SPSR
else UNPREDICTABLE
elseif S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1else0
C Flag = CarryFrom(Rn + shifter_operand + C Flag)
V Flag = OverflowFrom(Rn + shifter_operand + C Flag)
举例
使用ADC来合成多字加法。如果寄存器对R0,R1和R2,R3保持64位值(其中R0和R2保持最低有效字),
以下指令将64位和值保留在R4,R5:
ADDS R4,R0,R2
ADC R5,R1,R3
如果第二条指令从ADC R5,R1,R3更改成ADCS R5,R1,R3 ,标志的结果值表示:
N 64位加法产生不良结果。
C 发生无符号溢出。
V 发生有符号溢出。
Z 最高32位全部为零。
以下指令在R0:
ADCS R0,R0,R0上产生带有扩展操作的1位旋转左移(通过进位标志进行33位旋转)
R0 + R0 + C + Flag ==> R0 << 1 + C Flag ==> LSR R0,#1
if ConditionPassed(cond) then
Rd = Rn + shifter_operand
if S == 1 and Rd == R15 then
if CurrentModeHasSPSR() then
CPSR = SPSR
else UNPREDICTABLE
elseif S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1else0
C Flag = CarryFrom(Rn + shifter_operand)
V Flag = OverflowFrom(Rn + shifter_operand)