用python-pptx解析与生成中文PPTX:从价值链文档到自动化工程实践
2026/9/19 21:27:07
APSR(Application Program Status Register)中的NZCV位是ARM架构中用于记录运算状态标志的关键位组,位于APSR的第31~28位。它们直接影响条件分支、条件执行等操作。
| 标志位 | 位置 | 全称 | 含义 |
|---|---|---|---|
| N | 31位 | Negative(负数) | 当运算结果为负数(最高位为1)时置1。 |
| Z | 30位 | Zero(零) | 当运算结果为零时置1。 |
| C | 29位 | Carry(进位/借位) | 无符号运算发生进位(加法)或无借位(减法)时置1。 |
| V | 28位 | oVerflow(溢出) | 有符号运算发生溢出时置1。 |
NZCV位通常由以下指令自动设置:
S后缀):ADDS,SUBS,ANDS,LSLS等。CMP(相当于SUBS),CMN(相当于ADDS),TST(相当于ANDS)。MSR,MRS(直接读写APSR)。MOVS R0, #0x80000000→ R0为负数,N=1。SUBS R0, R1, R1→ R0=0,Z=1。ADDS R0, R1, R2→ 若R1+R2 ≥ 2³²,则 C=1。SUBS R0, R1, R2→ 若R1 ≥ R2,则 C=1。-2³¹ ~ 2³¹-1范围。0x70000000 + 0x10000000 = 0x80000000CMP R0, R1 ; 计算 R0 - R1,设置NZCV BGT label ; 如果 R0 > R1(有符号),跳转到labelBGT的触发条件:Z=0 且 N=VADDS R0, R1, R2 ; 加法并设置标志 ADDNE R3, R4, #5 ; 仅当 Z=0(结果非零)时执行C和ZBHI(无符号大于):C=1且Z=0BLS(无符号小于等于):C=0或Z=1N、V、ZBGT(有符号大于):Z=0且N=VBLT(有符号小于):N≠V| 条件码 | 含义 | 标志位条件 | 典型场景 |
|---|---|---|---|
| EQ | 相等 | Z=1 | CMP后结果为零 |
| NE | 不相等 | Z=0 | 结果非零 |
| MI | 负数 | N=1 | 结果最高位为1 |
| PL | 非负 | N=0 | 结果≥0 |
| VS | 溢出 | V=1 | 有符号溢出 |
| VC | 无溢出 | V=0 | 无溢出 |
| HI | 无符号大于 | C=1且Z=0 | 无符号比较 |
| LS | 无符号小于等于 | C=0或Z=1 | 无符号比较 |
| GE | 有符号大于等于 | N=V | 有符号比较 |
| LT | 有符号小于 | N≠V | 有符号比较 |
| GT | 有符号大于 | Z=0且N=V | 有符号比较 |
| LE | 有符号小于等于 | Z=1或N≠V | 有符号比较 |
MOV不会),需要显式添加S后缀或使用比较指令。IT块条件)。MRS和MSR指令可以读写APSR,从而手动修改NZCV。MOVS R0, #10 ; R0=10, 设置NZCV(N=0, Z=0, C=?, V=0) SUBS R0, R0, #10 ; R0=0, Z=1, N=0 BNE label ; 不会跳转(因为Z=1,不满足NE条件) ADDS R0, R0, #0x7FFFFFFF ; 触发溢出,V=1通过理解NZCV,可以深入掌握ARM的条件执行机制,编写高效且可控的底层代码。