📄 hong_sprite.cpp
字号:
sub dx,word ptr lx;
sub esi,edx;
mov cx,dx;
cmp dx,word ptr rx; //new
jle jmp_0000; //"
mov cx,word ptr rx; //"
xxxxxxx1:
jmp_0000: //"
//************ move data ***********
shr cx,1;//*********************************************************
or cx,cx;
jz exit_movedata1;
loop_TR1:
lodsw
and ax,111101111011110b;
and word ptr [edi],111101111011110b;
add ax,[edi];
shr ax,1;
mov [edi],ax;
add edi,2;
loop loop_TR1;
exit_movedata1:
cmp dx,word ptr rx; //new
jle exit_while1; //"
mov eax,edx; //"
sub ax,word ptr rx; //"
add esi,eax; //new
exit_while1: //end while(*stmp != 0xffff)*/
exit_if1: //end if(lx)
loop_while2:
cmp word ptr[esi],0xffff;
jz exit_while2;
lodsw;
add edi,eax; //dtmp+=*stmp
add dx,ax; //j+=*stmp
lodsw;
mov cx,ax; //l=k=*stmp
mov word ptr l,ax;
add ax,dx;
cmp ax,word ptr rx;
jle exit_if0;
cmp dx,word ptr rx;
jg exit_if0;
//mov ax,cx;
mov cx,word ptr rx;
sub cx,dx;
exit_if0:
cmp dx,word ptr rx;
jg else_if;
add dx,word ptr l; //j+=l;
sub word ptr l,cx; //l-k;
//************ move data ***********
shr cx,1;//*********************************************************
or cx,cx;
jz exit_movedata2;
loop_TR2:
lodsw
and ax,111101111011110b;
and word ptr [edi],111101111011110b;
add ax,[edi];
shr ax,1;
mov [edi],ax;
add edi,2;
loop loop_TR2;
exit_movedata2:
mov ax,word ptr l;
add esi,eax;
jmp loop_while2;
else_if:
mov ax,word ptr l;
add esi,eax;
ext_loop:
cmp word ptr[esi],0xffff;
jz ext;
add esi,2;
lodsw
add esi,eax;
jmp ext_loop;
ext:
exit_while2:
add esi,2;
mov ax, wDxSize;
add dword ptr Dtmp,eax;
dec bx;
jmp loop_for1;
exit_for1:
pop es;
};
}
void PutCmprsImgNOTClipingHBlend555(int x, int y, int yl, LPVOID Stmp, LPVOID dest)
{
DWORD j;
LPVOID Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
j = yl;
_asm{
push es;
push ds;
pop es;
mov edx,Dtmp;
mov esi,Stmp;
mov ebx,j;
xor eax,eax;
xor ecx,ecx;
or ebx,ebx; // if(SY==0)
jz exit_1;
loop_1:
mov edi,edx;
loop_2:
cmp word ptr[esi],0xffff;
jz exit_2;
mov ax,[esi];
add edi,eax; //0 skip
mov cx,[esi+2]; //load data num
add esi,4;
shr ecx,1;
loop_TR:
mov eax,[esi];
mov ebx,[edi];
shr eax,2;
and eax,001100011000110b;
and ebx,111101111011110b;
add eax,ebx;
shr eax,1;
mov [edi],ax;
add esi,2;
add edi,2;
loop loop_TR;
jmp loop_2;
exit_2:
add esi,2;
add edx,dDxSize;
dec j;
jnz loop_1;
exit_1:
pop es;
};
}
void PutCmprsImgClipingBlend565(
int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
int l;
LPVOID Dtmp = (LPVOID)((char *)dest + y * wDxSize + (x * 2 ));
_asm{
mov ecx,rx;
shl ecx,1;
mov rx,ecx;
mov ecx,lx;
shl ecx,1;
mov lx,ecx;
}
_asm{
push es;
push ds;
pop es;
xor eax,eax;
mov ebx,alpha;
mov esi,Stmp;
mov ecx,ty;
or ecx,ecx;
jz exit_1;
loop_1:
cmp word ptr[esi],0xffff;
jz exit_xxxx;
mov ax,[esi+2]
add esi,4;
add esi,eax;
jmp loop_1;
exit_xxxx:
add esi,2;
loop loop_1;
exit_1:
}
_asm{
mov eax, by; //
or eax,eax;
jz exit_for1;
loop_for1:
xor edx,edx;
mov edi,Dtmp;
test lx,0xffff; //if(lx)
jz exit_if1;
loop_while1:
cmp word ptr[esi],0xffff; //while(*stmp != 0xffff)
jz exit_while1; //
add dx,[esi];
cmp edx,lx; //if(j>lx)
jle jmp_if1; //
sub edx,lx; //j-=lx
add edi,edx; //dtmp+=j
jmp jmp_0416;//****************************************************
jmp_if1:///////////////////////////////////////
mov ax,[esi + 2];
add esi,4;
add edx,eax;
add esi,eax; //
cmp edx,lx; //
jle loop_while1;
sub edx,lx;
sub esi,edx;
mov eax,edx;
xor edx,edx;
jmp jmp_0429; //4.29
exit_while1: //end while(*stmp != 0xffff)*/
exit_if1: //end if(lx)
loop_while2:
cmp word ptr[esi],0xffff;
jz exit_while2;
movzx eax,word ptr[esi];
add edi,eax; //dtmp+=*stmp
add edx,eax; //j+=*stmp
jmp_0416:
mov ax,[esi + 2];
add esi,4;
jmp_0429:
mov ecx,eax; //l=k=*stmp
mov l,eax;
add eax,edx;
cmp eax, rx;
jle exit_if0;
cmp edx, rx;
jg exit_if0;
mov ecx, rx;
sub ecx,edx;
exit_if0:
cmp edx, rx;
jg else_if;
add edx, l; //j+=l;
sub l,ecx; //l-k;
or ecx,ecx;
jz jmp_kkk;
shr ecx,1; //move DATA
push edx;
loop_alpha:
xor eax,eax;
mov ax,[esi];
ror eax,11;
xor edx,edx;
shl ax,10;
rol eax,6;
shl ax,5;
rol eax,5;
mov dx,[edi];
ror edx,11;
shl dx,10;
rol edx,6;
shl dx,5;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x03e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x03e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,5;
ror eax,6;
shr ax,10;
rol eax,11;
mov [edi],ax;
add edi,2;
add esi,2;
loop loop_alpha;
pop edx;
jmp_kkk:
add esi,l;
jmp loop_while2;
else_if:
add esi,l;
ext_loop:
cmp word ptr[esi],0xffff;
jz ext;
movzx eax,[esi+2];
add esi,4;
add esi,eax;
jmp ext_loop;
ext:
exit_while2:
mov eax, dDxSize;
add esi,2;
add dword ptr Dtmp,eax;
dec dword ptr by; //for(i=0;i<by;i++)
jnz loop_for1; //
exit_for1:
pop es;
};
}
void PutCmprsImgNOTClipingBlend565(int x, int y, int yl, LPVOID Stmp, LPVOID dest, DWORD alpha)
{
DWORD j;
LPVOID Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
j = yl;
_asm{
push es;
push ds;
pop es;
mov esi,Stmp;
mov ebx,alpha;
inc j;
xor eax,eax;
xor ecx,ecx;
loop_1:
dec j
jz exit_1; //if(SY==0)
mov edi,Dtmp;
loop_2:
cmp word ptr[esi],0xffff;
jz exit_2;
xor eax,eax;
mov ax,[esi];
add edi,eax; //0 skip
mov cx,[esi+2]; //load data num
add esi,4;
shr ecx,1;
loop_alpha:
xor eax,eax;
mov ax,[esi];
ror eax,11;
xor edx,edx;
shl ax,10;
rol eax,6;
shl ax,5;
rol eax,5;
mov dx,[edi];
ror edx,11;
shl dx,10;
rol edx,6;
shl dx,5;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x03e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x03e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,5;
ror eax,6;
shr ax,10;
rol eax,11;
mov [edi],ax;
add edi,2;
add esi,2;
loop loop_alpha;
jmp loop_2;
exit_2:
add esi,2;
mov eax,Dtmp;
add eax,dDxSize;
mov Dtmp,eax;
jmp loop_1;
exit_1:
pop es;
};
}
void PutCmprsImgClipingBlend555(
int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
int l;
LPVOID Dtmp = (LPVOID)((char *)dest + y * wDxSize + (x * 2 ));
_asm{
mov ecx,rx;
shl ecx,1;
mov rx,ecx;
mov ecx,lx;
shl ecx,1;
mov lx,ecx;
}
_asm{
push es;
push ds;
pop es;
xor eax,eax;
mov ebx,alpha;
mov esi,Stmp;
mov ecx,ty;
or ecx,ecx;
jz exit_1;
loop_1:
cmp word ptr[esi],0xffff;
jz exit_xxxx;
mov ax,[esi+2]
add esi,4;
add esi,eax;
jmp loop_1;
exit_xxxx:
add esi,2;
loop loop_1;
exit_1:
}
_asm{
mov eax, by; //
or eax,eax;
jz exit_for1;
loop_for1:
xor edx,edx;
mov edi,Dtmp;
test lx,0xffff; //if(lx)
jz exit_if1;
loop_while1:
cmp word ptr[esi],0xffff; //while(*stmp != 0xffff)
jz exit_while1; //
add dx,[esi];
cmp edx,lx; //if(j>lx)
jle jmp_if1; //
sub edx,lx; //j-=lx
add edi,edx; //dtmp+=j
jmp jmp_0416;//****************************************************
jmp_if1:///////////////////////////////////////
mov ax,[esi + 2];
add esi,4;
add edx,eax;
add esi,eax; //
cmp edx,lx; //
jle loop_while1;
sub edx,lx;
sub esi,edx;
mov eax,edx;
xor edx,edx;
jmp jmp_0429; //4.29
exit_while1: //end while(*stmp != 0xffff)*/
exit_if1: //end if(lx)
loop_while2:
cmp word ptr[esi],0xffff;
jz exit_while2;
movzx eax,word ptr[esi];
add edi,eax; //dtmp+=*stmp
add edx,eax; //j+=*stmp
jmp_0416:
mov ax,[esi + 2];
add esi,4;
jmp_0429:
mov ecx,eax; //l=k=*stmp
mov l,eax;
add eax,edx;
cmp eax, rx;
jle exit_if0;
cmp edx, rx;
jg exit_if0;
mov ecx, rx;
sub ecx,edx;
exit_if0:
cmp edx, rx;
jg else_if;
add edx, l; //j+=l;
sub l,ecx; //l-k;
or ecx,ecx;
jz jmp_kkk;
shr ecx,1; //move DATA
push edx;
loop_alpha:
xor eax,eax;
mov ax,[esi];
ror eax,10;
xor edx,edx;
shl ax,11;
rol eax,5;
shl ax,6;
rol eax,5;
mov dx,[edi];
ror edx,10;
shl dx,11;
rol edx,5;
shl dx,6;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x07e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x07e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,6;
ror eax,5;
shr ax,11;
rol eax,10;
mov [edi],ax;
add edi,2;
add esi,2;
loop loop_alpha;
pop edx;
jmp_kkk:
add esi,l;
jmp loop_while2;
else_if:
add esi,l;
ext_loop:
cmp word ptr[esi],0xffff;
jz ext;
movzx eax,[esi+2];
add esi,4;
add esi,eax;
jmp ext_loop;
ext:
exit_while2:
mov eax, dDxSize;
add esi,2;
add dword ptr Dtmp,eax;
dec dword ptr by; //for(i=0;i<by;i++)
jnz loop_for1; //
exit_for1:
pop es;
};
}
void PutCmprsImgNOTClipingBlend555(int x, int y, int yl, LPVOID Stmp, LPVOID dest, DWORD alpha)
{
DWORD j;
LPVOID Dtmp = (LPVOID)((char *)dest + y * dDxSize + (x * 2 ));
j = yl;
_asm{
push es;
push ds;
pop es;
mov esi,Stmp;
mov ebx,alpha;
inc j;
xor eax,eax;
xor ecx,ecx;
loop_1:
dec j
jz exit_1; //if(SY==0)
mov edi,Dtmp;
loop_2:
cmp word ptr[esi],0xffff;
jz exit_2;
xor eax,eax;
mov ax,[esi];
add edi,eax; //0 skip
mov cx,[esi+2]; //load data num
add esi,4;
shr ecx,1;
loop_alpha:
xor eax,eax;
mov ax,[esi];
ror eax,10;
xor edx,edx;
shl ax,11;
rol eax,5;
shl ax,6;
rol eax,5;
mov dx,[edi];
ror edx,10;
shl dx,11;
rol edx,5;
shl dx,6;
rol edx,5;
imul eax,ebx;
shr eax,5;
and eax,0x03e0fc1f;
add eax,edx;
imul edx,ebx;
shr edx,5;
and eax,0x03e0fc1f;
sub eax,edx;
ror eax,5;
shr ax,6;
ror eax,5;
shr ax,11;
rol eax,10;
mov [edi],ax;
add edi,2;
add esi,2;
loop loop_alpha;
jmp loop_2;
exit_2:
add esi,2;
mov eax,Dtmp;
add eax,dDxSize;
mov Dtmp,eax;
jmp loop_1;
exit_1:
pop es;
};
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
void PutCmprsImgClipingBlendDifer565(
int x, int y, LPVOID Stmp, LPVOID dest, int lx, int rx, int ty, int by, DWORD alpha)
{
int l;
LPVOID Dtmp = (LPVOID)((char *)dest + y * wDxSize + (x * 2 ));
_asm{
mov ecx,rx;
shl ecx,1;
mov rx,ecx;
mov ecx,lx;
shl ecx,1;
mov lx,ecx;
}
_asm{
push es;
push ds;
pop es;
xor eax,eax;
mov ebx,alpha;
mov esi,Stmp;
mov ecx,ty;
or ecx,ecx;
jz exit_1;
loop_1:
cmp word ptr[esi],0xffff;
jz exit_xxxx;
mov ax,[esi+2]
add esi,4;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -