新手求教,关于内存地址寻址的问题。
时间: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如何取到后面地址的数据呢?
到底哪里出错了 请各位大大指教。。。~
在这样的机器上如果说内存最多只能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这个工具。祝好运。
保护模式下你就可以4G的虚拟内存地址空间了。
推荐你用debug32这个工具。祝好运。
作者: ydfivy 发布时间: 2010-12-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28