新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 网络学院 > 操作系统 > DOS教程 > 正文:DOS下看真彩BMP位图的小程序

DOS下看真彩BMP位图的小程序

新客网 XKER.COM 2006-10-03 来源: 收藏本文

{

asm push es
asm push di

asm mov ax,4f03h
asm int 10h

pi112:
asm cmp bx,112h
asm jnz pi115

asm mov dx,640
asm jmp write_24t


pi115:
asm cmp bx,115h
asm jnz pi118

asm mov dx,800
asm jmp write_24t

pi118:
asm cmp bx,118h
asm jnz Tr_exit

asm mov dx,1024

write_24t:
asm mov ax,0a000h
asm mov es,ax
asm mov ax,y
asm mul dx
asm mov bx,ax
asm mov cx,dx
asm add ax,bx
asm adc dx,cx
asm add ax,bx
asm adc dx,cx
asm add ax,bx
asm adc dx,cx

asm mov bx,x
asm add bx,x
asm add bx,x
asm add bx,x
asm add ax,bx
asm adc dx,0
asm mov di,ax

asm mov ax,4f05h
asm mov bx,0
asm int 10h

asm mov cx,word ptr color
asm mov word ptr es:[di],cx
asm add di,2
asm mov cx,word ptr color+2
asm mov word ptr es:[di],cx

Tr_exit:
asm pop di
asm pop es

return;
}


void Pixel16HiC(int color,int x,int y)
{
asm push es
asm push di

asm mov ax,4f03h
asm int 10h

pi110:
asm cmp bx,110h
asm jnz pi111

asm mov dx,640
asm jmp write_16h



pi111:
asm cmp bx,111h
asm jnz pi113

asm mov dx,640
asm jmp write_16h



pi113:
asm cmp bx,113h
asm jnz pi114

asm mov dx,800
asm jmp write_16h


pi114:
asm cmp bx,114h
asm jnz pi116

asm mov dx,800
asm jmp write_16h


pi116:
asm cmp bx,116h
asm jnz pi117

asm mov dx,1024
asm jmp write_16h


pi117:
asm cmp bx,117h
asm jnz Hi_exit

asm mov dx,1024


write_16h:
asm mov ax,0a000h
asm mov es,ax
asm mov ax,word ptr [y]
asm mul dx
asm shl ax,1
asm jc a1
asm shl dx,1
asm jmp cont
a1:
asm shl dx,1
asm inc dx

cont:
asm shl word ptr [x],1
asm add ax,word ptr [x]
asm adc dx,0
asm mov di,ax

asm mov ax,4f05h
asm mov bx,0
asm int 10h

asm mov cx,word ptr [color]
asm mov word ptr es:[di],cx

Hi_exit:
asm pop di
asm pop es

return;
}


void Pixel256C(char color,int x,int y)
{
asm push es
asm push di


asm mov ax,4f03h
asm int 10h


pi100:
asm cmp bx,100h
asm jnz pi101

asm mov dx,640
asm jmp write_256

pi101:
asm cmp bx,101h
asm jnz pi103

asm mov dx,640
asm jmp write_256



pi103:
asm cmp bx,103h
asm jnz pi105

asm mov dx,800
asm jmp write_256



pi105:
asm cmp bx,105h
asm jnz exit_256

asm mov dx,1024

write_256:
asm mov ax,0a000h
asm mov es,ax
asm mov ax,word ptr [y]
asm mul dx
asm add ax,word ptr [x]
asm adc dl,0
asm mov di,ax

asm mov ax,4f05h
asm mov bx,0
asm int 10h

asm mov cl,byte ptr [color]
asm mov byte ptr es:[di],cl


exit_256:
asm pop di
asm pop es

return;
}
[/code:1:9253783525]
www.xker.com(小新)

gl.asm 底层画点函数要用TASM编译,不过有上边的嵌入式汇编这个可以不用了

[code:1:9253783525]
.386

public _init
public _Demo
public _Pixel16HiC
public _Pixel24TrC
public _Pixel256C


_ATTRI struc

MODE_ATTR DW ?
WIN_A_ATTR DB ?
WIN_B_ATTR DB ?
WIN_GRAN DB ?
WIN_SIZE DW ?
WIN_A_SEG DW ?
WIN_B_SEG DW ?
WIN_FUNC_PTR DD ?
LINE_BYTE DW ?

_ATTRI ends



mpusha macro
push ax
push cx
push dx
push bx
push sp
push bp
push si
push di
endm


mpopa macro
pop di
pop si
pop bp
pop sp
pop bx
pop dx
pop cx
pop ax
endm


DGROUP group _DATA,_BSS




extrn _printf:far




_TEXT segment use16 byte public 'code'
assume cs:_TEXT,ds:DGROUP


;初始化图型模式
;入口参数:显示模式压入?

_init proc far

enterw 0,0
mov bx,[bp+6]
mov ax,4f02h
int 10h
leavew
ret

_init endp

标签:
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 阅读排行
  • 推荐阅读
  • 随机推荐