首页 > 代码库 > 地址对齐

地址对齐

    ARM指令和51单片机指令不同,ARM所有指令的长度都是固定的,都是4个字节32位。而51单片机的指令的长度不是固定的,有单字节指令也有双字节指令。
    ARM的数据总线宽度也是32位的,所以ARM可以处理32位的数据,这就要求所有的数据也必须是存放在地址为4的整数倍的单元处。
    正常情况下,R15中的值应该为4的整数倍,访问数据时给的地址也应该是4的整数倍。这种情况就是地址对齐。如果不满足这种情况,那么就是非地址对齐。
 
非地址对齐访问程序存储器:
    当访问程序存储器时,所给的地址是非对齐的,那么对于ARMv3及以下版本的处理器来说,会交由存储系统来忽略R15中的低两位(也就是说地址会原封不动地送到存储系统),然后进行取址。对于ARMv4及以上版本的处理器,如果出现非对齐访问,那么会出现不可预知的结果。
    对于Thumb指令,如果出现非地址对齐访问程序存储器,那么最低位将会由存储器系统来忽略,然后进行取址。
 
非地址对齐访问数据:
    不同的指令会出现不同的处理情况。
    1、出现不可预知的错误。
    2、交由存储系统来忽略地址的低两位,也就是说地址原封不动地送到存储系统中。
    3、由处理器内核忽略地址的低两位。

地址对齐