博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARM9的存储结构~~大端存储和小端存储
阅读量:4293 次
发布时间:2019-05-27

本文共 1067 字,大约阅读时间需要 3 分钟。

众所周知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整除)。没有按照这种方式对准的存储单元访问,称为非对准的存储器访问。非对准的存储其访问可能会引起不可预知的状态。

转载地址:http://jfuws.baihongyu.com/

你可能感兴趣的文章
xcode 中#pragma得使用
查看>>
深究Xcode的bitcode设置
查看>>
史上最详细的iOS之事件的传递和响应机制-原理篇
查看>>
iOS里的TaggedPointer[NSString篇]
查看>>
iOS Copy与MutableCopy 和 Copy与Strong 深度解析
查看>>
iOS开发程序中各种变量的存储位置和程序返回变量的问题
查看>>
NSString NSCFString NSCFConstantString isMemberOfClass 遇到的相关的问题
查看>>
iOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
查看>>
iOS8新特性学习研究之UIAlertController
查看>>
iOS 获得iPhone iPad TabbarItem Frame 深度解析
查看>>
iOS对存放对象的数组排序
查看>>
iOS 取绝对值运算
查看>>
中文字符ASCII码和NSString相互转换
查看>>
iOS开发模拟网络状态差
查看>>
iOS开发知识-常用小技巧大杂烩
查看>>
同时点击手势深度优化处理 setExclusiveTouch
查看>>
iOS七种手势
查看>>
iOS逆向:在任意app上开启malloc stack追踪内存来源
查看>>
iOS开发之NSDictionary里setValue:forKey与setObject:forKey、objectForKey与valueForKey的差异
查看>>
NSProxy——少见却神奇的类
查看>>