+ -
当前位置:首页 → 问答吧 → 新手求教,关于内存地址寻址的问题。

新手求教,关于内存地址寻址的问题。

时间:2010-12-10

来源:互联网

最近刚学汇编语言,里面讲到在8086机器上CPU是16位,而地址总线是20位,所以为满足提供20位的内存地址 用了基地址*16+偏移地址的方法算出。
在这样的机器上如果说内存最多只能1M的话还是没什么问题(刚好20位嘛)。
但是在现代32位处理器的机器上,我们的地址线有32根,也就是说能提供32位的内存地址 对应着最多4G的内存。
问题就出在这里,32位的内存地址是怎么算出来的? 是不是基地址左移4位加上偏移地址? 因为我想只有这样才能得出32位的地址来。
可让人摸不着头脑的是,我在DEBUG里查找这里两组地址 0001:0000 和 0000:0010(CS:IP)
即运行这两个语句 -d 0001:000 -d 0000:0010
得出来的内存数据是一样的。 也就是说地址的算法依然是 基地址*16+偏移地址。

那既然是这样的话,CPU不是最多就只能跟0~FFFF*16+FFFF(=10FFEF)的内存打交到了嘛? 那我们2G内存的机器 CPU如何取到后面地址的数据呢?  
到底哪里出错了 请各位大大指教。。。~

作者: shenmidan   发布时间: 2010-12-10

现在的操作系统都是在运行保护模式下的,在保护模式下,32位CPU寻址空间可达2^32,即4GB。

作者: masmaster   发布时间: 2010-12-10

你用的实模式,地址线没有打开。还是只能访问到1M的地址空间。
保护模式下你就可以4G的虚拟内存地址空间了。
推荐你用debug32这个工具。祝好运。

作者: ydfivy   发布时间: 2010-12-10