使用BIOS以及直接写显存绘制图形
1.绘制像素
[cpp] view plaincopyprint?
-----------------------------------------------------------------------
INT 0x10可识别的视频图形模式
--------------------------------------------------------------------
模式 分辨率(列*行,像素) 颜色数
6 640x200 2
0DH 320x200 16
0EH 640x350 16
0FH 640x350 2
10H 640x200 16
11H 640x480 2
12H 640x480 16
13H 320x200 256
6AH 800x600 16
-----------------------------------------------------------------------
当视频控制器处于图形模式时,INT 0x10的功能0CH在屏幕上绘制一个像素点。(功能0CH执行的相当慢)
[cpp]
-----------------------------------------------------------------------
INT 0x10 功能0CH
---------------------------------------------------------------
描述:
写像素
接受参数:
AH 0CH
AL 像素值
BH 视频页
CX X坐标
DX Y坐标
返回值:
无
注意:
视频显示必须处于图形模式下。像素值的范围和坐标范围与当前的图形模式有关。
如果AL的位7置位,新的像素同当前像素的内容进行异或运算。
-------------------------------------------------------------------------
示例,画线程序:
[cpp]
# This program draws a straight line in graphics mode.
# 2012-12-24 20:42
# guzhoudiaoke@126.com
.section .text
.global _start
.code16
_start:
jmp main
clear_screen: # 清屏函数
movb $0x06, %ah # 功能号0x06
movb $0, %al # 上卷全部行,即清屏
movb $0, %ch # 左上角行
movb $0, %ch # 左上角列
movb $24, %dh # 右下角行
movb $79, %dl # 右下角列
movb $0x07, %bh # 空白区域属性
int $0x10
ret
main:
movw %cx, %ax
movw %ax, %ds
movw %ax, %es
call clear_screen # 清屏
# 设置成图形模式,0x6a为800x600, 16种颜色
movb $0, %ah # 功能号0x0
movb $0x6a, %al # 显示模式
int $0x10
# 画一条直线
movb $0x0, %bh # 视频页
movw $300, %dx # y坐标
movw $100, %cx # x坐标
movb $0x0c, %ah # 功能号
movb $9, %al # 像素值(颜色)
1:
int $0x10
incw %cx # 下一个像素
cmpw $700, %cx # 是否到了结束位置
jne 1b
1:
jmp 1b
.org 0x1fe, 0x90
.word 0xaa55
结果:
2.图形模式用功能0x13显示字符串
[cpp]
# This program draws text and a straight line in graphics mode.
# 2012-12-24 20:42
# guzhoudiaoke@126.com
.section .text
.global _start
.code16
_start:
jmp main
clear_screen: # 清屏函数
movb $0x06, %ah # 功能号0x06
movb $0, %al # 上卷全部行,即清屏
movb $0, %ch # 左上角行
movb $0, %ch # 左上角列
movb $24, %dh # 右下角行
movb $79, %dl # 右下角列
movb $0x07, %bh # 空白区域属性
int $0x10
ret
main:
movw %cx, %ax
movw %ax, %ds
补充:软件开发 , C++ ,