当前位置:编程学习 > C/C++ >>

使用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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,