深度探索嵌入式操作系统:从零开始设计、架构和开发
上QQ阅读APP看书,第一时间看更新

3.3.3 ARM920T存储地址对齐

在ARM920T中访问存储器时通常希望的是:如果是字单元访问,那么这个访存地址就应该是字对齐的,即地址的最低两个二进制位是00;如果是半字单元访问,那么这个访存地址就应该是半字对齐的,即地址的最低二进制位是0;如果字单元访问或者半字单元访问的访存地址不是字对齐或者半字对齐,这就称为地址非对齐的访存操作。有很多处理器是非对齐的访存操作,最多影响处理器的性能,不会导致程序运行结果错误,而ARM920T是不允许非对齐的访存操作的,对它而言这会带来灾难性的后果。

当ARM920T处于ARM状态时(关于ARM状态和Thumb状态后面会有介绍),ARM920T运行的是ARM指令集,每条指令长度都是32位,即一个字。这时写入PC寄存器(即程序指针寄存器中的值)如果不是字对齐的,要么程序的运行结果不可预知,要么地址的最低两个二进制位被硬件忽略。当ARM920T处于Thumb状态时,ARM920T运行的是Thumb指令集,每条指令长度都是16位,即一个半字。这时写入PC寄存器中的值如果不是半字对齐的。也和ARM状态时一样,要么程序的运行结果不可预知,或者地址的最低二进制位被硬件忽略。