数据和数据的地址如何存储在RAM中

时间:2016-04-12 13:14:34

标签: assembly ram

我的问题是存储在RAM中的地址和实际数据。假设我们每个地址都有32位内存,所以如果我们的微处理器对ram进行寻址并将该地址存储在RAM中,那么它存储实际数据,因为在使用32位地址寻址RAM后没有空间存储数据。

先谢谢

1 个答案:

答案 0 :(得分:0)

地址到内存与你家的地址没有什么不同。有一些信息(街道,城市,州,邮编,国家等)可以唯一标识您的房屋。而你和许多其他人都知道你住在那里。同样,他们有住的地方和地址。

地址进入地址总线的内存,并使逻辑指向该内存中由该地址唯一标识的特定位置,然后您可以读取和写入该内存位置。

所以你可以说让每个内存位置都是32位。我们仍然使用基于字节的寻址,那么如果你要在地址0x1234处寻址地址总线的32位项(假设这是物理的并且从这个简单的讨论中获得这些概念),那么它就有0x1234>> 2或0x48D。你可以读或写那个32位的位置。现在,如果你想在地址0x1235访问BYTE,那么比如说读取你会读取地址0x48D的32位字,然后隔离一个感兴趣的字节(哪一个取决于你的字节,在底部或在旁边)。如果你想在0x1235写入字节,那么你需要读取0x48D,修改​​有问题的字节(根据字节顺序在顶部或底部旁边)并将其写回。现在ram可能有一个允许你使用掩码或其他类似机制的层,所以你不会看到read-modify-write,但除非ram实际上是在字节级控制的,否则它就在那里。

现在就像你的朋友第二次来到你家一样,他们还记得你居住的地址,如果是房子,地址印在房子上,在记忆中,地址印在很多地方单词,基本上是在接线,但你不存储地址与该地址的数据,你只需使用地址到达框,你看看里面就像房子上的地址是布线,你是里面的东西。

当编译器编写程序或程序员编写程序集或机器代码时,它们会记录哪些变量(高级语言概念)保存在何处。有人直接或间接地(通过用您选择的语言声明一个变量,编译器几乎直接通过注意它需要存储多少东西及其偏移量,链接器通过将偏移量应用于.data或.bss,然后是virtual memmory / mmu将其转换为物理,而操作系统则决定虚拟映射到什么物理等等。所以编译器基本上指定内存中相对于你的程序分配ram的位置,每个项目都是,并且该地址基本上硬编码到程序指令中,作为pc相对偏移量或完整地址。然后当执行时产生一个地址,并且从指令中也知道事务的大小,它继续在通用处理器总线上,然后是内存控制器(这里再简单说明处理器和内存之间有很多逻辑,一些然后,知道内存的体系结构有多宽,以及如何执行各种大小的事务,这些事务就发生在你身上。

拿一些纸杯或盘子和一些信息,纸上写着东西。按顺序从0到in对盘子或杯子进行编号。在每个中放入一项信息。你现在不仅是处理器,而且是总线和内存控制器以及你知道哪个位置有什么信息的程序你有线知道如何回到该地址并找到该信息。它并不复杂,只有一堆电线和零和零...