百科问答小站 logo
百科问答小站 font logo



为什么显卡在内存中的映射是0b8000H? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

显存基地址虽然是人为确定的,但真要追究原因的话,还是可以找到一些原因的。

首先,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,早在1981年最早的IBM PC机出来的时候,显示器还是单色的,显存只有4KB(80*50),占用的内存范围是B0000~B0FFF。

这里需要特别提一句,显卡上是有RAM也有ROM的,RAM映射到了B000段上,ROM映射到C000段(实际范围是C0000~C7FFF),当时因为外设还不多(硬盘都属于罕见的设备),所以内存地址空间可以说是随便用,虽然显卡RAM只有4K,ROM只有8K,但各自占用了很大一段的地址空间。

到了1983年,显卡技术进一步发展,显示器可以显示彩色字符了,但考虑到兼容性的问题,需要兼容原来的单色显卡,而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之类的)。




  

相关话题

  Unix网络编程里的阻塞是在操作系统的内核态创建一个线程来死循环吗? 
  想搞个无显卡主机过渡,之后最多加个3070显卡,大佬们看看我这个怎么样? 
  苹果 A12X 处理器相当于什么样的桌面级 CPU(和GPU)呢? 
  服务器操作系统选 Debian、Ubuntu 还是 CentOS? 
  请问这是四核还是双核四线程? 
  windows有更方便的IDE进行开发, 为什么互联网公司的服务器还是用linux? 
  为什么部分消费者称 AMD 的显卡为业界笑话? 
  为什么许多消费级主板都要设计被显卡挡住的PCIe槽? 
  目前预算不足,是选择廉价 CPU 和较好的 GPU,还是选择较好的 CPU 再整个亮机卡? 
  如何看待联想建议使用单独国产 Linux 系统整机方案? 

前一个讨论
为什么启用AHCI还要分装系统前和装系统后?
下一个讨论
64位操作系统(CPU)如何兼容32位程序/软件?请看详情。?





© 2025-04-15 - tinynew.org. All Rights Reserved.
© 2025-04-15 - tinynew.org. 保留所有权利