Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Intel HD Graphics的VDU内存基址,使用它在C中直接显示到监视器中_Windows_Dos - Fatal编程技术网

Windows Intel HD Graphics的VDU内存基址,使用它在C中直接显示到监视器中

Windows Intel HD Graphics的VDU内存基址,使用它在C中直接显示到监视器中,windows,dos,Windows,Dos,我想直接写入VDU内存并在显示器上打印“字符串”。我在一本书中读到,我们可以通过直接写入基于VDU内存的地址0xB8000000来实现这一点。但是我不知道这个地址是否是我笔记本电脑中显示内存的正确地址。我可以玩和看,但我仍然怀疑这是否会把事情搞砸。有人能帮我知道地址吗。我的笔记本电脑是Acer ASPIRE。我有Interl HD图形卡。这在旧的MS DOS时代是有效的。黑白视频卡的基址为0xb0000000,而彩色视频卡(CGA)的基址为0xb8000000。引入VGA时,0xB8000000

我想直接写入VDU内存并在显示器上打印“字符串”。我在一本书中读到,我们可以通过直接写入基于VDU内存的地址0xB8000000来实现这一点。但是我不知道这个地址是否是我笔记本电脑中显示内存的正确地址。我可以玩和看,但我仍然怀疑这是否会把事情搞砸。有人能帮我知道地址吗。我的笔记本电脑是Acer ASPIRE。我有Interl HD图形卡。

这在旧的MS DOS时代是有效的。黑白视频卡的基址为0xb0000000,而彩色视频卡(CGA)的基址为0xb8000000。引入VGA时,0xB8000000在文本模式下仍然正确,但在图形模式下不正确;当windows开始使用保护模式和32位时(大约1995年windows 95),所有这些地址都变得无效


因此,您需要使用FreeDos启动笔记本电脑,或者使用DOSEMU之类的仿真器从写入这些地址中获取任何信息。

您读过的书有多旧?现代操作系统具有禁止访问这些区域的内存保护机制。你在处理这些古老的技术时遇到了很多麻烦。你需要一台时间机器把你带回到20世纪80年代。这让我回到了过去,但它不是
B000:0000
B800:0000
,即段地址而不是线性地址吗?是的。从地址总线的角度来看,内存地址分别为B0000和B0000。B8000段寄存器如何工作;从程序员的角度来看,您仍然需要告诉编译器使用大/大内存模型,并初始化指针,如
int*videoram=0xb0000000。int,而不是char,因为屏幕上的每个字符都有一个字节用于ascii码,另一个字节用于属性。@a很高,处理器中的段地址在总线上被转换为线性物理地址。有多个段地址组合可以引用同一物理地址。编辑:虽然这个答案中的32位地址肯定是错误的。@但在实模式下MarkRansom(该地址的来源)是一个固定的4位移位,因此实际地址应该是
B0000
B8000
IIRC。当然,如果你正在考虑使用那些新奇的带段描述符的保护模式,它可能在任何地方。真正奇怪的是B000:1000和B100:0000是一样的。或者,FFFF:0010与0000:0000相同,0000:0000经常用于拷贝保护方案,但在80286上断开,该80286能够处理超过1MB的地址,因此AT设计者将软件控制的与门集成到主板中,以强制A16内存线为0。天哪,我感觉自己像个爷爷在谈论战争。。。