在ARM处理器中,如果数据或指令是2字节的那么其在存储器中的存储要是半字对其的(存储的起始地址的低一位是0b0),即存储的首地址必须是2的整数倍。如果数据或指令是4字节的那么该数据或指令在存储器中的存储是字对其的(存储的起始地址的低两位都是0b00),即存储的首地址必须是4的整数倍。我们在访问存储器的时候,如果存储单元的地址没有按照上述规则对其,则称为非对齐的存储访问操作。
1. 非对齐的指令读取操作
当处理器在执行ARM指令的时候,ARM指令每条指令是4字节的宽度,所以对于ARM指令在存储器当中的存储是按照字对齐的方式来存储的。我们在读取一条ARM指令时如果写入到PC寄存器的值不是字对其的(PC的后两位不是0b00),那么指令执行的结果可能是不可预知的,或者寄存器PC中不管低的两位是什么值,寄存器PC中的地址值被送入到存储系统后,存储系统都会将其低两位的值忽略,即认为低两位是0b00。