首先必须明白 cpu和内存的区别 cpu 中央处理器 内存是物理数据存放的地方 cpu不直接存放数据而是通过内存来存放数据 cpu和内存之间通过20条地址总线相连接,地址总线就是cpu通过地址找到对应的内存的物理数据的传递工具 计算机只能处理0,1 二进制数据 每一条线可以处理 0,1 两种类型数据 所以20根线的 总共能拥有 2^20=1048576个不相同的地址 也就是能搜索 1048576个地址范围内的内存 那么 一个地址代表一个存储单元 一个存储单元能够存储 1byte数据 那么也就是1048576个地址 能够找到 1048576个1byte数据=1M的数据 也就是说 20位地址总线总共也就能处理1M的内存 数据
然后cpu的寻址能力只能16位不能达到20位 怎么处理了 cpu的地址都是使用16进制表示 最多也只能找到 2的16次方 个地址 也就是65536个地址 只能处理 也就是只能处理 64K的内存数据 64K内存的电脑能用??? 64K也就是65536个地址 16位的寻址就能找到了这65536个地址了 难道每个64K的 相同的位置的地址都有同一个 但是有n个64MK歇菜了 还是找不到 真正的那个地址啊 如果在加入一个地址了??? 这个地址用来处理n个 这个地址就是段地址 每一个段也就是每一个64K就是一个基地址 段内的数据的地址就是当前基地址的偏移地址 此时 段地址+偏移地址就能够找到真正的内存数据了 cpu表示的地址为:基地址:偏移地址 (2个16位的地址 2byte)
而偏移地址相当于在首地址的基础上 移动的距离 比如 0BAC:0100 0BAC是基地址,0100是偏移地址 0BAC 4位的十六进制 表示 16位的2进制数据 转换后为: 0000 1011 1010 1100 必须要转换成 20位(也就是5位的16进制) 才能在20位地址总线中传递 才能达到 1G的数据访问范围 怎么转换成 20位 能让数据传递到内存中找到物理数据了 内存的物理地址 =基地址*16+偏移地址 内存的物理地址 =0BAC*16+0100=0BAC0+0100=0BBC0H 0BBC0 就是5位的十六进制 就是 4*5=20位了 可以传递到内存了 实际传递二进制就是: 0000 1011 1011 1100 0000 20根地址总线就能处理了 32位汇编 32根地址总线 总共能够直接 就找到 2的32次方个地址 也就是4294967296 byte数据 也就是 4G的内存 而且不在将内存分成一段一段 所有的内存区域都是连续的 |
|
来自: 精髓_感知力 > 《1507workTsC语言》