通俗易懂:ARM指令的寻址方式(二)

问题:STR R0,[R1]

在这个ARM指令中,R1作为首地址,它指向某个字节。

为什么是自节?为啥不是比特位或其他?

STR R0, [R1] 中R1指向字节,核心原因是:ARM架构定义了「字节是存储器的最小可寻址单位」,而非比特位,这是处理器架构的底层设计规则。

一、为什么最小可寻址单位是字节,不是比特位?

  1. 硬件实现成本与效率平衡

单个内存单元仅存1bit,但处理器的地址总线、读写控制电路若按比特位寻址,需要为每1bit分配独立地址,会导致地址总线位数暴增、硬件设计复杂度和成本飙升,且实际数据处理(如指令、变量)极少以单bit为单位,效率极低。

而字节(8bit) 是计算机中数据表示的基础单位(ASCII字符、最小数据类型均为1字节),以此为最小寻址单位,能兼顾硬件成本和实际使用效率,是所有通用处理器(包括ARM、x86)的统一设计。

  1. ARM架构的硬性规定

ARM架构手册明确:存储器地址空间按字节编址,每个唯一的地址对应存储器中一个8bit的字节单元,而非单个bit的内存单元。

即使是操作单个bit的指令(如 SETB 、 BIC ),底层也是先寻址到对应的字节,再通过硬件电路操作其中某一位,并非直接寻址比特位。

二、为什么不是半字/字作为最小寻址单位?

ARM支持字节(8bit)、半字(16bit)、字(32bit) 三种数据访问粒度,但仅字节是最小可寻址单位,原因是:

  1. 半字/字的地址是字节地址的整数倍(半字需偶地址,字需4的整数倍地址),本质仍是基于字节编址的扩展;

  2. 若以字为最小寻址单位,无法精准访问单个字节数据(如字符型变量),会失去数据访问的灵活性,无法适配各类数据类型的存储需求。

三、 STR R0, [R1] 的实际寻址过程(印证字节编址)

STR R0, [R1] 是字存储指令,执行时:

  1. R1提供起始字节地址,要求该地址是4的整数倍(ARM字对齐要求);

  2. 处理器从该字节地址开始,连续寻址4个字节单元(32bit),将R0中的32bit数据依次写入这4个字节;

  3. 整个过程的基础是「每个地址对应1个字节」,而非直接寻址32个比特位。

总结

ARM选择字节作为最小可寻址单位,是架构设计的硬性规则,也是「硬件成本、数据处理效率、访问灵活性」三者平衡的最优解,比特位因硬件实现和实际使用的缺陷,无法作为可寻址单位。

相关推荐
szxinmai主板定制专家18 小时前
RK3568 + CODESYS+实时系统运动控制器PLC,支持 AI 视觉目标检测,预测性维护,混合多系统部署,多路模拟量采集
arm开发·人工智能·嵌入式硬件·fpga开发
XMAIPC_Robot1 天前
深度无人机自动驾驶仪,中小型无人机硬件在环仿真飞行
运维·arm开发·人工智能·fpga开发·无人机·边缘计算
番茄灭世神1 天前
Vscode开发/调试ARM单片机最新教程
c语言·arm开发·vscode·stm32·嵌入式·gd32
猫猫的小茶馆2 天前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
霞姐聊IT2 天前
x86程序移植到arm平台的四种场景及解决方案简介
arm开发
楼兰公子2 天前
《深入理解Linux网络技术内幕》配套学习大纲 + 源码Demo + 进阶实战实例
linux·arm开发·学习
lljss20202 天前
Arm GNU 工具链 命名规则
服务器·arm开发·gnu
底层开发智库3 天前
无需硬件开发板,从零构建并运行ARM aemfvp-a-rme软件栈
arm开发·arm
HMS工业网络3 天前
主从结合,安全互联:Anybus工业通信解决方案全栈升级
arm开发
XINVRY-FPGA3 天前
XC7Z010-2CLG400I Xilinx Zynq-7000 FPGA
arm开发·嵌入式硬件·算法·fpga开发·硬件工程·dsp开发·fpga