ARM 汇编指令:ORRS

ARM 汇编指令:ORRS

本文来自于我关于 ARM 汇编指令系列文章。欢迎阅读、点评与交流~
1、汇编指令在不同架构中的联系与区别
2、ARM 汇编指令:MOV
3、ARM 汇编指令:LDR
4、ARM 汇编指令:STR
5、ARM 汇编指令:MRS 和 MSR
6、ARM 汇编指令:ORRS

在 ARM 架构中,ORRS 是一条按位逻辑或(OR)指令 ,并且会根据操作结果更新条件标志位


1. 基本含义

  • ORR = 逻辑或(Bitwise OR)
  • S = 后缀,表示该指令执行后要更新 APSR(应用程序状态寄存器)中的条件标志位(主要是 N、Z、C、V 中的相关位)。

指令格式通常为:
ORRS Rd, Rn, Operand2

作用是将 RnOperand2 按位进行逻辑或运算,结果存入 Rd,并更新标志位。


2. 运算规则

  • 按位或:Rd = Rn | Operand2
  • Operand2 可以是立即数、寄存器或经过移位/旋转的寄存器。

例如:

assembly 复制代码
ORRS R1, R2, R3   ; R1 = R2 | R3,并更新标志位
ORRS R0, R0, #0x8 ; 将 R0 的 bit3 置 1,并更新标志位

3. 影响的条件标志位

执行 ORRS 后会更新:

  • N(Negative):结果的最高位(bit31)为 1 则置 1。
  • Z(Zero):结果为 0 则置 1。
  • C(Carry) :如果 Operand2 是立即数或移位寄存器,则标志可能由移位器的进位输出更新(与 ORR 不带 S 时相同,但 ORRS 会写入 APSR)。
  • V(Overflow):不受影响(保持原值)。

4. 典型用途

  1. 设置特定位检查结果是否为 0 或负数

    assembly 复制代码
    ORRS R0, R1, R2   ; 做 OR,同时根据结果设置 Z 和 N
    BEQ zero_result   ; 如果结果为 0 则跳转
  2. 测试两个值的位组合 ,同时丢弃结果只留标志(常用 TST 指令更直接,TST 本质上就是 ANDS 但不存结果)。
    ORRS 可以类似地用于测试,不过更常见的是用 ANDSTST 做位测试。

  3. 在需要组合位且同时更新标志以便后续条件执行时使用。


5. 与普通 ORR 的区别

  • ORR:只做运算,不更新标志位。
  • ORRS:运算并更新 N、Z、C 标志。

6. 示例

assembly 复制代码
MOV R2, #0
ORRS R1, R2, #0   ; R1 = 0,Z = 1, N = 0
BNE somewhere     ; 不会跳转,因为 Z=1 表示相等(结果为0)
assembly 复制代码
MOV R2, #0x80000000
ORRS R1, R2, #0   ; R1 = 0x80000000,最高位为1
                  ; 结果不为0 → Z=0
                  ; 最高位为1 → N=1

7. 在 Thumb/Thumb-2 中的可用性

在 ARMv6T2 及更高版本中,大多数形式的 ORRS 在 Thumb-2 中可用(包括窄指令和宽指令)。在早期的 Thumb 中(ARMv4T/ARMv5),ORRS 有受限的寄存器范围(如 ORRS Rd, Rd, Rm,Rd 和 Rm 必须是低寄存器 R0--R7)。


8. 注意

  • 如果你只需要置位而不关心标志,用 ORR 即可。
  • 如果需要测试两个寄存器是否同时为 0 的位模式,更常用 TST Rn, Operand2(即 ANDS 但不存结果)。
  • ORRS 在编写需要条件执行的代码时很有用,例如在循环或状态判断中。
相关推荐
lanxiao88882 小时前
F1C100S 内核
arm开发
杰杰桀桀桀2 小时前
基于stm32ARM库函数的IIR二阶巴特沃斯低通滤波器--附完整代码
arm开发·stm32·嵌入式硬件·数字滤波器·巴特沃斯低通滤波
TBrL7UtdTELTTdut4BAL3 小时前
ARM Cortex-A53 (无AES)平台加密网络转发性能测试与对比分析
arm开发·集成测试
AI服务老曹7 小时前
架构实战:如何基于 GB28181 与异构计算构建跨平台(X86/ARM)AI 视频管理系统?源码交付深度解析
arm开发·人工智能·架构
鸽芷咕17 小时前
DOSBox 汇编环境搭建完整教程:安装配置 + MASM/LINK/DEBUG 工具链配置详解
汇编
Gofarlic_OMS1 天前
UG/NX许可证管理高频技术问题解答汇编
java·大数据·运维·服务器·汇编·人工智能
iCxhust1 天前
如何在汇编中修改CS:IP
汇编·单片机·嵌入式硬件·51单片机·微机原理
CinzWS1 天前
A53 FPGA原型验证:从RTL到可运行系统的挑战
arm开发·嵌入式·芯片验证·原型验证·a53
AI服务老曹1 天前
深度解析:支持 GB28181/RTSP 及异构计算(X86/ARM+GPU/NPU)的 AI 视频管理平台架构方案(附源码交付与 Docker 部署)
arm开发·人工智能·音视频
2302_813806221 天前
基础环境篇 – 交叉编译环境搭建与NFS服务配置
arm开发