写屏函数:! n7 e7 a5 v% a( ]
02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]( m6 e2 C( M$ n2 A$ \* _
02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码
' z" Y2 P6 L, a* t02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]
; q$ E0 y7 y+ N) |% l7 ]02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
3 i0 B; Y) [6 N9 \8 m$ e02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]
# J) P9 E+ d# \& |% Q0 Z- t+ m02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表
4 V% l/ x0 x* V: g0 p G- g每个字符码表占24(16进制)个字节
7 Y. s. Z* j$ e; ~$ u- B5 J02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]9 j w$ _9 B1 C8 b; y7 l1 ^* r
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址( ^4 \: s L) @) N' [7 |
02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]4 v+ F% G% ~% J* }- U9 q
02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一
! c, E* [3 ]& h5 v- a02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]; ~% {* Q& L8 M4 ^) y/ U* {" p
02A0EA71 |. |D900 ||fld dword ptr ds:[eax]& A L# r) J% A7 ]9 l) h
02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
( _$ P* ?9 o0 F- d4 b. t每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
. T" L! U6 n5 U2 E3 N$ V( s3 y# Y* y02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]# \$ } n& J; |1 f9 L8 k$ i8 ]
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]! z3 }# L( o8 u& U
02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]" k% |1 |9 ?! B u$ N' E+ z
02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]; Y) q3 v, L! k8 O$ J, h8 O& ?3 H
02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
4 R- N2 R: T. d. W1 n3 M02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]* V6 y9 {1 N- h6 ~3 y% G3 i/ z
02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]3 ?2 a) u7 P- U1 J4 L x% z3 f3 G
02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]) H: E" I- g7 J( n8 ?: f# r
02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]. g( X; A% w5 B
02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]0 u, m3 M7 s |
02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
! Y/ h2 `- V. _! `: G& R7 s- M2 L02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]. f* R1 v! e9 P5 v& y& [+ Y2 ~
02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]" ]4 _; U- M5 B& @+ P
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
/ d" H# \% L$ {6 u) a% N# l" M02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]
9 k4 b6 L: H5 l02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]
) v# a0 D" o7 ?" H9 d& Q2 M$ X" a0 x" A02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
5 I& U( j- @; m/ b5 Z; W02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]9 d" w0 N1 p5 F3 Q0 N4 {6 x
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C] g0 T4 n! _5 t' S% u
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]
) D) ^# l5 G7 o ~" M' T) ?, w02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
, N8 o1 d" e, F5 P/ F4 _; Y8 ^3 \) x02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]+ c, ]$ r, Z5 _0 T8 B
02A0EAC0 |. |83C1 70 ||add ecx,704 X- j: v, S H' ^" f+ w
02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]' {$ {1 T3 |5 W. P- O
02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
" y" E0 e4 K! J/ Q" h02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]) i) w" ]7 R! A0 D
02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]' ^: g3 d) m* Y9 v/ [ V' x+ h6 W0 s
02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]" x- h4 `5 \. x* Q
02A0EAD2 |. |03C3 ||add eax,ebx$ C# Q1 Z {) v" h
02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8], N3 c* m% O" v8 z0 }3 t! h7 q' ?% U
02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
0 V5 o# H, g9 q1 r; H0 o6 {4 j# A, |; B* D! `
本游戏字符编码采用UNICODE,
?' G3 d- z5 b2 E0 Q对字符码表的操作:
8 a. B" b) S8 C: A; J4 G10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
% \ b. q7 r8 C, i' _* ^$ C1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]0 K/ R& T: v8 x: L
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址; K) V+ f* G" U+ h4 Y7 Y; p
10028810 |. |33C9 |xor ecx,ecx
* L& c' Q- c6 N3 W% \10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]0 \. P3 y: F( y# L9 I
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]3 U6 x- d4 S' O$ u6 Y
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]
4 l, t9 j) X1 \5 L) P1002881D |. |D9C0 |fld st3 K( w3 g! K- j9 G K. I& j" M1 q
1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]; c$ g( v4 K9 b! G' N
10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]# l) r( t$ Z$ K. G( u, A
10028826 |. |D9C0 |fld st2 d. w+ s1 v5 q, L# U% O* w2 e b5 X
10028828 |. |DEC2 |faddp st(2),st
* y8 S# f9 H6 `; r5 f1002882A |. |D9C9 |fxch st(1)1 m: Y6 E( F4 s7 t
1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]. Y- n. `+ i/ u2 H9 U
10028830 |. |D8D3 |fcom st(3)# P$ d7 h+ A/ i1 Z; @- u& R$ s( m8 e/ A
10028832 |. |DFE0 |fstsw ax
9 E8 b/ U- L, d/ O10028834 |. |F6C4 01 |test ah,1
7 ]' `% v# E, T; d3 A: f& f( [: J$ G10028837 |. |74 2B |je short xcEngine.10028864
% l( @: u' k z) i10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]
* |) {6 L( U6 u8 |- N7 h2 ^* W8 |1002883D |. |D8D3 |fcom st(3)4 ? }9 X% z: |
1002883F |. |DFE0 |fstsw ax
C* O0 }6 I) q" A& g10028841 |. |F6C4 41 |test ah,41; B5 }+ k) e# _
10028844 |. |7A 04 |jpe short xcEngine.1002884A
( t) A, l- L& V& c10028846 |. |DDD8 |fstp st% X" C$ d# A) @0 T* p9 e, A
10028848 |. |EB 1A |jmp short xcEngine.100288641 Z! v T {$ q$ d
1002884A |> |D9C9 |fxch st(1)
& o) r/ r# F' o1 W( y. ^# G1 H1002884C |. |D8D3 |fcom st(3)
. g" S$ T% J8 m1 j3 c" S1002884E |. |DFE0 |fstsw ax
2 ?# n- w& a, ^/ \6 o6 W10028850 |. |F6C4 05 |test ah,5) O/ @: B9 E2 R
10028853 |. |7A 04 |jpe short xcEngine.10028859
& }5 D0 b0 e% h$ K; f6 ]" A2 O0 `10028855 |. |DDD9 |fstp st(1)
: s ]- \% C a& H10028857 |. |EB 0B |jmp short xcEngine.10028864& S$ r6 K7 n" e6 H
10028859 |> |D9C9 |fxch st(1); f. v [+ m6 o- Q6 A
1002885B |. |D8DC |fcomp st(4)
# j( `( |5 D! i. E" T1002885D |. |DFE0 |fstsw ax/ \( A* h+ e* i7 K
1002885F |. |F6C4 41 |test ah,41
) K2 {, \9 o" S" b10028862 |. |75 05 |jnz short xcEngine.100288698 X, f) J* M0 P) F
10028864 |> |B9 01000000 |mov ecx,1
% ^4 r% g6 ?/ `10028869 |> |85C9 |test ecx,ecx
, U4 L/ p: Y9 R3 x! j3 t1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
. s, y* J. P' N1002886F |. |D940 14 |fld dword ptr ds:[eax+14]
' l! [9 l2 d9 g4 J& g( ]! J% C* n9 b10028872 |. |DECA |fmulp st(2),st7 J' i/ y2 T) T- ^1 I% L& P
10028874 |. |DEC1 |faddp st(1),st2 I }0 r( d6 S9 i* s O
10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]- o+ B7 o4 K& i
1002887A |. |75 05 |jnz short xcEngine.10028881
: J5 P, V1 A5 A" p3 ^! b1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
& t# [* Z) P8 }: |5 m2 H# R10028881 |> |83C2 02 |add edx,2
/ }1 u% }* }# @% T3 f1 s0 S# @3 p. \10028884 |. |83EF 01 |sub edi,1- K7 e' _4 f. v# _; O$ L
10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.100288072 R& R! e' W' Y8 V8 X7 P
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |