1 | ; $Id: asmutil.asm,v 1.2 2001-05-31 07:14:00 sandervl Exp $
|
---|
2 |
|
---|
3 | ;
|
---|
4 | ; asmutil.asm utility functions for typelib::invoke
|
---|
5 | ;
|
---|
6 | ; Project Odin Software License can be found in LICENSE.TXT
|
---|
7 | ;
|
---|
8 |
|
---|
9 | NAME asmutil
|
---|
10 | .586p
|
---|
11 | .MMX
|
---|
12 |
|
---|
13 | CODE32 SEGMENT DWORD USE32 PUBLIC 'CODE'
|
---|
14 | CODE32 ENDS
|
---|
15 | DATA32 SEGMENT DWORD USE32 PUBLIC 'DATA'
|
---|
16 | DATA32 ENDS
|
---|
17 | CONST32 SEGMENT DWORD USE32 PUBLIC 'CONST'
|
---|
18 | CONST32 ENDS
|
---|
19 | BSS32 SEGMENT DWORD USE32 PUBLIC 'BSS'
|
---|
20 | BSS32 ENDS
|
---|
21 | DGROUP GROUP CONST32, BSS32, DATA32
|
---|
22 | ASSUME CS:FLAT, DS:FLAT, SS:FLAT, ES:FLAT
|
---|
23 | DATA32 SEGMENT
|
---|
24 | DATA32 ENDS
|
---|
25 | BSS32 SEGMENT
|
---|
26 | BSS32 ENDS
|
---|
27 | CONST32 SEGMENT
|
---|
28 | CONST32 ENDS
|
---|
29 |
|
---|
30 |
|
---|
31 | CODE32 SEGMENT
|
---|
32 |
|
---|
33 | PUBLIC _invokeStdCallDouble
|
---|
34 | ;double CDECL invokeStdCallDouble(PVOID function, int paramsize, PVOID pStack);
|
---|
35 | _invokeStdCallDouble PROC NEAR
|
---|
36 | push ebp
|
---|
37 | mov ebp, esp
|
---|
38 | push ecx
|
---|
39 | push ebx
|
---|
40 |
|
---|
41 | mov eax, dword ptr [ebp+16] ;pStack
|
---|
42 | mov ecx, dword ptr [ebp+12] ; paramsize (in dwords)
|
---|
43 |
|
---|
44 | pushparam:
|
---|
45 | mov ebx, dword ptr [eax]
|
---|
46 | push ebx
|
---|
47 | sub eax, 4
|
---|
48 |
|
---|
49 | dec ecx
|
---|
50 | jnz pushparam
|
---|
51 |
|
---|
52 | call dword ptr [ebp+8] ;call function
|
---|
53 |
|
---|
54 | pop ebx
|
---|
55 | pop ecx
|
---|
56 | pop ebp
|
---|
57 | ret
|
---|
58 | _invokeStdCallDouble ENDP
|
---|
59 |
|
---|
60 | PUBLIC _invokeStdCallDword
|
---|
61 | ;DWORD CDECL invokeStdCallDword(PVOID function, int paramsize, PVOID pStack);
|
---|
62 | _invokeStdCallDword PROC NEAR
|
---|
63 | push ebp
|
---|
64 | mov ebp, esp
|
---|
65 | push ecx
|
---|
66 | push ebx
|
---|
67 |
|
---|
68 | mov eax, dword ptr [ebp+16] ;pStack
|
---|
69 | mov ecx, dword ptr [ebp+12] ; paramsize (in dwords)
|
---|
70 |
|
---|
71 | pushparam:
|
---|
72 | mov ebx, dword ptr [eax]
|
---|
73 | push ebx
|
---|
74 | sub eax, 4
|
---|
75 |
|
---|
76 | dec ecx
|
---|
77 | jnz pushparam
|
---|
78 |
|
---|
79 | call dword ptr [ebp+8] ;call function
|
---|
80 |
|
---|
81 | pop ebx
|
---|
82 | pop ecx
|
---|
83 | pop ebp
|
---|
84 | ret
|
---|
85 | _invokeStdCallDword ENDP
|
---|
86 |
|
---|
87 | CODE32 ENDS
|
---|
88 |
|
---|
89 | END
|
---|