写屏函数:* ]* ^( I/ e1 z7 \& w' y
02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]
, Q6 f% L6 C4 m9 H9 @02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码# e( L _6 `3 p& @' |* F
02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]
" e2 _" Y! s' V; y02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
/ d0 `( `: ~5 |7 i2 z02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]6 p& x- p6 }/ k! E# W
02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表
, @8 V0 m8 L4 g2 D3 `: v8 \每个字符码表占24(16进制)个字节2 w: E9 q5 g' {; ]% }2 ~: [" a# c
02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]1 X d1 ^) s! H5 ]! x0 `
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
+ G1 |* V! c/ S02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]
: G, X5 k9 {& R% p" j# P8 Q+ \& h02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一
8 ~8 j. S1 P" T6 S' v02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]) M! ` ^9 {; I! q' A: L
02A0EA71 |. |D900 ||fld dword ptr ds:[eax]$ U9 N9 R) n2 a- `0 c/ q
02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
$ r+ h9 |2 H( ?- M1 t \- l每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
+ j* D5 Q ]1 S6 S' N- Y+ }: b02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]. V9 u) w- }2 B9 h9 H
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4] U8 D8 @( H& R2 H5 ]3 j8 O$ M* A
02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
: l9 K9 i6 S* s; G02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]( ^ m+ g0 T' R; v
02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
, z8 g7 u. J2 X$ S' x02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
6 @! b0 |7 q; x1 E- D3 o: C! b02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]' R+ p$ r- d6 n' ^! d
02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]% I \1 O2 ] R* V' w# k
02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]$ [- k$ n p/ A0 h
02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
! X% s! Q0 B& Q" ]02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
q8 N7 e( K3 x0 Q; O, E02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]
]0 \% S' z7 O' Z% k4 L, J02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]
6 |. Y) F7 K2 B5 [; L9 [( Z# c" W5 s02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]) m; `' i4 t9 T! n6 {/ _
02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]7 S* K7 t2 [& y/ b, r5 S
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]. Y0 H) f7 r& J+ z
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]0 ^3 d: T6 ]' \# @$ @& U# s
02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]) m* k$ o' u5 G, X( A
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]- e _8 p: L- K1 H0 M. i: x
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]" f2 p8 m% b* m0 Y k, I1 k! T6 S1 R0 }# }
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
" Q# S4 i7 t+ ]8 \- `* c0 h02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]5 s. M$ e% q" L1 |5 `" X
02A0EAC0 |. |83C1 70 ||add ecx,70% T; g* |0 v6 Y
02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
) f/ k( e' p5 ~9 F02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
" U. H% k4 E0 h7 Q; ?, y+ m02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]5 b) G- T$ P4 h5 V- k
02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]
; t9 b+ F& e: m% L02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]
3 z6 [& Q4 n W5 A* G8 j" G0 _$ T02A0EAD2 |. |03C3 ||add eax,ebx
) @+ V& ]: k# F' [0 M7 H/ S# v. X! h02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]
$ m+ w9 h+ Z9 `) d- s02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C( o* m' o! n* T0 F+ [0 F3 j/ q
- _4 S/ U9 h9 ~
本游戏字符编码采用UNICODE,
/ \4 D6 V4 C! N对字符码表的操作:
, j% Y' x" @* v! B- l- v2 w: r10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
2 J# s! H. N K6 E- c1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]7 P& R' |4 w: u9 i( L
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址, ]2 l0 z3 H8 \) t( ^8 C
10028810 |. |33C9 |xor ecx,ecx0 f' h/ X* t, J; t$ d, ~
10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]1 ]2 Q8 `/ {6 X5 S1 P6 S3 \
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]
/ ~# }- _& N' d& m3 d+ T7 h10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]. ]3 C6 y( E5 {5 f7 Q! b! v
1002881D |. |D9C0 |fld st
9 e* Y$ k2 k u- l) R. ?3 l) z1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]- v) Q, ~& ~* Q9 E X2 p" R
10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]
3 F4 A0 Q8 D+ v6 c; Q1 ~10028826 |. |D9C0 |fld st
2 }* ?' r+ @0 O O' D( t$ M0 R* y10028828 |. |DEC2 |faddp st(2),st
( g3 J! f9 ?' O2 P) h1002882A |. |D9C9 |fxch st(1)* p$ t5 \4 _1 u7 M
1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]
+ m7 ]6 \7 C! ?6 O& L1 S. R10028830 |. |D8D3 |fcom st(3)
I4 Y# ?' L$ i8 {10028832 |. |DFE0 |fstsw ax
# ?8 I1 ^7 g2 _. H/ G0 C q( p10028834 |. |F6C4 01 |test ah,1, x- c6 A' A* E7 y
10028837 |. |74 2B |je short xcEngine.10028864! ?) F c5 @2 g+ ^/ s% {, z
10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]
) n- ~! ]3 ]' O: U1002883D |. |D8D3 |fcom st(3)
' ]1 |3 Y# X5 D" d1002883F |. |DFE0 |fstsw ax
' t2 @" ?8 Y. L% T2 i. ]: I: m10028841 |. |F6C4 41 |test ah,41
) X) i8 Q0 @! f5 Q1 m* N9 J2 J5 D10028844 |. |7A 04 |jpe short xcEngine.1002884A
* Z. `2 w2 Z8 i5 m( L10028846 |. |DDD8 |fstp st3 V3 S* g8 O1 A* |: c$ Q
10028848 |. |EB 1A |jmp short xcEngine.10028864
# S5 \/ ^. w0 {* \# b1002884A |> |D9C9 |fxch st(1)/ C6 ^* L' W( e, v$ b
1002884C |. |D8D3 |fcom st(3)
: D# g. N" b8 n, r# t% b1002884E |. |DFE0 |fstsw ax6 P" O. q. R/ j- G' @; v" |8 z
10028850 |. |F6C4 05 |test ah,5# O: z& T8 I7 {# ^% `
10028853 |. |7A 04 |jpe short xcEngine.10028859
. N/ J) x T% h& K10028855 |. |DDD9 |fstp st(1)+ E' E4 V/ T9 n% `( |9 H7 h
10028857 |. |EB 0B |jmp short xcEngine.10028864
; _/ @ \: a# d2 `! k" x10028859 |> |D9C9 |fxch st(1)
- A a0 T( Z- @+ z1002885B |. |D8DC |fcomp st(4)
5 n. R3 G: |5 e$ t1002885D |. |DFE0 |fstsw ax
3 o5 C- K1 I; ^1 a1002885F |. |F6C4 41 |test ah,41( `; r0 d+ o" K0 a) T6 L
10028862 |. |75 05 |jnz short xcEngine.10028869
& j. y" M1 F4 ~) h0 c3 l# U8 w9 g+ p10028864 |> |B9 01000000 |mov ecx,1" y: \ E1 J8 C$ H1 S9 k
10028869 |> |85C9 |test ecx,ecx
$ m! m% c1 }# C# m1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]$ U% p# V- x- o9 C- |1 z0 T
1002886F |. |D940 14 |fld dword ptr ds:[eax+14]: w+ G" J$ f5 t6 @
10028872 |. |DECA |fmulp st(2),st
8 m+ H1 }" S0 A0 ~. B10028874 |. |DEC1 |faddp st(1),st
B) D- l6 e2 {) H; ?10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]
- J8 v. k/ z+ `! T! m3 K1002887A |. |75 05 |jnz short xcEngine.10028881
, v( ~+ U1 @5 z; f9 O8 s1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
4 Z/ `; }/ h8 {10028881 |> |83C2 02 |add edx,2
) Y. k# W( O+ y* B7 [; ^2 S. x10028884 |. |83EF 01 |sub edi,1* y1 i4 c. b5 L7 w' D
10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.100288079 Z% q( y3 x4 t+ @9 f. d+ c
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |