ARM:内存地址......为什么是0x04030201 ......?

时间:2013-12-02 22:00:14

标签: memory arm

有人可以向我解释为什么我们代表,内存地址本身就像这样: “地址上的字= 0x00”: 0x04030201, 我知道01,02,03,04中的每一个都是一个字节,但有人可以向我解释那些字节在哪里,它代表什么?寄存器中的存储单元?我完全糊涂了......

2 个答案:

答案 0 :(得分:1)

将内存视为一个字节数组。 “地址上的字”可能意味着不同的东西,这取决于CPU设计者对Word的看法。在你的情况下,似乎Word是32位长。

所以'Word on address=0x00: 0x04030201'表示:

'从内存单元0x00开始(包括),“下一个”四个字节为0x04 0x03 0x02 0x01

此外,根据CPU的字节顺序,“下一步”的含义会发生变化。可能是0x04存储在单元格0x00中,或者0x01存储在那里。

答案 1 :(得分:1)

地址,内存或其他方式与建筑物上的地址没有什么不同。有时系统地和精心挑选,有时是偶然的。在任何情况下,一些建筑物是消防站,一些是杂货店,一些是公寓,一些是房屋等等。但是,城市或国家使用的寻址系统可以将您的物品直接送到该建筑物。

当我们谈论软件中的地址时,它没有什么不同。最低级别的处理器不知道或不关心有一个地址总线,一个地址被投射到处理器外部的接口。当您添加每个逻辑层时,如洋葱,处理器周围以及最终其他芯片,内存,USB控制器,硬盘驱动器控制器等。就像信封上的地址部分一样,该地址的一部分被提取并且读或写命令被传递给在其建筑物一侧穿着该地址的个体逻辑。

你不能简单地问什么是地址0x04030201没有任何上下文。地址方案是相当具体的,他们的系统有数百或数千或数万个基于arm的系统,所有这些系统都有不同的地址方案,并且该地址可能指向什么,没有人回答该请求死亡并且可能挂起处理器或它可能是一些RAM或它可能是usb控制器或视频控制器或磁盘驱动器控制器中的寄存器。

一般来说,你有读写操作,在这个例子中,一旦信件通知信封上的地址,信件内容包含说明。执行此操作(写入),或者将其发送回去(阅读)。而在硬件的情况下,个人只是在没有询问的情况下完成它所说的。如果它是一个读取,那么它在任何设备的上下文中执行读取。硬盘控制器读取特定地址可能是温度传感器,或状态寄存器包含电机旋转的速度,或者它可能是最近从硬盘读取的一些数据。在简单的内存情况下,它可能只是一些内存,一些字节。

正在读取的内容也是处理器总线上指定的另一项,并且这在处理器与处理器之间因程序员可用的内容而异。有时您可以请求读取或写入单个字节,有时是16位项目或32或64等。

然后你进入地址翻译。使用邮件类比,这有点像将您的邮件转发到另一个地址。您在信件上写了一个地址,邮局有转发请求,因此他们将您的地址更改为新地址,然后完成信件的递送。当你听到内存管理单元,MMU以及虚拟内存这个词的一些用法时,就会发生这种情况。让我们说我们想让程序员生活简单,我们告诉每个人ram从地址0x00000000开始。这使得编译器更容易选择我们的变量和数组和程序所在的内存位置,它可以基于该地址以相同的方式编译每个程序。但是,如果它们共享相同的内存,我怎么能同时运行许多程序呢?好吧,他们不。一个程序认为它正在写入地址0x00000000但实际上有一些唯一的地址可以完全不同,只属于那个程序让地址为0x10000000,mmu就像邮局的邮件载体改变地址,处理器根据信息知道正在运行哪个任务需要将0x00000000转换为0x10000000。当另一个程序访问它认为是0x00000000的程序时,它可能将该地址更改为0x11000000,而另一个0x00000000可能会映射到物理地址0x12000000。实际命中内存的地址称为物理地址,程序使用的地址称为虚拟地址,它不是真实的,它注定要被更改。

这个mmu的东西不仅允许编译器和程序员更轻松地工作,而且mmu允许我们保护一个程序或操作系统与另一个程序或操作系统。应用程序以某个保护级别运行,mmu使用该级别来了解该用户可以执行的操作。如果一个程序生成一个超出其地址空间的虚拟地址,假设系统有1 gig的内存,程序试图解决1 gig以及更多的问题。 mmu而不是将其转换为物理地址而不是为处理器生成中断,该处理器将处理器切换到具有更多权限的模式,基本上是操作系统,然后操作系统可以决定尝试使用其他类型的虚拟内存并允许程序拥有更多内存,或者它可能会终止程序并向用户发出警告消息,表明此类程序存在保护错误并被杀死。

计算机的地址方案通常比在新社区编号的开发人员更加深思熟虑,但并非总是如此,但它与信封上的地址相距甚远。你在地址中分开比特,那些比特块意味着什么,并将该处理器请求传递给该地址的个人。如何解析这些位非常特定于处理器和平台,并且在某些情况下是动态的或可编程的,因此如果您的下一个问题是我的系统上的0xabcd,我们可能仍然无法帮助您。你可能需要做更多的研究或给出很多信息...