显卡工作原理入门

本文介绍了显卡从早期的MDA、CGA到VGA的发展历程,详细解析了显卡的基本工作方式,包括文本模式和图形模式,如16色文本、16色图形、256色图形和16.8M色图形模式。同时,讨论了位面技术和缓存交换技术在显存管理中的应用,以及显卡如何通过汇编指令进行屏幕输出。
摘要由CSDN通过智能技术生成



显卡的发展历史


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

  1. 单色显卡 MDA:最大支持 80   字 符 × 25   行 80~字符\times25~行 80 ×25 ,只能显示黑白两色文本(称之为文本模式)
  2. 彩色绘图卡 CGA:能显示 320 × 200 320\times200 320×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 × 600 800\times600 800×600 的 SVGA 视频显示标准。其后又公告一系列个人电脑视频周边功能的相关标准。VESA 标准有很多,其中跟显卡有关的最多的是 VBE 标准(1.0 到 3.0)里面规定了显卡工作方式有关内容,但这些标准只对成员开放。


显卡的基本工作方式


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

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

显卡的工作模式


80 × 25   16 80\times25~16 80×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 CX
    MOV  DL, 0       ; 从 0 列开始
    MOV  CX, 16

loop_0_F:
    PUSH CX          ; 循环体中要用到 CX,所以压栈保护
    MOV  CX, 5       ; 字符串长度
    INT  0x10        ; 中断调用
    INC  BL          ; 改变属性
    ADD  DL, 5       ; 改变列
    POP  CX
    LOOP put_0_F

    POP  CX
    INC  DH          ; 改变行
    LOOP put_0_8

    JMP $            ; 跳转到当前地址,也就是死循环

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

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

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

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

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

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

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


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

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


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

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


显卡的高级功能


缓存交换技术

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





REFERENCES

  1. 显存文本模式详解
  2. INT 0x10 中断
  3. 全网唯一,从底层汇编看显卡工作原理及编程方式
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SP FA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值