ARM9的存储结构~~大端存储和小端存储

众所周知ARM9的每个地址对应的是一个存储字节而不是一个存储字,但ARM9可以访问存储字,访问存储字时,其地址应该是字对准,即字地址可以被四整除,也就是说,若第1个字在存储空间中是第0个地址对应单元(32位),那么第二个我地址应在第四个地址对应单元,以此类推。一个字(32位)二进制数是由4个字节组成,假如某个字其地址是X(该地址能被4整除),那么盖子的4个字节对应地址是X,X+1,X+2,X+3。

ARM9核中的PC是32位的,地址通常是无符号整数形式,因此,地址计算时常产生在地址空间中上溢或下溢的情况。若产生地址上溢或下溢,则PC寄存器中的值又会从0X00000000开始。

程序中若遇到分支指令,大多数是通过指令中的偏移量加到PC寄存器的值上来计算目的地址,然后再把计算的结果写会到PC寄存器,此时PC寄存器的值就不再是顺序的,从而实现了程序的分支。目的地址计算公式如下:

目的地址=当前执行的指令地址+8+偏移量。

利用上面公式计算出的目的地址大于0xffffffff或者小于0x00000000时,则产生上溢或下溢,程序分支将不可控制。

若程序是顺序执行,每条顺序执行的指令执行后,其下一条需要顺序执行的指令地址计算公式为:

下一条需要执行的指令地址=当前执行的指令地址+4

ARM9存储系统的存储单元与地址的对应方式有两种:一种是大端存储系统,另一种是小端存储系统。

在大端存储系统中字的地址对应的是该字最高有效字节所对应的地址;半字的对应地址是该半字中最高有效字节所对应的地址。也就是说,32位数据的最高字节存储在低地址中,而其最低字节则存放在高地址中。

端存储系统中字的地址对应的是该字最有效字节所对应的地址;半字的对应地址是该半字中最有效字节所对应的地址。也就是说,32位数据的最字节存储在低地址中,而其最字节则存放在高地址中。

小端存储模式是ARM9处理器默认的模式。ARM9汇编指令集中,没有相应的指令来选择是采用大端存储系统还是小端存储系统,但是可以通过硬件输入引脚来配置它。一个ARM9的目标系统中若要实现支持小端存储系统,则引脚BIGEND需要接低电平,若要实现支持大端存储系统,则BIGEND引脚需要接高电平。

 ARM9体系结构对于存储单元的访问需要适当的对准,即访问字存储单元时,字地址应该字对准(地址能够被4整除);访问半字存储单元时,半字地址应该半字对准(地址能够被2整除)。没有按照这种方式对准的存储单元访问,称为非对准的存储器访问。非对准的存储其访问可能会引起不可预知的状态。


你可能感兴趣的:(单片机,arm,存储,硬件,存储系统)