《饥荒》Mod开发避坑指南:实现动态血条时,别忘了处理这些隐藏怪物和性能问题
2026/6/11 20:15:51
在 ARM 架构中,ORRS是一条按位逻辑或(OR)指令,并且会根据操作结果更新条件标志位。
指令格式通常为:
ORRS Rd, Rn, Operand2
作用是将Rn和Operand2按位进行逻辑或运算,结果存入Rd,并更新标志位。
Rd = Rn | Operand2Operand2可以是立即数、寄存器或经过移位/旋转的寄存器。例如:
ORRS R1, R2, R3 ; R1 = R2 | R3,并更新标志位 ORRS R0, R0, #0x8 ; 将 R0 的 bit3 置 1,并更新标志位执行ORRS后会更新:
Operand2是立即数或移位寄存器,则标志可能由移位器的进位输出更新(与ORR不带 S 时相同,但 ORRS 会写入 APSR)。设置特定位并检查结果是否为 0 或负数。
ORRS R0, R1, R2 ; 做 OR,同时根据结果设置 Z 和 N BEQ zero_result ; 如果结果为 0 则跳转测试两个值的位组合,同时丢弃结果只留标志(常用TST指令更直接,TST本质上就是ANDS但不存结果)。ORRS可以类似地用于测试,不过更常见的是用ANDS、TST做位测试。
在需要组合位且同时更新标志以便后续条件执行时使用。
ORR:只做运算,不更新标志位。ORRS:运算并更新 N、Z、C 标志。MOV R2, #0 ORRS R1, R2, #0 ; R1 = 0,Z = 1, N = 0 BNE somewhere ; 不会跳转,因为 Z=1 表示相等(结果为0)MOV R2, #0x80000000 ORRS R1, R2, #0 ; R1 = 0x80000000,最高位为1 ; 结果不为0 → Z=0 ; 最高位为1 → N=1在 ARMv6T2 及更高版本中,大多数形式的ORRS在 Thumb-2 中可用(包括窄指令和宽指令)。在早期的 Thumb 中(ARMv4T/ARMv5),ORRS有受限的寄存器范围(如ORRS Rd, Rd, Rm,Rd 和 Rm 必须是低寄存器 R0–R7)。
ORR即可。TST Rn, Operand2(即ANDS但不存结果)。ORRS在编写需要条件执行的代码时很有用,例如在循环或状态判断中。