热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

显卡工作原理入门

文章目录显卡的发展历史显卡的基本工作方式显卡的工作模式80251680\times25~16802516色文本模式64048016640\times480~1664048016色图


文章目录

  • 显卡的发展历史
  • 显卡的基本工作方式
  • 显卡的工作模式
    • 80×251680\times25~1680×25 16 色文本模式
    • 640×48016640\times480~16640×480 16 色图形模式
    • 320×240256320\times240~256320×240 256 色图形模式
    • 640×48016.8M640\times480~16.8M640×480 16.8M 色图形模式
  • 显卡的高级功能
    • 缓存交换技术






显卡的发展历史



1981 年,IBM 推出了两种显卡:


  1. 单色显卡 MDA:最大支持 80字符×25行80~字符\times25~行80 ×25 ,只能显示黑白两色文本(称之为文本模式)
  2. 彩色绘图卡 CGA:能显示 320×200320\times200320×200 分辨率,支持黑、白、红、绿 4 种颜色。

1982 年,IBM 又推出 MGA(Monochrome Graphic Adapter)它除了能显示图形外,还保留了 MDA 的功能。

1987年,IBM 推出 VGA(Video Graphics Array)。支持 640×480×16色640\times480\times16~色640×480×16  模式 和 320×240×256色320\times240\times256~色320×240×256  模式。

1989 年,NEC 及其它 8 家显卡制造商赞助成立了 VESA(Video Electronics Standards Association)。用于制定分辨率为 800×600800\times600800×600 的 SVGA 视频显示标准。其后又公告一系列个人电脑视频周边功能的相关标准。VESA 标准有很多,其中跟显卡有关的最多的是 VBE 标准(1.0 到 3.0)里面规定了显卡工作方式有关内容,但这些标准只对成员开放。




显卡的基本工作方式



要设置显卡的工作模式,需要通过端口,对 GPU 内部寄存器进行读写。
要显示内容,则需要把数据写到显存映射的内存地址。

关于映射空间
不论显存大小,在低端 1MB 的内存中,映射空间都是 128KB,即 0xA0000 到 0xBFFFF。之后从 0xC0000 到 0xC7FFF 映射的是显卡 BIOS。
在这里插入图片描述


显卡的工作模式




80×251680\times25~1680×25 16 色文本模式

显卡启动后的默认模式。
对于该模式,每个字符需要 2 个字节存储。前 8 bit 存 ASCII 字符值,接着是 1bit 闪烁、3 bit 背景色、4 bit 前景色

在该模式下,满屏最多 2000 个字符,占用 4000 字节,但是映射区域有 32KB,为了充分利用映射区域,显存采用分页机制。这也是 Page Up 和 Page Down 键的设计初衷。

通过汇编打印 16 种颜色的前景、后景:

; INT 0x10 中断:对屏幕及显示器所提供的服务程序
; 使用该中断需指定 AH 寄存器编号,不同编号又有不同寄存器对应的参数
; AH = 13h, 在 teletype 模式下显示字符串
; 入口参数:
; AL = 显示方式
; 0: 不移动光标,属性在 BL 中
; 1: 移动光标,属性在 BL 中
; 2: 不移动光标,字符串中包含属性
; 3: 移动光标,字符串中包含属性
; BH = 页码
; BL = 属性
; CX = 字符串长度
; DH = 行
; DL = 列
; ES:BP = 指向字符串
; 出口参数:无message db 'TEST ' ;字符串任意,但是不要超过5个字符MOV AX, 0x7c0 ; 设置 ES 段的段地址 MOV ES, AX MOV BP, message ; ES:BP 指向字符串MOV AH, 0x13 ; 在 teletype 模式下显示字符串MOV AL, 1 ; 显示方式,表示字符串中仅包含字符,不包含属性,属性在 BL 中,移动光标MOV BL, 0 ; 属性初始值MOV BH, 0 ; 页码MOV DH, 0 ; 从 0 行开始MOV CX, 8
loop_0_8:PUSH CXMOV DL, 0 ; 从 0 列开始MOV CX, 16loop_0_F:PUSH CX ; 循环体中要用到 CX,所以压栈保护MOV CX, 5 ; 字符串长度INT 0x10 ; 中断调用INC BL ; 改变属性ADD DL, 5 ; 改变列POP CXLOOP put_0_FPOP CXINC DH ; 改变行LOOP put_0_8JMP $ ; 跳转到当前地址,也就是死循环

640×48016640\times480~16640×480 16 色图形模式

文本模式通过 ASCII 码指定字符,再通过字符发生器在显示器对应位置输出。而图形模式是直接对单个像素点进行操作。只要规定好像素点的地址在内存中的映射位置,就可以做到对单个像素点进行操作。

在 16 色模式中,一个像素点对应 4 bit,分别是 RGGB,因为绿色较淡,所以占 2 bit

位面技术
由于该模式下有 640×480=307200640\times480=307200640×480=307200 个像素点,也就是需要 150KB 内存空间,但是显存在内存中的映射最多只有 128KB,所以直接直接存储每个像素点的信息是不行的。此时就需要用到位面技术。

以 4 位面技术为例,它把显存分为 4 个部分(即 4 个位面)每个位面中的相同位置使用相同的地址,单独修改某个位面需要使用 位面选择寄存器。4 个位面中的相同位置的 bit 共同组成一个 4 bit 像素点。

举个例子:4 个位面中的第一个字节共同使用地址 0xA0000,对该地址写入数据时这四个字节会同时写入;单独修改其中一个字节就需要用到位面选择寄存器;这四个字节的第一位共同组成一个 4 位二进制数,表示一个像素点。

原本内存中一个字节表示两个像素点,通过位面技术,内存中一个字节可以表示 8 个像素点,这样内存地址就够用了。




320×240256320\times240~256320×240 256 色图形模式

此时一个像素对应一个内存地址,不需要考虑位面技术。显存中每个地址存储了颜色对应的索引值,而不是像之前使用 RGB 来表示颜色。这个索引表也称为调色板,是一组 GPU 内部的寄存器。




640×48016.8M640\times480~16.8M640×480 16.8M 色图形模式

一个像素点对应 3 个字节,但是为了与内存对齐,一般使用 4 字节,分别是 B、G、R、A(透明度,或者不用)
而此时的 32 位系统,内存寻址范围已经从 1 MB 提升至 4GB。显存也在高端地址中有另外的映射空间。但是考虑到兼容性,0xA0000 到 0xBFFFF 的映射空间不变。




显卡的高级功能




缓存交换技术

当显存很大时,可以将显存分成多个缓冲区,保存每一帧的图像
在这里插入图片描述





REFERENCES


  1. 显存文本模式详解
  2. INT 0x10 中断
  3. 全网唯一,从底层汇编看显卡工作原理及编程方式

推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • vb.net面试题,请大家帮忙,谢谢。如果需要讲详细一点,那就加我QQ531412815第4题,潜在的错误,这里的错误不是常规错误,属于那种只有在运行是才知道的错误:Catchex ... [详细]
  • http:www.cnblogs.compirloarchive200909091563368.html以前操作Excel的话,一般都会去用Microsoft.Jet.OLEDB.4. ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
手机用户2502937541
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有