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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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