annotate doc/disas_examples/x86.fastcall_ms.disas @ 470:79e76734bb5c

"
author Tassilo Philipp
date Mon, 07 Feb 2022 22:41:32 +0100
parents 984e6652b975
children 585dcb68f55d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
469
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
1 ; #include <stdlib.h>
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
2 ;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
3 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
4 ; {
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
5 ; }
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
6 ;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
7 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
8 ; {
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
9 ; /* use some local data */
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
10 ; *(char*)alloca(220) = 'L';
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
11 ; leaf_call(b, c, d, e, f, g, h);
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
12 ; }
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
13 ;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
14 ; int main()
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
15 ; {
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
16 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
17 ; return 0;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
18 ; }
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
19
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
20
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
21
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
22 ; output from godbolt compiler explorer w/ msvc 19.0 (/Gr for fastcall)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
23
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
24 _b$ = -8
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
25 _c$ = -4
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
26 @leaf_call@28 PROC
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
27 push ebp
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
28 mov ebp, esp
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
29 sub esp, 8
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
30 mov DWORD PTR _c$[ebp], edx
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
31 mov DWORD PTR _b$[ebp], ecx
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
32 mov esp, ebp
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
33 pop ebp
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
34 ret 20
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
35 @leaf_call@28 ENDP
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
36
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
37 _a$ = -8
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
38 _b$ = -4
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
39 _c$ = 8
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
40 _d$ = 12
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
41 _e$ = 16
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
42 _f$ = 20
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
43 _g$ = 24
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
44 _h$ = 28
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
45 @nonleaf_call@32 PROC
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
46 push ebp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
47 mov ebp, esp ; | prolog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
48 sub esp, 8 ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
49 mov DWORD PTR _b$[ebp], edx ; in arg 1 -> local area on stack
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
50 mov DWORD PTR _a$[ebp], ecx ; in arg 0 -> local area on stack
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
51 mov ecx, 220 ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
52 call @alloca@4 ; | call alloca(220) (ecx = arg)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
53 mov BYTE PTR [eax], 76 ; 'L' -> alloca()'d space (pointed to by alloca's retval in eax)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
54 mov eax, DWORD PTR _h$[ebp] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
55 push eax ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
56 mov ecx, DWORD PTR _g$[ebp] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
57 push ecx ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
58 mov edx, DWORD PTR _f$[ebp] ; | read in args 3-7 from prev frame's param area, and ...
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
59 push edx ; | ... "push" onto stack as arg 2-6
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
60 mov eax, DWORD PTR _e$[ebp] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
61 push eax ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
62 mov ecx, DWORD PTR _d$[ebp] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
63 push ecx ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
64 mov edx, DWORD PTR _c$[ebp] ; arg 1 | read from prev frame's param
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
65 mov ecx, DWORD PTR _b$[ebp] ; arg 0 | area and put in regs
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
66 call @leaf_call@28 ; push return address and call
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
67 mov esp, ebp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
68 pop ebp ; | epilog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
69 ret 24 ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
70 @nonleaf_call@32 ENDP
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
71
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
72 _main PROC
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
73 push ebp ; | prolog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
74 mov ebp, esp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
75 push 7 ; arg 7
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
76 push 6 ; arg 6
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
77 push 5 ; arg 5
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
78 push 4 ; arg 4
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
79 push 3 ; arg 3
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
80 push 2 ; arg 2
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
81 mov edx, 1 ; arg 1 (via reg)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
82 xor ecx, ecx ; arg 0 (via reg)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
83 call @nonleaf_call@32 ; push return address and call
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
84 xor eax, eax ; return value
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
85 pop ebp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
86 ret 0 ; | epilog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
87 _main ENDP
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
88
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
89
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
90
470
Tassilo Philipp
parents: 469
diff changeset
91 ; ---------- structs by value (arg and return value), struct arg not fitting in regs ---------->
469
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
92 ;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
93 ; struct A { int x; short y; char z; long long t; };
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
94 ;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
95 ; struct A leaf_call(struct A a, short b, long long c, char d, int e, int f, int g, long long h)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
96 ; {
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
97 ; a.x += 1;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
98 ; return a;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
99 ; }
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
100 ;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
101 ; int main()
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
102 ; {
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
103 ; struct A a ={9, 99, 23, 12LL};
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
104 ; leaf_call(a, 1, 2, 3, 4, 5, 6, 7LL);
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
105 ; return 0;
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
106 ; }
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
107
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
108
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
109
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
110 ; output from godbolt compiler explorer w/ msvc 19.0 (/Gr for fastcall)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
111
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
112 _b$ = -8
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
113 _d$ = -4
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
114 $T1 = 8
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
115 _a$ = 12
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
116 _c$ = 28
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
117 _e$ = 36
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
118 _f$ = 40
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
119 _g$ = 44
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
120 _h$ = 48
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
121 @leaf_call@52 PROC
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
122 push ebp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
123 mov ebp, esp ; | prolog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
124 sub esp, 8 ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
125 mov BYTE PTR _d$[ebp], dl ; in arg 3 -> local area on stack
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
126 mov WORD PTR _b$[ebp], cx ; in arg 1 -> local area on stack
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
127 mov eax, DWORD PTR _a$[ebp] ; \
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
128 add eax, 1 ; | get struct's x (from stack args), add 1 and write back
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
129 mov DWORD PTR _a$[ebp], eax ; /
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
130 mov ecx, DWORD PTR $T1[ebp] ; get ptr to retval struct passed as hidden arg (+8 to skip retval and saved ebp)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
131 mov edx, DWORD PTR _a$[ebp] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
132 mov DWORD PTR [ecx], edx ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
133 mov eax, DWORD PTR _a$[ebp+4] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
134 mov DWORD PTR [ecx+4], eax ; | copy modified (b/c of x+=1) struct arg to space of retval
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
135 mov edx, DWORD PTR _a$[ebp+8] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
136 mov DWORD PTR [ecx+8], edx ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
137 mov eax, DWORD PTR _a$[ebp+12] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
138 mov DWORD PTR [ecx+12], eax ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
139 mov eax, DWORD PTR $T1[ebp] ; return value (= ptr to struct that was passed-in as hidden arg)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
140 mov esp, ebp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
141 pop ebp ; | epilog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
142 ret 48 ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
143 @leaf_call@52 ENDP
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
144
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
145 $T1 = -32
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
146 _a$ = -16
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
147 _main PROC
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
148 push ebp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
149 mov ebp, esp ; | prolog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
150 sub esp, 32 ; / 32 = 16b local area for struct + 16b space used for retval struct
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
151 mov DWORD PTR _a$[ebp], 9 ; \ int x
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
152 mov eax, 99 ; | |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
153 mov WORD PTR _a$[ebp+4], ax ; | struct values (local area) | short y
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
154 mov BYTE PTR _a$[ebp+6], 23 ; | char z
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
155 mov DWORD PTR _a$[ebp+8], 12 ; | |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
156 mov DWORD PTR _a$[ebp+12], 0 ; / | long long t
470
Tassilo Philipp
parents: 469
diff changeset
157 push 0 ; \
469
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
158 push 7 ; | arg 7
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
159 push 6 ; arg 6
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
160 push 5 ; arg 5
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
161 push 4 ; arg 4
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
162 push 0 ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
163 push 2 ; / arg 2 (via stack b/c not first arg and > 32 bits)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
164 sub esp, 16 ; \
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
165 mov ecx, esp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
166 mov edx, DWORD PTR _a$[ebp] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
167 mov DWORD PTR [ecx], edx ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
168 mov eax, DWORD PTR _a$[ebp+4] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
169 mov DWORD PTR [ecx+4], eax ; | arg 0 (struct), "pushed" onto stack (fetched from local area)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
170 mov edx, DWORD PTR _a$[ebp+8] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
171 mov DWORD PTR [ecx+8], edx ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
172 mov eax, DWORD PTR _a$[ebp+12] ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
173 mov DWORD PTR [ecx+12], eax ; /
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
174 lea ecx, DWORD PTR $T1[ebp] ; \ ptr to space used for struct retval (pushed as hidden first arg)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
175 push ecx ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
176 mov dl, 3 ; arg 3 (via reg)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
177 mov ecx, 1 ; arg 1 (via reg)
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
178 call @leaf_call@52 ; push return address and call
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
179 xor eax, eax ; return value
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
180 mov esp, ebp ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
181 pop ebp ; | epilog
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
182 ret 0 ; |
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
183 _main ENDP
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
184
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
185
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
186
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
187 ; vim: ft=asm
984e6652b975 some x86 disas examples, for completion but also while researching struct by val passing on non-x64
Tassilo Philipp
parents:
diff changeset
188