【阳光飞狐__与财富同行】
标题:
飞狐交易师 (foxtrader) 连结 DLL 的方法 ----- (续)
[打印本页]
作者:
ycng
时间:
2019-8-11 16:12
标题:
飞狐交易师 (foxtrader) 连结 DLL 的方法 ----- (续)
//////////////////////////////////////////////////////////foxfunc.cpp
4 x0 V2 V/ W( b! C0 P
" m2 Z0 d! z; E* `" K2 {$ f' t
//FoxFunc.cpp : Defines the entry point for the DLL application.
h% S1 ~0 a1 s
//
# @; \& d; H0 d5 s" I# }
#include
<string.h>
4 I: J$ |$ D3 T; \3 p4 z/ w4 ?
#include
<stdio.h>
5 X% ^& O& P# W. j
#include
<io.h>
1 x d9 O, V' b/ i2 k( v9 |
#include
<math.h>
- A q- A# c m2 ]( T
#include
<iostream>
. }; _# d( S- M" Z; m
#include
"stdafx.h"
0 E8 A+ u# \4 ]2 Y# W" {6 X
#include
"FoxFunc.h"
& _* I* j3 c7 I% O6 @2 H2 {
usingnamespace std;
0 X, c4 {' B( V0 E# } D0 b6 _& P) L
BOOLAPIENTRY DllMain( HANDLE hModule,
4 G/ W3 i5 h' V6 M4 m7 C8 {2 x
DWORDul_reason_for_call,
0 w# M# W* B+ Z7 s+ O
LPVOIDlpReserved
% |4 o! a) B# ~) J' g
)
1 {8 W' {7 L3 e, ~; h. ]6 U; P# @
{
" `- Y* c$ N4 v ^8 F3 g8 z
switch(ul_reason_for_call)
+ [% j9 D% c* h, _, ?- P, r
{
. p$ c- t1 e4 C) z
caseDLL_PROCESS_ATTACH:
7 z; x J; z3 l
caseDLL_THREAD_ATTACH:
1 ?! E! h+ S2 n* c; ?' H
caseDLL_THREAD_DETACH:
. E( _2 t8 t) i" u) P
caseDLL_PROCESS_DETACH:
, X" `/ r! w8 T0 G% ]7 V! e7 Y
break;
# R& c$ z, s. N
}
8 d( ]. ~3 ]6 X+ C5 g7 o9 E
returnTRUE;
! a+ c, F% {$ m& u$ W( m5 P* h
}
# R# r. p# g6 `2 U/ l
//
计算收盘价的均价
,
一个常数参数
,
表示计算周期
. N) w7 P& E" \. b
//
调用方法
:
- B- ?! U1 f3 r
//"FOXFUNC@MYMACLOSE"(5)
% u, I% k' `2 \3 S( c
/*
. a y- l3 A% t& B; O" B6 x
//extern "C" double __cdecl ppow10(double ctemp,doublelength); - - - > wrong, extern "C" is to declare pow10coming from a .dll or .lib
9 D7 a" s! Z) {. K5 c, ]
//extern "C" double ppow10(double ctemp,double length); - - -> both are the same
5 r0 z6 V" o7 O5 ~
*/
' Z& @4 X: y( h3 Q: m* i8 Y) z
extern"C" double __cdecl ppow10(double ,double );
* x& t6 K& \4 a O
//double ppow10(double ,double );
9 Y; v5 M8 {* S1 u
//call pow10() by __cdecl
; P9 M; m5 U% c [9 ~
//!!!!!!!! use "C" for Microsoft visual C++ compiler
5 U+ C! u( u8 l# G1 P& o+ \* }
//!!!!!!!! use "C" for Microsoft visual C++ compiler
4 p I. J9 S4 H) N$ v
//!!!!!!!! use "C" for Microsoft visual C++ compiler
, e8 ?6 \6 M/ s# ^: L) i: }
//!!!!!!!! use "C" for Microsoft visual C++ compiler
7 ^8 W6 ~& l% ~5 P/ D6 b1 T( ]
//!!!!!!!! use "C" for Microsoft visual C++ compiler
+ u9 U+ `5 ?8 H2 I- Q$ t
__declspec(dllexport)int WINAPI MYMACLOSE(CALCINFO* pData)
5 }4 D% M; f+ U5 J8 c# m5 Y- p
{
/ {. {' |- d, O9 o8 K* X1 h
if( // pData->m_pfParam1 && //
参数
1
有效
: I' r9 t# R& s6 R& Y8 ~4 w; a: r, D
//pData->m_nParam1Start<0 && //
参数
1
为常数
$ v" E! w1 E- a) z) m& P7 P1 g: z3 }
//pData->m_pfParam2==NULL ) //
仅有一个参数
% ^" J" ~. y! u
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_pfParam4
" o2 Z& t: [/ {: N, F$ u
//&& pData->m_pfParam5 && pData->m_pfParam6 &&pData->m_nParam1Start>=0 &&
, j, r' |1 f. f# T4 {
//pData->m_pfParam7==NULL)
3 i" t% ?3 n4 L x$ I/ H
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_nParam1Start>=0 &&
" J' p9 E X# Y$ d) I
pData->m_pCalcParam[0].m_nParamStart>=0&& pData->m_pCalcParam[1].m_nParamStart>=0
( W" w2 i2 S6 k4 ~5 V. A+ F
&&pData->m_pCalcParam[2].m_nParamStart>=0)
R( e; s/ { i+ r; F2 K
{
9 C: r- |; P. w6 \) Y* Y7 \6 g9 A* s
floatfParam = *pData->m_pfParam4; //pointer ,pData->m_pCalcParam[3].m_nParamStart >= 0
6 q% a- B* y+ ^4 f# k
intnPeriod = (int)fParam; //
参数
1
) v [; t7 ?& V
//const float* cpParam = pData->m_pfParam2; // cpParam = pointer to
/ [8 C5 f& S9 y$ A
constfloat* cpParam2 =pData->m_pCalcParam[1].m_pfParam; // cpParam =pointer to
! o; N+ b( j9 Z9 [& @8 d: r* j9 @ X
constfloat* cpParam3 =pData->m_pCalcParam[2].m_pfParam; // cpParam =pointer to
7 x% G" Q/ V& N, T9 W2 ~$ ~
constfloat* cpParam4 =pData->m_pCalcParam[3].m_pfParam; // cpParam =pointer to
# C9 r" S. z* r7 D% J
//const float* cpParam5 =pData->m_pCalcParam[4].m_pfParam; //cpParam = pointer to
u1 N, A7 S' S7 h$ @
//in foxtraderoooq:"MYFUNC2010@MYMACLOSE"(c,c,c,6),colorffffff,linethick5;// cpParam5 =pData->m_pCalcParam[4].m_pfParam
7 l3 h. |- u# q5 z
//pData->m_pCalcParam[5].m_fParam); //value
3 p* b% j7 D& g0 V
//const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
' u `8 I2 i+ v0 Z. v7 u
//const float* pValue2 = pData->m_pCalcParam[1].m_pfParam;
$ W O# q% W, v h
//const float* pValue3 = pData->m_pCalcParam[2].m_pfParam;
1 \+ _- p6 X. x5 |' t! H
//const float* pValue4 = pData->m_pCalcParam[3].m_pfParam;
v" P/ _4 H: O1 J7 o
//const float* pValue5 = pData->m_pCalcParam[4].m_pfParam;
- a; o; [- ^) q0 n9 n+ p
if(nPeriod>0)
2 {6 w( d% }7 d; j# w% R
{
d0 l2 @* Q9 L
floatfTotal;
/ v" W z1 I" ]
inti, j;
5 ]9 Y# M7 l2 `0 t
intndata = pData->m_nNumData;
# h1 Y5 m/ d1 v& z" F0 A
//float yy[5000][1];
4 ]; ^. C8 N5 u3 K) ~
for( i = nPeriod-1; i < pData->m_nNumData; i++)//
计算
nPeriod
周期的均线
,
数据从
nPeriod-1
开始有效
7 a' }4 f/ ]$ d. }$ `* a& @0 q. ?9 y
{
+ W3 K: p, y7 ?
fTotal= 0.0f;
; R7 o) f! ]4 F1 F7 [+ g
doublelngth=5.0;
0 c* U; a. }! P7 z% T
doublectemp=4.0;
3 c+ K/ r( x1 g- @ ?* u1 |
//float yy1[5000][1];
3 r2 S$ K7 H, Z3 _ K9 H6 n
for( j = 0; j < nPeriod; j++ ) //
累加
6 q# ]+ F7 u% d& M2 E, K2 R9 B# Y
{
/ R- p+ H* q0 X. h, j! {
fTotal= pData->m_pData
.m_fClose; // @@@@@@@ vc++ 2010 cl.exe
使
pData->m_pData[i-j].m_fClose
错误
" Z# ~' }/ b: b0 {+ s' O& w
}
- v. p/ R0 @* G1 N8 o0 ~
//pData->m_pResultBuf
= fTotal*1.03; //
平均
! Q& i j8 Q8 T
fTotal= cpParam3
;
$ w3 K# H# Q9 ]6 s
pData->m_pResultBuf
= fTotal*1.03; //
平均
) x$ ~: q. f. r/ H8 i% g1 l
//ctemp = (double) pData->m_pResultBuf
; // double & - - - >overload a float value , double * - - - > overload a pointer todouble
# p, k& y9 Y$ |) s9 f Z
//pData->m_pResultBuf
= (float) ppow10(ctemp,lngth); // float &- - - > overload a float value
# v) u* v$ k& e2 L8 ] l+ h# I8 B
pData->m_pResultBuf
=(float) ppow10( (double) pData->m_pResultBuf
,lngth); // float &- - - > overload a float value, (float) = overload
9 ^. [1 r* Z! V9 a
}
9 p2 Z1 L# \: P1 P/ }/ @- q4 ~+ z
returnnPeriod-1;
$ Q$ N+ \; p4 p# h# ^6 P
}
2 c( p- l2 ~! b4 A3 ?9 |2 Q4 y- {
}
0 A: {4 f d) A! g9 C0 A* f
return-1;
9 I2 ~" S7 C. l2 l- e6 ~/ Y
}
2 P- ^) y$ @& x8 e. l
//
计算均价
,2
个参数
,
参数
1
为待求均线的数据
,
参数
2
表示计算周期
; e+ P) D! v; w0 d7 ~% d
//
调用方法
:
5 }6 Y0 j% n/ J0 J) e# j
//"FOXFUNC@MYMAVAR"(CLOSE-OPEN,5)
% A. J+ l9 @+ P9 D. {
__declspec(dllexport)int WINAPI MYMAVAR(CALCINFO* pData)
8 d5 z3 b% q; V
{
# g% ?+ p' F) }8 w( _% p8 m
if(pData->m_pfParam1&& pData->m_pfParam2 && //
参数
1,2
有效
: |3 t/ C/ c- e$ r. [: G
pData->m_nParam1Start>=0&& //
参数
1
为序列数
1 p* u0 e/ V# @8 D, P2 O8 i; @
pData->m_pfParam3==NULL)//
有
2
个参数
7 ~$ T7 e5 }7 I/ z$ S
{
u$ _ {1 k, O0 C/ p& k# o
constfloat* pValue = pData->m_pfParam1; //
参数
1
6 W1 d1 G* d& V, a
intnFirst = pData->m_nParam1Start; //
有效值起始位
- _- s+ j5 C6 f9 C2 J& }! k0 V9 T
floatfParam = *pData->m_pfParam2; //
参数
2
4 \# i7 B$ ?. x
intnPeriod = (int)fParam;
: s+ P" |( |- {
if(nFirst >= 0 && nPeriod > 0 )
# H# ^5 O% _5 e7 m$ v" l1 K1 n, g# t
{
; _; G+ y1 i8 V( A
floatfTotal;
9 }8 r& e& h4 _! ^. R* N
inti, j;
/ Q" G' t) F8 z# r% I% R' [
for( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )
4 d" [2 \( g8 }, G/ N3 I; Y% }
{
' O5 b' l! X+ V4 u1 J6 ]
fTotal= 0.0f;
- f! g+ S3 w) @1 \
for( j=0; j < nPeriod; j++ ) //
累加
; G0 |) T+ d) i+ K
fTotal+= pValue[i-j];
- ~/ ^1 h( X- d: Y4 c/ {
pData->m_pResultBuf
= fTotal/nPeriod;//
平均
9 u5 e& T+ [$ N, C6 P" R. @2 |
}
0 S9 S# [0 F- ?0 Y% s
returnnFirst+nPeriod-1;
9 M; r2 O. m4 T3 h ]) z, n
}
$ P: r3 P( ^. P" l; a H
}
# J" D% N9 V7 g) V7 ~1 M% O
return-1;
0 I$ z- l' O* N* h/ t
}
5 e* }' g: K* Q) [0 q& w
//
计算多个序列的均值
,5
个参数
,
参数
1-4
为待求多个序列
,
参数
5
用于举例说明数值参数的用法,实际在此例中无需该参数
3 M$ S: Y1 G5 p* j; j& H' ^1 T* ]
/*
" f# K9 A/ w2 @" }, m
调用方法
:
/ O# X* v" b# s+ s
MA1:=MA(CLOSE,3);
6 [0 \7 ~- G- p# T0 s
MA2:=MA(CLOSE,6);
: Z* B+ ]. F- r' Z9 {; M
MA3:=MA(CLOSE,12);
' s. e5 _0 A$ ^; j
MA4:=MA(CLOSE,24);
* J% \8 \+ D: b) j X7 z5 v
MYBBI:"FOXFUNC@MYBBI"(MA1, MA2, MA3, MA4, 4);
5 P: q/ ^7 x- |5 d4 S8 a% _
*/
. s0 N# `: n @2 D4 Y
__declspec(dllexport)int WINAPI MYBBI(CALCINFO* pData)
! k. W1 ]' ~# w6 ?0 G
{
/ O) Z x( z+ U7 i7 X
if( pData->m_pCalcParam[0].m_nParamStart >= 0 &&
. B3 D- d4 k4 C& F+ s, r, X' Q
pData->m_pCalcParam[1].m_nParamStart>= 0 &&
$ v) b( N. l v. F; C; h8 d% C
pData->m_pCalcParam[2].m_nParamStart>= 0 &&
2 |+ Q1 f; ]3 q1 e8 [' M- n
pData->m_pCalcParam[3].m_nParamStart>= 0 ) //4
个序列都含有效数值
* u/ s: m: }9 Q0 n! @$ h
{
; e M2 l. E. [9 W$ }2 B% ^
//
计算返回的序列的第一个有效值位置
, y7 {4 m) x: s
intnFirst = pData->m_pCalcParam[2].m_nParamStart;//
已知返回的序列的第一个有效值位置与第
4
个序列一致
; g5 F/ [7 Y8 ~# O q; [
//
若不知,则
% R4 }) ]+ ^: S: H+ U
/*
' }' ]$ z3 H) M3 S9 @. n& S( ~6 X/ Z8 b
intnFirst = pData->m_pCalcParam[0].m_nParamStart;
9 X# K9 k) t: H7 P
if( nFirst < pData->m_pCalcParam[1].m_nParamStart )
, Z% T3 I$ F4 @2 x
nFirst= pData->m_pCalcParam[1].m_nParamStart;
3 O. c9 ~* o+ A- ?4 V" x6 k2 ]% \
if( nFirst < pData->m_pCalcParam[2].m_nParamStart )
8 h& E+ I+ e4 n8 l7 H, t- \
nFirst= pData->m_pCalcParam[2].m_nParamStart;
: `: a* l `8 t S
if( nFirst < pData->m_pCalcParam[3].m_nParamStart )
/ Q, ?% \. \) z$ u9 V
nFirst= pData->m_pCalcParam[3].m_nParamStart;
3 v: p, c& d/ ~9 a% {0 Z5 z1 _
*/
, b! E# ? l5 ~+ i! k, _
constfloat* pValue1 = pData->m_pCalcParam[0].m_pfParam;
# a2 p7 z" F% h1 ^$ J: x
constfloat* pValue2 = pData->m_pCalcParam[1].m_pfParam;
- Q9 K6 d% r* [, y0 c( v6 ?' T
constfloat* pValue3 = pData->m_pCalcParam[2].m_pfParam;
* G' o7 [1 ^: B9 j5 z( P
constfloat* pValue4 = pData->m_pCalcParam[3].m_pfParam;
# B- F1 r% _, K1 _
constfloat* pValue5 = pData->m_pCalcParam[4].m_pfParam;
, _( X/ U: b2 L4 ?( a
constfloat* pValue6 = pData->m_pCalcParam[5].m_pfParam;
H( N- K# `8 D- [
//const float* pValue1 = pData->m_pfParam1;
, e0 I% C( `6 K- D- t/ k
//const float* pValue2 = pData->m_pfParam2;
0 e6 X# K, [! ?. d- l( o6 `' v
//const float* pValue3 = pData->m_pfParam3;
8 @3 \+ n5 @. N3 C+ }
//int nNum = (int)(*pData->m_pfParam4);//
实际上该例中已知
nNum=4
,在此用于说明数值参数的用法
2 m, F3 I* G' m( i1 \
intnNum = (int)(pData->m_pCalcParam[6].m_fParam);//
实际上该例中已知
nNum=4
,在此用于说明数值参数的用法
* a# l0 r# [2 ^7 ]' ~6 W5 \
for(int i = nFirst; i < pData->m_nNumData; i++ )
. X. i; T4 O L# |, G( R
{
( A& t: O1 s7 {0 e, [5 G
pData->m_pResultBuf
=
& _* X# {: W3 c
//(pValue1
+ pValue2
+ pValue3
)/nNum;
C; L9 `! x# K1 v5 B8 G$ O
(pValue1
+ pValue2
+ pValue3
+ pValue4
+pValue5
+ pValue6
)/nNum;
2 M( ]: p4 p, c9 D$ |
}
% U4 j. z6 p. y; y, @$ G
returnnFirst;
5 H$ s( J: E0 ~
}
; O5 f p+ [* t4 A
return-1;
# U0 K3 h& f( ^/ D! N
}
; }' f5 ?1 {( N, r$ f2 q) I
/ l+ H& n# h' u. \& x
! @. y* \$ w) W V
1 L1 }8 |$ A. B. P
//////////////////////////////////////////////////////////////pow10.asm
, F2 C* ?3 d* `# v' p; L( F$ d7 G5 p
;*******************************************************
4 p5 g# O6 t1 c+ _
;* *
4 e5 L% `- r- ^- g
;* Delphi Run
Library *
" E4 O2 E8 s0 m9 j
;* *
# C6 k$ g$ q9 E) Z& Q# r9 k
;* Copyright (c) 1996,98 Inprise Corporation *
6 G" \, g. i. L2 B" _- N* R
;*--------------------------------------------------------------------------
& C/ n, J S+ g! U' ?4 A& t
;* To compile "tasm32 /ml pow10.asm" *
" }: V% m& `+ s" b0 Y
;*--------------------------------------------------------------------------
3 Y' l8 v; O/ l; {3 ~% ~1 ]
;*******************************************************
. Q2 M9 A, X- u- `/ v2 E2 h
.386
/ w& `# n4 [: ~; m
;.MODEL flat,c (error must be in segement block must have segment
+ a+ m5 a1 g2 o
;!!!!!11 important if ',c' is not used , must use 'public _ppow10, and'_ppow10 proc'
: u& ]' ~0 G( m/ [6 P$ f6 R
;!!!!!11 important if .MODEL flat,c is not used , must use ;_TEXTSEGMENT WORD PUBLIC
" J7 z% |8 C) }- c; ~' g' e
;'CODE'..._TEXT ENDS and must use 'public _ppow10 and '_ppow10 proc'
8 V0 S+ F1 V; S0 K! U5 z* }
.MODELflat,c ; just use .code, no need for segment,!!!!!11 important if',c' is used , must use 'public ppow10, and 'ppow10 proc'
: a: C4 m3 P4 |2 D% `9 q
;ppow10 PROTO,aVal:PTR REAL8, bVal:PTR REAL8
3 G7 S) S5 f- r7 h3 j# v0 A
;includeE:\Vsource\masm32\INCLUDE\windows.inc
% Q. O7 n4 t: {, G
;includeE:\Vsource\masm32\INCLUDE\user32.inc
: v1 \( g6 p" P0 b% \ K: L9 Y3 n
;includeE:\Vsource\masm32\INCLUDE\kernel32.inc
" C, m: m# k! Q
PUBLICppow10
" E4 J# a8 O" M/ w- c) W
.CODE
6 }/ `& O7 e2 G: C, I" Q
;DllEntryproc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
. ~$ d% w2 P5 u+ t
;.if reason==DLL_PROCESS_ATTACH
& e, ?& K. ?) P( q Y
;invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK
- S a2 k5 t+ m. W) n6 q `
;.elseif reason==DLL_PROCESS_DETACH
2 [- y0 {; t0 i9 ~) O/ o" N% j
;invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK
" b5 |, F5 g$ v! u
;.elseif reason==DLL_THREAD_ATTACH
6 t+ c* @" m4 z: n1 \$ O
;invoke MessageBox,NULL,addr ThreadCreated,addr AppName,MB_OK
) _+ W8 c4 }9 m* o w, i
;.else ; DLL_THREAD_DETACH
* M! N: E4 v- A; v- l# W
;invoke MessageBox,NULL,addr ThreadDestroyed,addr AppName,MB_OK
- m0 ?- z' g, l i/ x" u/ I' h
;.endif
$ H& k( x' P- Z# z3 ?# a% T
;mov eax,TRUE
6 F* ^* w8 q9 G7 f# _* h* l
;ret
2 G1 F# W. y3 L
;DllEntryEndp
, i$ \! _3 V) c8 j* }7 W
;FUNCTION _Ppow10( double val, double pow: ) : Extended;
: m! Z% p0 b% @5 Q( l8 z8 b
;_TEXTSEGMENT WORD PUBLIC 'CODE'
, d! s4 c* k0 |/ L& z8 H* W) M4 R
;ppow10 PROC,aVal:PTR REAL8, bVal:PTR REAL8
: @- e6 Z1 `3 |- W$ k$ |: D
;ppow10 PROC,aVal:* Qword, bVal:Qword
3 n. V1 Z4 ~8 D. b b+ ]
ppow10PROC near
' E; s- K. W$ U7 d( W$ r1 R
XUEQU 8 ; for eip & ebp
" K5 V0 V, @; k, y
XDEQU 0 ; for edi, esi, ebx, ecx, edx
; H7 E4 o; F8 ?& `
fp_powerEQU QWORD PTR [ebp+XU+8]
9 [7 B2 W& q% P N3 b4 O
fp_valEQU QWORD PTR [ebp+XU]
4 @6 t5 ?& X; z5 s
valEQU QWORD PTR [eBP-XD-8] ; USE STACK
M/ m. Z: E2 z# I7 I3 U
powerEQU QWORD PTR [eBP-XD-16] ; USE STACK
& m! Q2 ?9 h0 z4 v0 {) @5 t
pow10EQU QWORD PTR [eBP-XD-24] ; USE STACK
4 B$ j# O* C2 _% E
FPower10:
$ B: K8 }2 g& F( o0 c6 i" \
pushebp
' v; N4 ]2 W, @/ a3 c
movebp,esp
3 a( ^0 Z( ~4 |6 Y6 b; U
;push edi
; E0 P" G& ^3 v! r1 L, ]7 O
;push esi
& y1 ~% W$ c [8 O w
;push eax
0 s n5 H/ a, U5 N/ `: }
;push edx
* R* f. U( g, A& Z7 z
subesp,24
) S5 D! ^3 T$ e
FINIT
. l6 P8 U. C! f8 o4 S( o8 X
fldz
$ C8 z( H; \; R# M
fstval
. g t( q3 i6 ?' Y. R( t
fstpower
9 D! j3 K/ O* I# a0 b
fstppow10
8 N6 x& o6 }9 Y* g
MOV EAX,8 MOV EDX,8
; fldpi
% r. B7 y8 \* C$ _( Z! `7 m* T
fld fp_val ;st(0)=val
; fld aVal;st(0)=val
: [. E% V4 W, y4 O- m% ^
fstval
' p4 M! f& v6 i; `
;fld Arg2 ;st(0)=power
( P d4 e4 Q6 G! g( Z& y' p4 [7 {) s: S1 k
;fstp power
+ w; x/ U( A5 {: f# [& {
;fld val ;st(0)=val
/ P& s. v' k5 A4 r4 p5 ^$ w, F
;fmul val ;st(0)=val*val
1 c8 \- @9 P( |: ^5 {
;fmul val ;st(0)=val*va*val
4 _3 N( t. o- B3 O
;fadd st,st(0)
7 m' j0 R; E2 J$ Z
;fmul qword ptr [ebp+16] ;st(0)=power
" r# g; x6 a. P4 V% u8 I J: X' Z
;fadd st,st(0)
1 [+ i# S* Y5 u, g
;fwait
9 i- y. J5 R1 f: K& K& `$ Z# S v
addesp,24
, L& o5 Y! ^: k
;pop edx
6 D( r2 c7 p N {
;pop eax
) A+ C/ \1 i ?9 ?& N& `! ? L+ C
;pop esi
& O- F( m1 ^$ {4 Z
;pop edi
9 v/ }/ b" X% w# g6 t; r' ? K& O
movesp,ebp
3 \2 `6 y. I4 Z; Z
popebp
; r- ~. z4 P0 H H/ `) [# P
;leave ; @@@@@@ important don't use leave in vc++ 2010
: [0 p- o/ G( u, a3 g5 B5 ~( }1 ^
RET;return value = st(0)
- h8 d* @6 t2 D5 T' `& _/ u
ppow10ENDP
& U3 K& R- g7 H8 A# Q
;_TEXTENDS
7 L; z6 q z* t. E, m- N8 N$ h
END
( l9 w3 w# v3 A' d: H8 |8 l
;END DllEntry
欢迎光临 【阳光飞狐__与财富同行】 (http://bbs.88158.cn/)
Powered by Discuz! X3.2