VGA显示卡图形模式访问(提示版) (1)

本文详细介绍了如何在VGA 640*480 16色模式下,不依赖BIOS中断直接对屏幕进行单个像素的读写操作。通过汇编代码示例,阐述了坐标计算、位面选择、位屏蔽寄存器的使用以及颜色设置等步骤,适合有一定汇编基础和VGA显卡知识的读者。文章提供了完整的汇编子程序代码,可确保在NASM下运行成功。
摘要由CSDN通过智能技术生成
VGA显示卡图形模式访问(提示版) (1)

最近闲来无聊,在 上海图书馆 借了本《IBM-PC汇编语言程序设计》。没想,在看显示器访问的那章时。觉得作者讲得实在含糊,无法让人明白。后来,又借了本《80x86汇编语言程序设计》发现,这两本书在那一章节的内容几乎是一样,例子图片都一样。在我反复的摸索和在 上海科学技术情报研究所 里查看几天的资料后。终于模清了门路。当然,我也上网看了。没有相关的内容,也许是我没找到。所以,在这里献上我的成果希望有缘人能和我交流。

本文主要是介绍不用BIOS中断在VGA 640*480 16色模式下,对屏幕单个象素进行读写操作。我将用两段代码来说明如何操作,用于对各位处于迷茫的学者们一些提示。

在阅读本文前,我希望读者能够有一定的汇编基础,和对VGA显卡原理的基础知识(其实只要知道一些就可以了)。如果有空,可以在看本文之前阅读前面我借的两本书中的一本中,有关VGA显示卡的操作内容。

本文使用的例子,是用于NASM汇编器,读者可以从网上免费下载。我使用的软件,都可以从www.sf.net免费下载。

对VGA的写操作

首先是确定坐标位置,由于对内存的访问是一个字节,也就是 8 位二进制,而四个位面同一地址的字,构成了一个四位的颜色值。所以,我们需要确定在0a000h中的哪段地址进行操作。

b=x/8+y*80

既然知道如何计算所写的位置,我们就来写一段汇编代码。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;文件名: VGA_WRITE.ASM(部分解析)
;;作者: 黄庠魁
;;主要函数:Pix_write
;;参数说明: cx : x坐标值 dx : y坐标值 al : 颜色值(16色)
;;简要注意: 本程序需要用户在VGA 640*380 16色模式下工作,在使用前,请使用BIOS中断
;; 设置VGA显示模式为 12H。
;;创建时间: 2005年1月
;;CopyRight: (C)黄庠魁
;;邮箱:Huangxiangkui@msn.com
;;产权所有 不得抄袭 如要使用 与我联系
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;x=cx,y=dx
push ax ;保存现场AX寄存器
push bx ;保存现场BX寄存器
push dx ;保存现场DX寄存器

;开始计算x/8
mov ax,cx
mov bx,8
div bl ;al=ax/8 ah=ax%8
mov word[x],ax ;将结果存入x

;开始计算y*80
pop ax ;将dx的内容读入ax
push ax;将ax内容入栈,以便在程序结束后恢复dx内容
mov bx,80
mul bx ;(dx,ax)=ax*80。因为dx在这个计算中不会有值,所以dx不作记录。
mov word[y],ax

;开始汇总计算
mov ax,word[x]
mov dx,word[y]

mov bl,al
mov bh,00h ;这里我们要将8位扩展成16位

add dx,bx ;dx+bx

mov w

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值