CPSR 是B.EQ等分支指令进行判断的标志位 如果指令中带有"S"则该指令运算会影响CPSR的值 比如在switch的汇编指令中: #include <stdio.h> main() { int a; switch (a) { case 1: a = 11; break; case 2: a = 12; break; default: a = 13; } } _main: ; @main ; BB#0: sub sp, sp, #32 ; =32 mov w8, #0 str w8, [sp, #28] ldr w8, [sp, #24] mov x9, x8 subs w8, w8, #1 ; =1 //把运算结果是否非零写入CSPR中 str w9, [sp, #20] ; 4-byte Folded Spill str w8, [sp, #16] ; 4-byte Folded Spill b.eq LBB0_2 //CSPR的Z==1 那么跳转至LBB0_2 b LBB0_1 LBB0_1: ldr w8, [sp, #20] ; 4-byte Folded Reload subs w9, w8, #2 ; =2 //同上subs指令 str w9, [sp, #12] ; 4-byte Folded Spill b.eq LBB0_3 b LBB0_4 LBB0_2: mov w8, #11 str w8, [sp, #24] b LBB0_5 LBB0_3: orr w8, wzr, #0xc str w8, [sp, #24] b LBB0_5 LBB0_4: mov w8, #13 str w8, [sp,...