ARM 汇编指令:UBFX

ARM 汇编指令:UBFX

本文来自于我关于 ARM 汇编指令系列文章。欢迎阅读、点评与交流~
1、汇编指令在不同架构中的联系与区别
2、ARM 汇编指令:MOV
3、ARM 汇编指令:LDR
4、ARM 汇编指令:STR
5、ARM 汇编指令:MRS 和 MSR
6、ARM 汇编指令:ORRS
7、ARM 汇编指令:BEQ
8、ARM 汇编指令:TST
9、ARM 汇编指令:B
10、ARM 汇编指令:BX
11、ARM 汇编指令:ERET
12、ARM 汇编指令:STP\LDP
13、ARM 汇编指令:UBFX

UBFX 是 ARM 架构中的一条汇编指令,全称是 Unsigned Bit Field Extract ,即 无符号位域提取


1. 指令格式

assembly 复制代码
UBFX <Rd>, <Rn>, #<lsb>, #<width>
  • Rd:目标寄存器,用于存放提取后的结果。
  • Rn:源寄存器,存放要提取位域的数据。
  • lsb:要提取的位域的最低有效位位置(从 0 开始计数)。
  • width:要提取的位域的宽度(1 到 32 位)。

2. 功能说明

该指令从源寄存器 Rn 中提取一个连续的位域,从指定的 lsb 位置开始,提取长度为 width 的位,然后将这个位域零扩展 到 32 位,存入目标寄存器 Rd

操作伪代码:

复制代码
Rd = ZeroExtend(Rn[lsb + width - 1 : lsb])

约束条件:

  • 0 ≤ lsb ≤ 31
  • 1 ≤ width ≤ 32 - lsb
  • 如果 width 为 0,则行为是不可预测的 (在 ARMv6T2 及更高版本中,width=0 表示 width=32,但最好显式写 32)。

3. 举例

假设 R1 = 0xABCD1234,执行以下指令:

assembly 复制代码
UBFX R0, R1, #4, #8
  • lsb = 4:从第 4 位开始(bit4)。
  • width = 8:提取 8 位。
  • 提取过程
    • 源数据 0xABCD1234 二进制位 4 到 11(共 8 位)是:
      从 bit4 到 bit11 对应 0xABCD1234 中的半字节:
      0xABCD1234 二进制(部分相关位):
      bit11~bit4:0011 0010(对应十六进制 0x32)。
    • 提取后,零扩展为 32 位:0x00000032
  • 结果:R0 = 0x00000032

4. 与其它指令的关系

  • UBFX 对应的是 SBFX
    SBFX 是带符号位域提取,提取后会进行符号扩展,而不是零扩展。

  • 与移位、AND 指令的比较

    例如 UBFX R0, R1, #4, #8 等价于:

    assembly 复制代码
    MOV R0, R1, LSR #4   ; 右移 4 位,将 bit4 移到 bit0
    AND R0, R0, #0xFF    ; 保留低 8 位

    UBFX 是一条指令完成,效率更高。


5. 支持的架构

  • ARMv6T2 及更高版本(包括 Thumb-2 指令集)。
  • 在 AArch64 中,有类似的 UBFX 指令,但语法略有不同(在 64 位寄存器上操作)。

6. 常见用途

  • 从打包的数据结构中提取特定字段(如协议头、标志位等)。
  • 替代移位和掩码操作,提高代码可读性和执行效率。
  • 硬件寄存器位域提取(如外设状态寄存器)。

示例应用

assembly 复制代码
; 假设 R1 存放一个 32 位数据,其中位域 [15:8] 表示"长度字段"
UBFX R2, R1, #8, #8    ; 提取位 15~8 到 R2,无符号
; 现在 R2 中即为长度值(0~255)

这条指令在嵌入式编程、驱动开发中经常用到,特别是在处理硬件寄存器或数据包解析时。

相关推荐
00后程序员张17 小时前
iOS加固技术路线全面解析:Bitcode模式、源码模式与汇编模式对比及爱加密优势
android·汇编·ios·小程序·uni-app·cocoa·iphone
Lee_jerome1 天前
《C/C++编译全家桶:g++四阶段、.a与.so区别、CMake构建、ARM交叉编译,这篇全讲透了》
c语言·开发语言·arm开发·c++·编译·cmake·cmakelists
Dlrb12112 天前
ARM---IMX6ULL的LCD模块简介及LCD驱动程序的编写
arm开发·lcd·arm·imx6ull·显存·像素
深信达沙箱2 天前
漏洞修不完、合规过不了?先御OS如何让嵌入式设备‘出厂即合规
arm开发·操作系统·嵌入式操作系统
木木_王2 天前
嵌入式学习 | STM32 裸板驱动开发(Day05)超详细复习笔记外部中断 EXTI、NVIC 优先级、串口中断实战
arm开发·stm32·学习
振南的单片机世界2 天前
3.5T静默分帧,CRC16校验:Modbus-RTU帧结构解析
arm开发·stm32·单片机·嵌入式硬件
m0_547486663 天前
《Arm Cortex-M4嵌入式系统-STM32G4系列微控制器的原理架构与开发》全套PPT课件
arm开发·stm32·嵌入式硬件
工业设备方案笔记3 天前
RK3588 AI部署实战:如何在ARM设备上运行AI模型?——从模型转换到边缘推理全过程解析
arm开发·人工智能·边缘计算
2601_954706493 天前
基于 ARM 虚拟化的云手机架构选型与 Python 自动化实战——2026 年 8 月为何我推荐傲晨云手机
arm开发·智能手机·架构
执迷不悟8233 天前
ARM--ADC/SPI
arm开发