Mercurial > pub > dyncall > dyncall
annotate doc/disas_examples/x64.win.disas @ 468:79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
author | Tassilo Philipp |
---|---|
date | Sun, 06 Feb 2022 17:22:59 +0100 |
parents | c0390dc85a07 |
children | 75cb8f79d725 |
rev | line source |
---|---|
468
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
1 ; void leaf_call(int b, int c, int d, int e, int f, int g, int h) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
2 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
3 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
4 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
5 ; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
6 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
7 ; /* use some local data */ |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
8 ; char x[10] = { 'L' }; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
9 ; leaf_call(b, c, d, e, f, g, h); |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
10 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
11 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
12 ; int main() |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
13 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
14 ; nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7); |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
15 ; return 0; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
16 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
17 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
18 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
19 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
20 ; output from godbolt compiler explorer w/ msvc 19.0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
21 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
22 leaf_call PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
23 mov DWORD PTR [rsp+32], r9d |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
24 mov DWORD PTR [rsp+24], r8d |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
25 mov DWORD PTR [rsp+16], edx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
26 mov DWORD PTR [rsp+8], ecx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
27 ret 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
28 leaf_call ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
29 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
30 x$ = 64 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
31 b$ = 104 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
32 c$ = 112 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
33 d$ = 120 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
34 e$ = 128 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
35 f$ = 136 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
36 g$ = 144 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
37 h$ = 152 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
38 nonleaf_call PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
39 mov DWORD PTR [rsp+32], r9d ; | | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
40 mov DWORD PTR [rsp+24], r8d ; | | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
41 mov DWORD PTR [rsp+16], edx ; | | spill |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
42 mov DWORD PTR [rsp+8], ecx ; | | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
43 push rdi ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
44 sub rsp, 80 ; | prolog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
45 mov BYTE PTR x$[rsp], 76 ; 'L' -> local area (of local array's space) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
46 lea rax, QWORD PTR x$[rsp+1] ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
47 mov rdi, rax ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
48 xor eax, eax ; | zero-init rest of local array's space |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
49 mov ecx, 9 ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
50 rep stosb ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
51 mov eax, DWORD PTR h$[rsp] ; arg 6 (fetched from caller's frame param area), and ... |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
52 mov DWORD PTR [rsp+48], eax ; ... "pushed" onto stack |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
53 mov eax, DWORD PTR g$[rsp] ; arg 5 (fetched from caller's frame param area), and ... |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
54 mov DWORD PTR [rsp+40], eax ; ... "pushed" onto stack |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
55 mov eax, DWORD PTR f$[rsp] ; arg 4 (fetched from caller's frame param area), and ... |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
56 mov DWORD PTR [rsp+32], eax ; ... "pushed" onto stack |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
57 mov r9d, DWORD PTR e$[rsp] ; arg 3 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
58 mov r8d, DWORD PTR d$[rsp] ; arg 2 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
59 mov edx, DWORD PTR c$[rsp] ; arg 1 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
60 mov ecx, DWORD PTR b$[rsp] ; arg 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
61 call leaf_call ; push return addr and call |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
62 add rsp, 80 ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
63 pop rdi ; | epilog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
64 ret 0 ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
65 nonleaf_call ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
66 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
67 main PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
68 sub rsp, 72 ; prolog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
69 mov DWORD PTR [rsp+56], 7 ; "push" arg 7 onto stack |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
70 mov DWORD PTR [rsp+48], 6 ; "push" arg 6 onto stack |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
71 mov DWORD PTR [rsp+40], 5 ; "push" arg 5 onto stack |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
72 mov DWORD PTR [rsp+32], 4 ; "push" arg 4 onto stack |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
73 mov r9d, 3 ; arg 3 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
74 mov r8d, 2 ; arg 2 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
75 mov edx, 1 ; arg 1 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
76 xor ecx, ecx ; arg 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
77 call nonleaf_call ; push return addr and call |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
78 xor eax, eax ; return value |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
79 add rsp, 72 ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
80 ret 0 ; | epilog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
81 main ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
82 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
83 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
84 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
85 ; ---------- structs by value, struct in first call on reg arg boundary ----------> |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
86 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
87 ; struct A { int i, j; long long l; }; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
88 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
89 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
90 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
91 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
92 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
93 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
94 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
95 ; /* use some local data */ |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
96 ; char x[220] = { 'L' }; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
97 ; leaf_call(b, c, d, e, f, g, h); |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
98 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
99 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
100 ; int main() |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
101 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
102 ; struct A a = {5, 6, 7ll}; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
103 ; nonleaf_call(0, 1, 2, 3, 4, a, 8, 9); |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
104 ; return 0; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
105 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
106 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
107 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
108 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
109 ; output from godbolt compiler explorer w/ msvc 19.0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
110 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
111 leaf_call PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
112 mov DWORD PTR [rsp+32], r9d |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
113 mov DWORD PTR [rsp+24], r8d |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
114 mov DWORD PTR [rsp+16], edx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
115 mov DWORD PTR [rsp+8], ecx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
116 ret 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
117 leaf_call ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
118 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
119 $T1 = 64 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
120 x$ = 80 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
121 b$ = 344 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
122 c$ = 352 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
123 d$ = 360 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
124 e$ = 368 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
125 f$ = 376 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
126 g$ = 384 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
127 h$ = 392 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
128 nonleaf_call PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
129 mov DWORD PTR [rsp+32], r9d |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
130 mov DWORD PTR [rsp+24], r8d |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
131 mov DWORD PTR [rsp+16], edx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
132 mov DWORD PTR [rsp+8], ecx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
133 push rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
134 push rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
135 sub rsp, 312 ; 00000138H |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
136 mov BYTE PTR x$[rsp], 76 ; 0000004cH |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
137 lea rax, QWORD PTR x$[rsp+1] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
138 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
139 xor eax, eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
140 mov ecx, 219 ; 000000dbH |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
141 rep stosb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
142 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
143 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
144 mov rsi, QWORD PTR f$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
145 mov ecx, 16 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
146 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
147 mov eax, DWORD PTR h$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
148 mov DWORD PTR [rsp+48], eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
149 mov eax, DWORD PTR g$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
150 mov DWORD PTR [rsp+40], eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
151 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
152 mov QWORD PTR [rsp+32], rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
153 mov r9d, DWORD PTR e$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
154 mov r8d, DWORD PTR d$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
155 mov edx, DWORD PTR c$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
156 mov ecx, DWORD PTR b$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
157 call leaf_call |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
158 add rsp, 312 ; 00000138H |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
159 pop rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
160 pop rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
161 ret 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
162 nonleaf_call ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
163 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
164 a$ = 64 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
165 $T1 = 80 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
166 main PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
167 push rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
168 push rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
169 sub rsp, 104 ; 00000068H |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
170 mov DWORD PTR a$[rsp], 5 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
171 mov DWORD PTR a$[rsp+4], 6 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
172 mov QWORD PTR a$[rsp+8], 7 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
173 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
174 lea rcx, QWORD PTR a$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
175 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
176 mov rsi, rcx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
177 mov ecx, 16 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
178 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
179 mov DWORD PTR [rsp+56], 9 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
180 mov DWORD PTR [rsp+48], 8 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
181 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
182 mov QWORD PTR [rsp+40], rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
183 mov DWORD PTR [rsp+32], 4 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
184 mov r9d, 3 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
185 mov r8d, 2 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
186 mov edx, 1 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
187 xor ecx, ecx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
188 call nonleaf_call |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
189 xor eax, eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
190 add rsp, 104 ; 00000068H |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
191 pop rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
192 pop rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
193 ret 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
194 main ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
195 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
196 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
197 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
198 ; ---------- structs by value, complex example (multiple structs, partly passed via regs) ----------> |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
199 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
200 ; struct A { int i, j; float f; }; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
201 ; struct B { double d; long long l; }; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
202 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
203 ; void leaf_call(int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
204 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
205 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
206 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
207 ; void nonleaf_call(int a, int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
208 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
209 ; /* use some local data */ |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
210 ; char x[220] = { 'L' }; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
211 ; leaf_call(b, c, d, e, f, g, h, i, j); |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
212 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
213 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
214 ; int main() |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
215 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
216 ; struct A a = {2, 3, 4.f}; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
217 ; struct B b = {5., 6ll}; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
218 ; struct A c = {9, 10, 11.f}; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
219 ; struct B d = {12., 13ll}; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
220 ; nonleaf_call(0, 1, a, b, 7, 8, c, d, 14, 15); |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
221 ; return 0; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
222 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
223 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
224 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
225 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
226 ; output from godbolt compiler explorer w/ msvc 19.0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
227 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
228 __real@41300000 DD 041300000r ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
229 __real@40800000 DD 040800000r ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
230 __real@4028000000000000 DQ 04028000000000000r ; | fp data |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
231 __real@4014000000000000 DQ 04014000000000000r ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
232 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
233 leaf_call PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
234 mov DWORD PTR [rsp+32], r9d |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
235 mov QWORD PTR [rsp+24], r8 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
236 mov QWORD PTR [rsp+16], rdx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
237 mov DWORD PTR [rsp+8], ecx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
238 ret 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
239 leaf_call ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
240 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
241 $T1 = 80 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
242 $T2 = 96 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
243 $T3 = 112 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
244 $T4 = 128 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
245 x$ = 144 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
246 b$ = 408 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
247 c$ = 416 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
248 d$ = 424 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
249 e$ = 432 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
250 f$ = 440 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
251 g$ = 448 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
252 h$ = 456 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
253 i$ = 464 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
254 j$ = 472 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
255 nonleaf_call PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
256 mov QWORD PTR [rsp+32], r9 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
257 mov QWORD PTR [rsp+24], r8 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
258 mov DWORD PTR [rsp+16], edx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
259 mov DWORD PTR [rsp+8], ecx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
260 push rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
261 push rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
262 sub rsp, 376 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
263 mov BYTE PTR x$[rsp], 76 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
264 lea rax, QWORD PTR x$[rsp+1] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
265 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
266 xor eax, eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
267 mov ecx, 219 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
268 rep stosb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
269 lea rax, QWORD PTR $T3[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
270 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
271 mov rsi, QWORD PTR h$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
272 mov ecx, 16 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
273 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
274 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
275 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
276 mov rsi, QWORD PTR g$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
277 mov ecx, 12 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
278 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
279 lea rax, QWORD PTR $T4[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
280 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
281 mov rsi, QWORD PTR d$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
282 mov ecx, 16 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
283 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
284 lea rax, QWORD PTR $T2[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
285 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
286 mov rsi, QWORD PTR c$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
287 mov ecx, 12 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
288 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
289 mov eax, DWORD PTR j$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
290 mov DWORD PTR [rsp+64], eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
291 mov eax, DWORD PTR i$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
292 mov DWORD PTR [rsp+56], eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
293 lea rax, QWORD PTR $T3[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
294 mov QWORD PTR [rsp+48], rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
295 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
296 mov QWORD PTR [rsp+40], rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
297 mov eax, DWORD PTR f$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
298 mov DWORD PTR [rsp+32], eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
299 mov r9d, DWORD PTR e$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
300 lea r8, QWORD PTR $T4[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
301 lea rdx, QWORD PTR $T2[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
302 mov ecx, DWORD PTR b$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
303 call leaf_call |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
304 add rsp, 376 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
305 pop rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
306 pop rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
307 ret 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
308 nonleaf_call ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
309 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
310 c$ = 80 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
311 a$ = 96 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
312 $T1 = 112 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
313 $T2 = 128 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
314 d$ = 144 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
315 b$ = 160 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
316 $T3 = 176 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
317 $T4 = 192 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
318 main PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
319 push rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
320 push rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
321 sub rsp, 216 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
322 mov DWORD PTR a$[rsp], 2 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
323 mov DWORD PTR a$[rsp+4], 3 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
324 movss xmm0, DWORD PTR __real@40800000 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
325 movss DWORD PTR a$[rsp+8], xmm0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
326 movsd xmm0, QWORD PTR __real@4014000000000000 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
327 movsd QWORD PTR b$[rsp], xmm0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
328 mov QWORD PTR b$[rsp+8], 6 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
329 mov DWORD PTR c$[rsp], 9 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
330 mov DWORD PTR c$[rsp+4], 10 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
331 movss xmm0, DWORD PTR __real@41300000 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
332 movss DWORD PTR c$[rsp+8], xmm0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
333 movsd xmm0, QWORD PTR __real@4028000000000000 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
334 movsd QWORD PTR d$[rsp], xmm0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
335 mov QWORD PTR d$[rsp+8], 13 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
336 lea rax, QWORD PTR $T3[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
337 lea rcx, QWORD PTR d$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
338 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
339 mov rsi, rcx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
340 mov ecx, 16 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
341 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
342 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
343 lea rcx, QWORD PTR c$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
344 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
345 mov rsi, rcx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
346 mov ecx, 12 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
347 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
348 lea rax, QWORD PTR $T4[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
349 lea rcx, QWORD PTR b$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
350 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
351 mov rsi, rcx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
352 mov ecx, 16 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
353 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
354 lea rax, QWORD PTR $T2[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
355 lea rcx, QWORD PTR a$[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
356 mov rdi, rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
357 mov rsi, rcx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
358 mov ecx, 12 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
359 rep movsb |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
360 mov DWORD PTR [rsp+72], 15 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
361 mov DWORD PTR [rsp+64], 14 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
362 lea rax, QWORD PTR $T3[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
363 mov QWORD PTR [rsp+56], rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
364 lea rax, QWORD PTR $T1[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
365 mov QWORD PTR [rsp+48], rax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
366 mov DWORD PTR [rsp+40], 8 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
367 mov DWORD PTR [rsp+32], 7 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
368 lea r9, QWORD PTR $T4[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
369 lea r8, QWORD PTR $T2[rsp] |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
370 mov edx, 1 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
371 xor ecx, ecx |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
372 call nonleaf_call |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
373 xor eax, eax |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
374 add rsp, 216 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
375 pop rdi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
376 pop rsi |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
377 ret 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
378 main ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
379 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
380 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
381 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
382 ; ---------- returning tiny struct by value (passes via regs) ----------> |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
383 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
384 ; struct A { unsigned char a; }; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
385 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
386 ; struct A call(unsigned char c) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
387 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
388 ; struct A r = {c}; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
389 ; return r; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
390 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
391 ; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
392 ; int main() |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
393 ; { |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
394 ; struct A a = call(123); |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
395 ; return 0; |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
396 ; } |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
397 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
398 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
399 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
400 ; output from godbolt compiler explorer w/ msvc 19.0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
401 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
402 r$ = 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
403 c$ = 32 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
404 call PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
405 mov BYTE PTR [rsp+8], cl ; | spill |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
406 sub rsp, 24 ; | prolog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
407 movzx eax, BYTE PTR c$[rsp] ; in arg 0 (fetched from spill area) -> eax, then ... |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
408 mov BYTE PTR r$[rsp], al ; ... -> struct in local area (top of stack, as leaf call and thus no reserved spill area) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
409 movzx eax, BYTE PTR r$[rsp] ; reget same value into eax to return (small) struct via reg (a bit pointless to refetch) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
410 add rsp, 24 ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
411 ret 0 ; | epilog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
412 call ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
413 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
414 a$ = 32 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
415 main PROC |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
416 sub rsp, 56 ; prolog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
417 mov cl, 123 ; arg 0 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
418 call call ; push return addr and call |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
419 mov BYTE PTR a$[rsp], al ; write struct data to local area (123) |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
420 xor eax, eax ; return value |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
421 add rsp, 56 ; | |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
422 ret 0 ; | epilog |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
423 main ENDP |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
424 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
425 |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
426 ; vim: ft=asm |
79b95db3d68f
- added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents:
327
diff
changeset
|
427 |