為什麼顯示卡在記憶體中的對映是0b8000H

2021-08-19 20:21:21 字數 1286 閱讀 2096

視訊記憶體基位址雖然是人為確定的,但真要追究原因的話,還是可以找到一些原因的。

首先,16位時代8086的定址範圍是0000:0000~ffff:000f,最早劃給ram的區域是640kb,範圍0000:0000~9fff:000f,這在第一代ibm x86 pc時代基本就定下來了。剩下的區域要划給bios和硬體使用。當時的設計思路是,bios的東西盡量往後放,所以bios的rom**被放到了f000段這裡。

然後就是決定視訊記憶體放在哪的問題。

可以使用的區域包括a000:0000,b000:0000,c000:0000,d000:0000,e000:0000這幾大段記憶體。

先說看a000段:這段記憶體有乙個問題,就是a000段會跟9fff段有重疊,也就是9fff:0010~9fff:ffff,

可能是為了防止有記憶體重疊,設計的時候把視訊記憶體往後挪一段,也就是b000這一段。

早期的視訊記憶體基位址是b0000而不是b8000,早在2023年最早的ibm pc機出來的時候,顯示器還是單色的,視訊記憶體只有4kb(80*50),占用的記憶體範圍是b0000~b0fff。

這裡需要特別提一句,顯示卡上是有ram也有rom的,ram對映到了b000段上,rom對映到c000段(實際範圍是c0000~c7fff),當時因為外設還不多(硬碟都屬於罕見的裝置),所以記憶體位址空間可以說是隨便用,雖然顯示卡ram只有4k,rom只有8k,但各自占用了很大一段的位址空間。

到了2023年,顯示卡技術進一步發展,顯示器可以顯示彩色字元了,但考慮到相容性的問題,需要相容原來的單色顯示卡,而c000段已經被用掉了,b000段還有很多剩餘空間,於是b000段被拆成了兩部分,b000~b7ff段相容單色顯示卡視訊記憶體,b800~bfff段留給彩色字元視訊記憶體。

因為現在顯示卡已經預設工作在彩色字元模式下了,所以b800就成了預設的視訊記憶體基位址了,實際上早期的基位址是b000而不是b800。事實上現在的很多顯示卡仍然能通過配置切換到單色模式,切換過去以後,視訊記憶體的基位址就是b0000了。

再後來,顯示卡發展出vga模式,顯示卡的視訊記憶體也增長到了256kb,而這個時候因為bios的東西太多,硬體數量也變多了,已經把d000, e000都佔了,此時可用的位址空間只剩下a000,所以a000就用來做vga的圖形模式的視訊記憶體了。

至此,a0000以後的位址空間就基本確定下來了:

a0000~affff: vga圖形模式視訊記憶體空間

b0000~b7fff: mda單色字元模式視訊記憶體空間

b8000~bffff: cga彩色字元模式視訊記憶體空間

c0000~c7fff: 顯示卡rom空間(後來被改造成多種用途,也可以對映視訊記憶體)

c8000~ffffe: 留給bios以及其它硬體使用(比如硬碟rom之類的)。

整數在記憶體中是如何儲存的,為什麼它堪稱天才般的設計

正文 加法和減法是計算機中最基本的運算,計算機時時刻刻都離不開它們,所以它們得由硬體直接支援。為了提高加減法的運算效率,硬體電路需要設計地足夠精簡。對於有符號數,記憶體要區分符號位和數值位,對於人腦來說,很容易辨別,但是對於計算機而言,就要設計專門的電路,這無疑增加了硬體的複雜性,增加了計算的時間。...

float資料在記憶體中是怎麼儲存的

float型別數字在計算機中用4個位元組儲存。遵循ieee 754格式標準 乙個浮點數有2部分組成 底數m和指數e 底數部分 使用二進位制數來表示此浮點數的實際值 指數部分 占用8bit的二進位制數,可表示數值範圍為0 255 但是指數可正可負,所以,ieee規定,此處算出的次方必須減去127才是真...

2 類在記憶體中是如何分配的

類在記憶體中是如何分配的 乙個類,有成員變數 靜態與非靜態之分 而成員函式有三種 靜態的 非靜態的 虛的。那麼這些個東西在記憶體中到底是如何分配的呢?1 c 中,應該是物件才會被分配記憶體空間吧?為什麼cobject記憶體大小剛好和兩個成員變數的大小之和一致!難道還沒例項化的時候,類就已經有了記憶體...