大家都知道,计算机启动时,最开始从物理地址0xffff0处执行BIOS程序,而BIOS程序是固化在ROM中

于是我想,这个地址应该不属于内存条。进一步说,如果BIOS ROM大小为64k,那么它就应该占用f000:0~f000:ffff的地址;相应地,显存bios可能占用e0000~bffff地址空间,还有其他一些bios都会占用部分地址空间。如果ROM和RAM(内存条)真的互不相干,只是逻辑上组成了计算机的内存空间,那么可以说明一下2点:

1. 往ROM中写数据是无效的。例如mov [f000:1],ax(指令不一定正确,为了说明问题方便而已)这条指令不会对f0001单元有任何改变;mov [b800:0],ax是往显存里写数据,不经过内存条,因为这个地址是显卡显存的,和内存条没半毛钱的关系

2. CPU可访问的存储单元(ROM和RAM)是和地址总线相连接的,主板上地址总线的布局决定了该主板能接受多大的显卡,想在同一块主板上更换更大显存显卡是不行的。另外1G内存也不是连续的存储单元,它被各种ROM分割开来

以上两点,应该都好做实验论证,可惜我没做过,希望有经验的朋友告知真想,谢谢~

不过,我在win7自带的dos工具下,往bios rom地址空间写过数据,当时是可以写的。后来想了下,该dos是运行于虚拟86模式下,而该模式下的地址不是真正的物理地址,也就不能证明什么

后来,我 了解到bios映射技术,即是系统将各种bios地址映射到内存条里,而f0000~fffff 等这些地址还是在内存里,只不过约定这些地址单元不可修改。。 那么这样是不是就反驳了上述猜想呢。 但还是有些疑惑。 既然这样,那么32根地址总线就都是和内存条连接的,各种rom里的程序也都是通过映射技术最终在内存条里执行。但另一问题又来了,没有地址总线,cpu如何访问rom呢,即使映射技术,也得先访问rom吧。

还有一种猜想,32根地址总线既连接rom地址空间,同时也连接了内存条ram。 不过这样也还是有疑问,同一个地址,cpu如何知道是去访问rom还是内存条ram呢,计算机从不允许二义性

我个人还是比较肯定第一种猜想,之前听朋友说过买了2根内存条(共4g),但操作系统只能识别2.9g,可能的原因就是 虽然有4g内存条,但只能占用较少的地址空间,其他的地址空间被各种rom占用了

关于这些疑问,清楚的朋友,请指教下小弟,先谢谢了:)