信盈达—您身边的嵌入式&人工智能专家
全国免费咨询热线:400-8788-909

嵌入式培训:arm中非与其的储存访问操作详解

时间:2018-08-22 00:00:00 来源:信盈达 作者:信盈达

ARM处理器中,如果数据或指令是2字节的那么其在存储器中的存储要是半字对其的(存储的起始地址的低一位是0b0),即存储的首地址必须是2的整数倍。如果数据或指令是4字节的那么该数据或指令在存储器中的存储是字对其的(存储的起始地址的低两位都是0b00),即存储的首地址必须是4的整数倍。我们在访问存储器的时候,如果存储单元的地址没有按照上述规则对其,则称为非对齐的存储访问操作。

 

1. 非对齐的指令读取操作

 

当处理器在执行ARM指令的时候,ARM指令每条指令是4字节的宽度,所以对于ARM指令在存储器当中的存储是按照字对齐的方式来存储的。我们在读取一条ARM指令时如果写入到PC寄存器的值不是字对其的(PC的后两位不是0b00),那么指令执行的结果可能是不可预知的,或者寄存器PC中不管低的两位是什么值,寄存器PC中的地址值被送入到存储系统后,存储系统都会将其低两位的值忽略,即认为低两位是0b00。

 

2. 非对齐的数据访问操作

 

ARM处理器进行对内存的读写操作时,如果所要操作的数据在内存中是非对齐的,则有可能出现以下两种运行结果:

 

1) 执行的结果不可预知

 

2) 当操作的数据是字类型的时,忽略地址中低两位的值,即访问地址为指定的地址与0xFFFFFFFC相与的结果(Address & 0xFFFFFFFC);当操作的数据是半字类型的时,忽略地址中低一位的值,即访问地址为指定的地址与0xFFFFFFFE相与的结果(Address & 0xFFFFFFFE)。这种操作是由存储系统来完成的,地址值并不会在CPU内发生变化。




信盈达2008年在深圳特区南山高新科技园成立。自成立至今近九年来专注为企业和个人提供高端方案设计、高端嵌入式/Android培训等服务。公司下设信盈达实训学院、信盈达研发中心、信盈达教学仪器三大业务板块。九年来公司坚持"技术领先、服务领先",以雄厚的实力和专业的品质成为国内唯一有实力从产品最底层研发到系统层开发的嵌入式实训、产品解决方案提供商。为中国IT行业提供最具价值的职业教育服务。专业嵌入式、物联网、人工智能Java、单片机等课程,想了解更多信息点击立马咨询