An arbitrarily complex procedure and invoke, done in 32-bit code for convenience.
;========================================================================================
include \masm32\include\masm32rt.inc
.686
;========================================================================================
.data
dd1 dd 12345678h
r8 REAL8 1234.56789
dq1 dq 1234567812345678h
rect RECT <1,2,3,4>
.code
;========================================================================================
proc1 proc uses gs ebx edi esi param1:DWORD, param2:REAL8, param3:QWORD, param4:RECT
LOCAL local1:DWORD
LOCAL local2:REAL8
LOCAL local3:QWORD
LOCAL local4:RECT
LOCAL local5[4]:DWORD
push param1
pop local1
fld param2
fstp local2
fild param3
fistp local3
push param4.left
pop local4.left
push param4.top
pop local4.top
push param4.right
pop local4.right
push param4.bottom
pop local4.bottom
nop
printf("%Xh\n",local1)
printf("%f\n",local2)
printf("%I64Xh\n",local3)
printf("%d\t%d\t%d\t%d\n\n",local4.left,local4.top,local4.right,local4.bottom)
nop
mov eax, param1
mov local5, eax
mov local5[4], eax
mov local5[8], eax
mov local5[12], eax
xor eax, eax
add eax, local5
add eax, local5[4]
add eax, local5[8]
add eax, local5[12]
ret
proc1 endp
;========================================================================================
start:
;========================================================================================
mov eax, DWORD PTR dq1
mov edx, DWORD PTR dq1+4
invoke proc1, dd1, r8, edx::eax, rect
mov ecx, 4
cdq
div ecx
printf("%Xh\n\n",eax)
inkey
exit
;========================================================================================
end start
12345678h
1234.567890
1234567812345678h
1 2 3 4
12345678h
00401000 $ 55 PUSH EBP
00401001 . 8BEC MOV EBP,ESP
00401003 . 83C4 CC ADD ESP,-34
00401006 . 0FA8 PUSH GS
00401008 . 53 PUSH EBX
00401009 . 57 PUSH EDI
0040100A . 56 PUSH ESI
0040100B . FF75 08 PUSH DWORD PTR SS:[EBP+8]
0040100E . 8F45 FC POP DWORD PTR SS:[EBP-4]
00401011 . DD45 0C FLD QWORD PTR SS:[EBP+C]
00401014 . DD5D F4 FSTP QWORD PTR SS:[EBP-C]
00401017 . DF6D 14 FILD QWORD PTR SS:[EBP+14]
0040101A . DF7D EC FISTP QWORD PTR SS:[EBP-14]
0040101D . FF75 1C PUSH DWORD PTR SS:[EBP+1C]
00401020 . 8F45 DC POP DWORD PTR SS:[EBP-24]
00401023 . FF75 20 PUSH DWORD PTR SS:[EBP+20]
00401026 . 8F45 E0 POP DWORD PTR SS:[EBP-20]
00401029 . FF75 24 PUSH DWORD PTR SS:[EBP+24]
0040102C . 8F45 E4 POP DWORD PTR SS:[EBP-1C]
0040102F . FF75 28 PUSH DWORD PTR SS:[EBP+28]
00401032 . 8F45 E8 POP DWORD PTR SS:[EBP-18]
00401035 . 90 NOP
00401036 . FF75 FC PUSH DWORD PTR SS:[EBP-4] ; /<%X>
00401039 . 68 24304000 PUSH test.00403024 ; |format = "%Xh
"
0040103E . FF15 20204000 CALL DWORD PTR DS:[<&msvcrt.printf>] ; \printf
00401044 . 83C4 08 ADD ESP,8
00401047 . FF75 F8 PUSH DWORD PTR SS:[EBP-8]
0040104A . FF75 F4 PUSH DWORD PTR SS:[EBP-C] ; /<%f>
0040104D . 68 2C304000 PUSH test.0040302C ; |format = "%f
"
00401052 . FF15 20204000 CALL DWORD PTR DS:[<&msvcrt.printf>] ; \printf
00401058 . 83C4 0C ADD ESP,0C
0040105B . FF75 F0 PUSH DWORD PTR SS:[EBP-10]
0040105E . FF75 EC PUSH DWORD PTR SS:[EBP-14] ; |
00401061 . 68 34304000 PUSH test.00403034 ; |format = "%I64Xh
"
00401066 . FF15 20204000 CALL DWORD PTR DS:[<&msvcrt.printf>] ; \printf
0040106C . 83C4 0C ADD ESP,0C
0040106F . FF75 E8 PUSH DWORD PTR SS:[EBP-18] ; /<%d>
00401072 . FF75 E4 PUSH DWORD PTR SS:[EBP-1C] ; |<%d>
00401075 . FF75 E0 PUSH DWORD PTR SS:[EBP-20] ; |<%d>
00401078 . FF75 DC PUSH DWORD PTR SS:[EBP-24] ; |<%d>
0040107B . 68 40304000 PUSH test.00403040 ; |format = "%d %d %d %d
"
00401080 . FF15 20204000 CALL DWORD PTR DS:[<&msvcrt.printf>] ; \printf
00401086 . 83C4 14 ADD ESP,14
00401089 . 90 NOP
0040108A . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0040108D . 8945 CC MOV DWORD PTR SS:[EBP-34],EAX
00401090 . 8945 D0 MOV DWORD PTR SS:[EBP-30],EAX
00401093 . 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX
00401096 . 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX
00401099 . 33C0 XOR EAX,EAX
0040109B . 0345 CC ADD EAX,DWORD PTR SS:[EBP-34]
0040109E . 0345 D0 ADD EAX,DWORD PTR SS:[EBP-30]
004010A1 . 0345 D4 ADD EAX,DWORD PTR SS:[EBP-2C]
004010A4 . 0345 D8 ADD EAX,DWORD PTR SS:[EBP-28]
004010A7 . 5E POP ESI
004010A8 . 5F POP EDI
004010A9 . 5B POP EBX
004010AA . 0FA9 POP GS ; Modification of segment register
004010AC . C9 LEAVE
004010AD . C2 2400 RETN 24
004010B0 >/$ A1 0C304000 MOV EAX,DWORD PTR DS:[40300C]
004010B5 |. 8B15 10304000 MOV EDX,DWORD PTR DS:[403010]
004010BB |. FF35 20304000 PUSH DWORD PTR DS:[403020]
004010C1 |. FF35 1C304000 PUSH DWORD PTR DS:[40301C]
004010C7 |. FF35 18304000 PUSH DWORD PTR DS:[403018]
004010CD |. FF35 14304000 PUSH DWORD PTR DS:[403014]
004010D3 |. 52 PUSH EDX
004010D4 |. 50 PUSH EAX
004010D5 |. FF35 08304000 PUSH DWORD PTR DS:[403008]
004010DB |. FF35 04304000 PUSH DWORD PTR DS:[403004]
004010E1 |. FF35 00304000 PUSH DWORD PTR DS:[403000]
004010E7 |. E8 14FFFFFF CALL test.00401000
004010EC |. B9 04000000 MOV ECX,4
004010F1 |. 99 CDQ
004010F2 |. F7F1 DIV ECX