5,927
社区成员




procedure _ClearAlpha(Src: Pointer; Count: integer; Value: longword);
asm
{ Clear alpha }
PUSH EDI
MOV EDI, EAX {X}
MOV EAX, ECX {Value}
MOV ECX, EDX {Count}
TEST ECX,ECX
JS @exit
AND EAX, $00FFFFFF
@1:
MOV EDX, [EDI]
AND EDX, $00FFFFFF
CMP EDX, EAX
JNE @2
MOV [EDI], EDX
@2:
ADD EDI, 4
LOOP @1
@exit:
POP EDI
end;
procedure _FillLongwordRect(Src: Pointer; W, H, X1, Y1, X2, Y2: Integer; Value: Longword);
asm
PUSH EDI
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EDI, EAX
XOR EBX, EBX
XOR EAX, EAX
MOV EBX, W
MOV EAX, Y1
MUL EBX
ADD EAX, X1
ADD EDI, EAX
ADD EDI, EAX
ADD EDI, EAX
ADD EDI, EAX
MOV EBX, X2
SUB EBX, X1
INC EBX
TEST EBX,EBX
JS @exit
MOV EDX, Y2
SUB EDX, Y1
INC EDX
TEST EDX,EDX
JS @exit
MOV EAX, VALUE
@1:
PUSH EDI
MOV ECX, EBX
CLD
REP STOSD
POP EDI
POP ECX
ADD EDI, ECX
ADD EDI, ECX
ADD EDI, ECX
ADD EDI, ECX
PUSH ECX
DEC EDX
CMP EDX, 0
JNE @1
@exit:
POP EDX
POP ECX
POP EBX
POP EAX
POP EDI
end;