ARM编程模型-内存空间和数据

ARM属于RISC体系,许多指令单周期指令,是32位读取/存储架构,对内存访问是32位,Load and store的架构,只有寄存器对内存,不能内存对内存存储,CPU通过寄存器对内存进行读写操作。

ARM的寻址空间是线性地址空间,典型的32位地址下,空间大小为232 = 4G.

注:X86 寻址是段+偏移量

1.数据类型

字节类型(Byte):数据宽度为8bits

半字节类型(Halfword):数据宽度为16bits,存取时一般要求为2字节对齐。

字数据类型(Word):数据宽度为32bits,存取时一般要求4字节对齐

2.数据对齐

在V6架构之前,数据访问都必须针对要访问的大小把访问的地址进行对齐,没有对齐的地址将会导致出现"数据中止"异常(在数据存取或指令预取时都可能出现)。

没有对齐的地址数据可以通过多个对齐地址数据以为/掩码操作来实现。

ARM V6架构添加了新的硬件来支持未对齐的数据访问。

3.数据存储的大小端问题

大小端问题时指数据在计算机内存中的字节顺序问题,它决定了寄存器的内容和内存内容的格式关联。

ARM寄存器时字宽,就是4字节。而内存寻址是按照字节顺序的。

采用大端方式符合人类的正常思维,小端方式有利于计算机处理,无优劣之分。

ARM支持大端(Big-endian)和小端(Little-endian)的内存数据方式,可以通过硬件的方式设置端模式,也可以通过软件的方式来设置(V6版本以上)

大端格式(Big-endian)

最低地址是该数据的地址(A)

最高有效字节(MSB, Most Signifcant Byte) 放内存低地址(A)

最低有效字节(LSB,Least Significant Byte)放内存高地址(A+3)

小端格式(Little-endian)

最低地址是该数据的地址(A)

最高有效字节(MSB, Most Signifcant Byte) 放内存高地址(A+3)

最低有效字节(LSB,Least Significant Byte)放内存低地址(A)

大小端具体实例

变量A:Word A = 0x f6 73 4b cd,在内存中的起始地址为0xb3 20 45 00

变量B:half word B= 218,在内存中的起始地址为0x dd dd dd d0

相关推荐
zlinear数据采集卡15 小时前
数据采集卡从入门到精通(10):采样率与分辨率的核心关系——反比律、架构分布与过采样
arm开发·嵌入式硬件·算法·fpga开发·架构·开源
CIAS18 小时前
uniontechos-server-20 1050 u2a pxe Server -x86 arm loongarch
arm开发
振南的单片机世界18 小时前
推挽vs开漏:一个“强拉硬灌”,一个“只拉不管”
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡21 小时前
数据采集卡从入门到精通(7):流水线型ADC——级级接力,高速与高精的平衡术
开发语言·arm开发·嵌入式硬件·fpga开发·c#
硅农程序猿2 天前
从需求到硅片| 一文讲清数字芯片设计流程
arm开发·硬件架构·risc-v
秋田君2 天前
QT_网络编程体系
网络·arm开发·qt
zlinear数据采集卡3 天前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
振南的单片机世界3 天前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
北京盛世宏博3 天前
以太网温湿度传感器星型组网三种供电布线技术对比文档
arm开发·以太网·原理·传感器·温湿度·原来
zlinear数据采集卡3 天前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#