社区
C语言
帖子详情
为什么说32位CPU的寻址能力是4GB啊,不应该是64GB吗?
liuyufeng2
2011-10-23 08:51:07
王爽那本汇编上写的CPU寻址是段地址左移4位+偏移地址啊,那32位CPU左移4位就是36位,寻址能力不是应该是64GB吗?为什么说32位CPU内存只能插4GB就最大了?
...全文
838
9
打赏
收藏
为什么说32位CPU的寻址能力是4GB啊,不应该是64GB吗?
王爽那本汇编上写的CPU寻址是段地址左移4位+偏移地址啊,那32位CPU左移4位就是36位,寻址能力不是应该是64GB吗?为什么说32位CPU内存只能插4GB就最大了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
良少
2011-10-24
打赏
举报
回复
段地址早就不用了。那是实模式下的寻址方式,而且实模式的寻址长度是20bit.
线性地址是32bit,就是2的32次方。
亠
AnYidan
2011-10-23
打赏
举报
回复
[Quote=引用 2 楼 only_lonely 的回复:]
寻址方式不一样,你说的那是16位的实模式。之所以存在段地址+偏移的寻址方式,那是因为8086地址总线有20位,而寄存器才16位。这是一种妥协,不得不采取的方式。
在保护模式下,是采用直接寻址的,也就是2的32次方,总共4GB的byte。
机器寄存器的位长是固定,但起所能寻址的范围更具其的寻址方式不同而不同。虽然寄存器,地址总线在硬件上限制了一次能够寻址的最大地址,但通过软件的模拟……
[/Quote]
++
mymsdndownload
2011-10-23
打赏
举报
回复
[Quote=引用楼主 liuyufeng2 的回复:]
王爽那本汇编上写的CPU寻址是段地址左移4位+偏移地址啊,那32位CPU左移4位就是36位,寻址能力不是应该是64GB吗?为什么说32位CPU内存只能插4GB就最大了?
[/Quote]
数死早
Vincent_Song
2011-10-23
打赏
举报
回复
1
CPU的位数就是通用寄存器的位数,32CPU的通用寄存器位数就是32位。
16位CPU的通用寄存器位数是16位,地址总线是20位,寻址能力是1M,通用寄存器无法将20位的地址放入16位的寄存器中进行各种运算以及控制,所以要使用分段的方法,所以计算物理地址的时候是需要在地址加法器中进行将寄存器中的16位地址进行移位最后相加计算得出实际物理地址。
现在的CPU基本上保持了寄存器和地址总线位数的一致,所以一般情况下就不用在那么麻烦的分段计算了。
希望能够帮到你!
yujie_v
2011-10-23
打赏
举报
回复
20位地址总线才会偏移寻址的。
ProgrammingRing
2011-10-23
打赏
举报
回复
学习了
baihacker
2011-10-23
打赏
举报
回复
在现在,桌面使用的CPU中,地址总线是36位,理论上是64GB。
32位CPU中的32位是指处理数据的宽度。
在32位的工作模式下,一系列的软硬件上的原因导致只能使用4GB的内存。
对于民用而言:
win7 64位旗舰版,貌似是支持192G的内存。
而主板上能插多少呢?i7,3通道,每个通道8G,24G。
因此决定支持多少内存和很多因素有关。
only_lonely
2011-10-23
打赏
举报
回复
寻址方式不一样,你说的那是16位的实模式。之所以存在段地址+偏移的寻址方式,那是因为8086地址总线有20位,而寄存器才16位。这是一种妥协,不得不采取的方式。
在保护模式下,是采用直接寻址的,也就是2的32次方,总共4GB的byte。
机器寄存器的位长是固定,但起所能寻址的范围更具其的寻址方式不同而不同。虽然寄存器,地址总线在硬件上限制了一次能够寻址的最大地址,但通过软件的模拟与转换,还是能够突破此种限制的。
所谓的32位cpu内存最大只有4GB,只是一种通俗的说法,表明如果不加任何干预,32位计算机硬件在保护模式下最多能够寻址到4gb的地址空间范围。
东风异客
2011-10-23
打赏
举报
回复
cpu寻址不是只与地址总线的宽度有关吗 2的32次方字节是4GB啊
Windows 2000内存结构
Windows 2000是
32位
的操作系统,它使计算机
CPU
可以用
32位
地址对
32位
内存块进行操作。内存中的每一个字节都可以用一个
32位
的指针来
寻址
。这样,最大的存储空间就是232字节或4000兆字节 (
4GB
) 。这样,在Windows下运行的每一个应用程序都认为能独占可能的
4GB
大小的空间。 而另一方面,实际上没有几台机器的RAM能达到
4GB
,更不必
说
让每个进程都独享
4GB
内存了。Windows在幕后将虚拟内存 (virtual memory,VM) 地址映射到了各进程的物理内存地址上。而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件。物理内存完全由系统管理
操作系统笔试试题.doc
操作系统笔试题及答案 1.在下列系统中,( )是实时系统。 A.计算机激光照排系统 B.航空定票系统 C.办公自动化系统 D.计算机辅助设计系统 答案:B 2.操作系统是一种( )。 A.应用软件 B.系统软件 C.通用软件 D.工具软件 答案:B 3.引入多道程序的目的在于( )。 A.充分利用
CPU
,减少
CPU
等待时间 B.提高实时响应速度 C.有利于代码共享,减少主、辅存信息交换量 D.充分利用存储器 答案:A 4.已经获得除( )以外的所有运行所需资源的进程处于就绪状态 A.存储器 B.打印机 C.
CPU
D.磁盘空间 答案:C
实验五、Windows 2000内存结构.doc
实验五、Windows2000内存结构1背景知识Windows2000是
32位
的操作系统,它使计算机
CPU
可以用
32位
地址对
32位
内存块进行操作。内存中的每一个字节都可以用一个
32位
的指针来
寻址
,这样,最大的存储空间就是232字节或4000兆字节(
4GB
),在Windows下运行的每一个应用程序都认为能独占可能的
4GB
大小的空间。而另一方面,实际上没有几台机器的RAM能达到
4GB
,更不必
说
让每个进程都独享
4GB
内存了。显然,Windows在幕后将虚拟内存(virtualmemory,VM)地址映射到了各进程的物理内存地址上。而所谓物理内存
汇编语言全接触——Win32Masm!!!
WIN32 程序运行在保护模式下的,保护模式的历史可以追溯到 80286。而今 80286 已成为了历史。所以我们将只把精力集中于 80386 及后续的X86 系列
CPU
。Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是
说
每一个应用程序都拥有其相互独立的
4GB
地址空间,当然这倒不是
说
它们都拥有
4GB
的物理地址空间,而只是
说
能够在
4GB
的范围内
寻址
。操作系统将会在应用程序运行时完成
4GB
的虚拟地址和物理内存地址间的转换。这就要求编写应用程序时必须格守 Windows 的规范,否则极易引起内存的保护模式错误。而过去的 Win16 内存模式下,所有的应用程序都运行于同一个
4GB
地址空间,它们可以彼此"看"到别的程序的内容,这极易导致一个应用程序破坏另一个应用程序甚至是操作系统的数据或代码。 和 16 位 Windows 下的把代码分成 DATA,CODE 等段的内存模式不同,WIN32 只有一种内存模式,即 FLAT 模式,意思是"平坦"的内存模式,再没有 64K 的段大小限制,所有的 WIN32 的应用程序运行在一个连续、平坦、巨大的
4GB
的空间中。这同时也意味着您无须和段寄存器打交道,您可以用任意的段寄存器
寻址
任意的地址空间,这对于程序员来
说
是非常方便的,这也使得用
32位
汇编语言和用C语言一样方便。 在Win32下编程,有许多重要的规则需要遵守。有一条很重要的是:Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,这样当您要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们,一个最显著的应用例子就是 Windows 的 CallBack 函数中。
win32汇编语言教程
WIN32 程序运行在保护模式下的,保护模式的历史可以追溯到 80286。而今 80286 已成为了历史。所以我们将只把精力集中于 80386 及后续的X86 系列
CPU
。Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是
说
每一个应用程序都拥有其相互独立的
4GB
地址空间,当然这倒不是
说
它们都拥有
4GB
的物理地址空间,而只是
说
能够在
4GB
的范围内
寻址
。操作系统将会在应用程序运行时完成
4GB
的虚拟地址和物理内存地址间的转换。这就要求编写应用程序时必须格守 Windows 的规范,否则极易引起内存的保护模式错误。而过去的 Win16 内存模式下,所有的应用程序都运行于同一个
4GB
地址空间,它们可以彼此"看"到别的程序的内容,这极易导致一个应用程序破坏另一个应用程序甚至是操作系统的数据或代码。 和 16 位 Windows 下的把代码分成 DATA,CODE 等段的内存模式不同,WIN32 只有一种内存模式,即 FLAT 模式,意思是"平坦"的内存模式,再没有 64K 的段大小限制,所有的 WIN32 的应用程序运行在一个连续、平坦、巨大的
4GB
的空间中。这同时也意味着您无须和段寄存器打交道,您可以用任意的段寄存器
寻址
任意的地址空间,这对于程序员来
说
是非常方便的,这也使得用
32位
汇编语言和用C语言一样方便。 在Win32下编程,有许多重要的规则需要遵守。有一条很重要的是:Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,这样当您要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们,一个最显著的应用例子就是 Windows 的 CallBack 函数中。
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章