新客网 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

发表评论