| 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 | 
|---|