大家都知道,電腦啟動時,最開始從物理地址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佔用了
關於這些疑問,清楚的朋友,請指教下小弟,先謝謝了:)