000
02.05.2003, 11:37 Uhr
~Jack37a
Gast
|
Hi !
Ich habe noch nie ein Assembler-Programm in VC++ implementiert. Nun bin ich auf ein Programm gestoßen, welches ich gerne unter VC++ ausprobieren würde. Ich vermute, es ist eine Funktion geschrieben in Assembler. Aber wie rufe ich eine Funktion in Assembler auf ? Vielleicht kann mir jemand von euch helfen.
;extern "C" long double _cdecl exp (double x) _asm { _exp PROC NEAR PUBLIC _exp FLDL2E FLD QWORD PTR [ESP+4] ; x FMUL ; z = x*log2(e) FIST DWORD PTR [ESP+4] ; round(z) SUB ESP, 12 MOV DWORD PTR [ESP], 0 MOV DWORD PTR [ESP+4], 80000000H FISUB DWORD PTR [ESP+16] ; z - round(z) MOV EAX, [ESP+16] ADD EAX,3FFFH MOV [ESP+8],EAX JLE SHORT UNDERFLOW CMP EAX,8000H JGE SHORT OVERFLOW F2XM1 FLD1 FADD ; 2^(z-round(z)) FLD TBYTE PTR [ESP] ; 2^(round(z)) ADD ESP,12 FMUL ; 2^z = e^x RET
UNDERFLOW: FSTP ST FLDZ ; return 0 ADD ESP,12 RET
OVERFLOW: PUSH 07F800000H ; +infinity FSTP ST FLD DWORD PTR [ESP] ; return infinity ADD ESP,16 RET
_exp ENDP |