[5845] | 1 | ; $Id: asmutil.asm,v 1.2 2001-05-31 07:14:00 sandervl Exp $
|
---|
[5840] | 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
|
---|
[5845] | 47 | sub eax, 4
|
---|
[5840] | 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
|
---|
[5845] | 74 | sub eax, 4
|
---|
[5840] | 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
|
---|