annotate doc/disas_examples/x64.win.disas @ 619:c754150fe87f

- x64 win disas example fix and addition
author Tassilo Philipp
date Mon, 03 Oct 2022 13:49:19 +0200
parents fc614cb865c6
children
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
619
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
85 ; ---------- structs by value, struct never in reg or on reg arg boundary ---------->
468
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
619
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
135 sub rsp, 312
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
136 mov BYTE PTR x$[rsp], 76
468
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
619
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
140 mov ecx, 219
468
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
619
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
158 add rsp, 312
468
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
619
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
169 sub rsp, 104
468
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
619
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
190 add rsp, 104
468
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
493
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
426
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
427 ; ---------- C++ trivial and non-trivial aggrs passed to C funcs ---------->
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
428 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
429 ; struct Trivial { int a; };
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
430 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
431 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
432 ; extern "C" {
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
433 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
434 ; void f1(struct Trivial s) { }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
435 ; void f2(struct NonTrivial s) { }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
436 ;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
437 ; void f()
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
438 ; {
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
439 ; struct Trivial t;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
440 ; struct NonTrivial n;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
441 ; int a=1;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
442 ; a += 123;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
443 ; f1(t);
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
444 ; a -= 123;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
445 ; f2(n);
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
446 ; a -= 12;
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
447 ; }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
448 ; }
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
449
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
450
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
451
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
452 ; output from godbolt compiler explorer w/ msvc 19.0
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
453
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
454 ; ... snip, removed code of ctor and copy ctor ...
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
455
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
456 f1 PROC
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
457 mov DWORD PTR [rsp+8], ecx
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
458 ret 0
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
459 f1 ENDP
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
460
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
461 f2 PROC
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
462 mov QWORD PTR [rsp+8], rcx
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
463 ret 0
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
464 f2 ENDP
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
465
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
466 a$ = 32
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
467 n$ = 36
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
468 t$ = 40
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
469 $T1 = 44
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
470 $T2 = 48
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
471 f PROC
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
472 $LN3:
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
473 sub rsp, 72 ; prolog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
474 lea rcx, QWORD PTR n$[rsp] ; \ this ptr (NULL)
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
475 call NonTrivial::NonTrivial(void) ; | NonTrivial::NonTrivial() / ctor
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
476 mov DWORD PTR a$[rsp], 1 ; a = 1
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
477 mov eax, DWORD PTR a$[rsp] ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
478 add eax, 123 ; | a += 123
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
479 mov DWORD PTR a$[rsp], eax ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
480 mov ecx, DWORD PTR t$[rsp] ; f1 arg 0 (struct Trivial), via reg as small struct
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
481 call f1 ; call f1(struct Trivial)
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
482 mov eax, DWORD PTR a$[rsp] ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
483 sub eax, 123 ; | a -= 123
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
484 mov DWORD PTR a$[rsp], eax ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
485 lea rax, QWORD PTR $T1[rsp] ; @@@ unsure
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
486 mov QWORD PTR $T2[rsp], rax ; ... @@@
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
487 lea rdx, QWORD PTR n$[rsp] ; \ ptr to dest of copy of n
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
488 mov rcx, QWORD PTR $T2[rsp] ; | copy n ptr to n
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
489 call NonTrivial::NonTrivial(NonTrivial const &) ; / NonTrivial::NonTrivial(const NonTrivial&) / copy ctor
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
490 mov rcx, rax ; f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
491 call f2 ; call f2(struct NonTrivial)
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
492 mov eax, DWORD PTR a$[rsp] ; |
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
493 sub eax, 12 ; | a -= 12
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
494 mov DWORD PTR a$[rsp], eax ; /
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
495 add rsp, 72 ; \
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
496 ret 0 ; | epilog
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
497 f ENDP
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
498
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
499
75cb8f79d725 - doc and disas examples update about C++ non-trivial aggregates
Tassilo Philipp
parents: 468
diff changeset
500
499
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
501 ; ---------- C++ trivial and non-trivial aggrs as return values ---------->
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
502 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
503 ; struct Trivial { int a; };
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
504 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
505 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
506 ; extern "C" {
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
507 ; struct Trivial f1() { return Trivial(); }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
508 ; }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
509 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
510 ; struct NonTrivial f2() { return NonTrivial(); }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
511 ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
512 ; extern "C" {
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
513 ; void f()
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
514 ; {
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
515 ; int a=1;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
516 ; a += 123;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
517 ; struct Trivial t = f1();
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
518 ; a -= 123;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
519 ; struct NonTrivial n = f2();
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
520 ; a -= 12;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
521 ; }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
522 ; }
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
523
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
524
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
525
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
526 ; output from godbolt compiler explorer w/ msvc 19.0
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
527
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
528 ; ... snip, removed code of ctor and copy ctor ...
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
529
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
530 $T1 = 0
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
531 f1 PROC
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
532 $LN3:
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
533 push rdi
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
534 sub rsp, 16
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
535 lea rax, QWORD PTR $T1[rsp]
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
536 mov rdi, rax
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
537 xor eax, eax
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
538 mov ecx, 4
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
539 rep stosb
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
540 mov eax, DWORD PTR $T1[rsp]
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
541 add rsp, 16
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
542 pop rdi
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
543 ret 0
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
544 f1 ENDP
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
545
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
546 __$ReturnUdt$ = 48
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
547 NonTrivial f2(void) PROC
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
548 $LN3:
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
549 mov QWORD PTR [rsp+8], rcx
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
550 sub rsp, 40
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
551 mov rcx, QWORD PTR __$ReturnUdt$[rsp]
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
552 call NonTrivial::NonTrivial(void)
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
553 mov rax, QWORD PTR __$ReturnUdt$[rsp]
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
554 add rsp, 40
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
555 ret 0
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
556 NonTrivial f2(void) ENDP
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
557
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
558 a$ = 32
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
559 $T1 = 36
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
560 t$ = 40
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
561 n$ = 44
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
562 f PROC
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
563 $LN3:
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
564 sub rsp, 56 ; prolog
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
565 mov DWORD PTR a$[rsp], 1 ; a = 1
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
566 mov eax, DWORD PTR a$[rsp] ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
567 add eax, 123 ; | a += 123
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
568 mov DWORD PTR a$[rsp], eax ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
569 call f1 ; call f1()
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
570 mov DWORD PTR $T1[rsp], eax ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
571 mov eax, DWORD PTR $T1[rsp] ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
572 mov DWORD PTR t$[rsp], eax ;
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
573 mov eax, DWORD PTR a$[rsp] ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
574 sub eax, 123 ; | a -= 123
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
575 mov DWORD PTR a$[rsp], eax ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
576 lea rcx, QWORD PTR n$[rsp] ; ptr to space to hold non-triv retval
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
577 call NonTrivial f2(void) ; call f2()
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
578 mov eax, DWORD PTR a$[rsp] ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
579 sub eax, 12 ; | a -= 12
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
580 mov DWORD PTR a$[rsp], eax ; /
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
581 add rsp, 56 ; \ epilog
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
582 ret 0 ; |
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
583 f ENDP
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
584
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
585
fc614cb865c6 - doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
Tassilo Philipp
parents: 493
diff changeset
586
619
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
587 ; ---------- structs by value, struct passed as vararg ---------->
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
588 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
589 ; #include <stdlib.h>
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
590 ; #include <stdarg.h>
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
591 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
592 ; struct A { int i, j; long long l; };
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
593 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
594 ; void leaf_call(int b, int c, int d, int e, ...)
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
595 ; {
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
596 ; }
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
597 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
598 ; void nonleaf_call(int a, int b, int c, ...)
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
599 ; {
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
600 ; int d, e, g, h;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
601 ; struct A f;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
602 ; va_list ap;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
603 ; va_start(ap, c);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
604 ; d = va_arg(ap, int);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
605 ; e = va_arg(ap, int);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
606 ; f = va_arg(ap, struct A);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
607 ; g = va_arg(ap, int);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
608 ; h = va_arg(ap, int);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
609 ; /* use some local data */
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
610 ; *(char*)alloca(220) = 'L';
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
611 ; leaf_call(b, c, d, e, f, g, h);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
612 ; va_end(ap);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
613 ; }
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
614 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
615 ; int main()
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
616 ; {
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
617 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9);
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
618 ; return 0;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
619 ; }
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
620
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
621
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
622
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
623 ; output from godbolt compiler explorer w/ msvc 19.0
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
624
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
625 leaf_call PROC
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
626 mov DWORD PTR [rsp+32], r9d ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
627 mov DWORD PTR [rsp+24], r8d ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
628 mov DWORD PTR [rsp+16], edx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
629 mov DWORD PTR [rsp+8], ecx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
630 ret 0 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
631 leaf_call ENDP
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
632
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
633 ap$ = 64
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
634 h$ = 72
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
635 g$ = 76
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
636 e$ = 80
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
637 d$ = 84
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
638 $T1 = 96
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
639 f$ = 112
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
640 __$ArrayPad$ = 128
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
641 b$ = 184
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
642 c$ = 192
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
643 nonleaf_call PROC
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
644 $LN3:
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
645 mov DWORD PTR [rsp+24], r8d ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
646 mov DWORD PTR [rsp+16], edx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
647 mov DWORD PTR [rsp+8], ecx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
648 mov QWORD PTR [rsp+32], r9 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
649 push rsi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
650 push rdi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
651 sub rsp, 152 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
652 mov rax, QWORD PTR __security_cookie ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
653 xor rax, rsp ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
654 mov QWORD PTR __$ArrayPad$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
655 lea rax, QWORD PTR c$[rsp+8] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
656 mov QWORD PTR ap$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
657 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
658 add rax, 8 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
659 mov QWORD PTR ap$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
660 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
661 mov eax, DWORD PTR [rax-8] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
662 mov DWORD PTR d$[rsp], eax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
663 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
664 add rax, 8 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
665 mov QWORD PTR ap$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
666 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
667 mov eax, DWORD PTR [rax-8] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
668 mov DWORD PTR e$[rsp], eax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
669 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
670 add rax, 8 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
671 mov QWORD PTR ap$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
672 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
673 mov rax, QWORD PTR [rax-8] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
674 lea rcx, QWORD PTR f$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
675 mov rdi, rcx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
676 mov rsi, rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
677 mov ecx, 16 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
678 rep movsb ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
679 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
680 add rax, 8 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
681 mov QWORD PTR ap$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
682 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
683 mov eax, DWORD PTR [rax-8] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
684 mov DWORD PTR g$[rsp], eax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
685 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
686 add rax, 8 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
687 mov QWORD PTR ap$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
688 mov rax, QWORD PTR ap$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
689 mov eax, DWORD PTR [rax-8] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
690 mov DWORD PTR h$[rsp], eax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
691 mov ecx, 220 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
692 call alloca ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
693 cdqe ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
694 mov BYTE PTR [rax], 76 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
695 lea rax, QWORD PTR $T1[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
696 lea rcx, QWORD PTR f$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
697 mov rdi, rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
698 mov rsi, rcx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
699 mov ecx, 16 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
700 rep movsb ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
701 mov eax, DWORD PTR h$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
702 mov DWORD PTR [rsp+48], eax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
703 mov eax, DWORD PTR g$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
704 mov DWORD PTR [rsp+40], eax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
705 lea rax, QWORD PTR $T1[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
706 mov QWORD PTR [rsp+32], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
707 mov r9d, DWORD PTR e$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
708 mov r8d, DWORD PTR d$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
709 mov edx, DWORD PTR c$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
710 mov ecx, DWORD PTR b$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
711 call leaf_call ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
712 mov QWORD PTR ap$[rsp], 0 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
713 mov rcx, QWORD PTR __$ArrayPad$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
714 xor rcx, rsp ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
715 call __security_check_cookie ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
716 add rsp, 152 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
717 pop rdi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
718 pop rsi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
719 ret 0 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
720 nonleaf_call ENDP
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
721
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
722 $T1 = 64
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
723 $S1$ = 80
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
724 __$ArrayPad$ = 96
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
725 main PROC
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
726 $LN3:
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
727 push rsi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
728 push rdi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
729 sub rsp, 120 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
730 mov rax, QWORD PTR __security_cookie ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
731 xor rax, rsp ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
732 mov QWORD PTR __$ArrayPad$[rsp], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
733 mov DWORD PTR $S1$[rsp], 5 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
734 mov DWORD PTR $S1$[rsp+4], 6 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
735 mov QWORD PTR $S1$[rsp+8], 7 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
736 lea rax, QWORD PTR $T1[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
737 lea rcx, QWORD PTR $S1$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
738 mov rdi, rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
739 mov rsi, rcx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
740 mov ecx, 16 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
741 rep movsb ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
742 mov DWORD PTR [rsp+56], 9 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
743 mov DWORD PTR [rsp+48], 8 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
744 lea rax, QWORD PTR $T1[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
745 mov QWORD PTR [rsp+40], rax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
746 mov DWORD PTR [rsp+32], 4 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
747 mov r9d, 3 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
748 mov r8d, 2 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
749 mov edx, 1 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
750 xor ecx, ecx ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
751 call nonleaf_call ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
752 xor eax, eax ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
753 mov rcx, QWORD PTR __$ArrayPad$[rsp] ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
754 xor rcx, rsp ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
755 call __security_check_cookie ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
756 add rsp, 120 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
757 pop rdi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
758 pop rsi ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
759 ret 0 ;
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
760 main ENDP
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
761
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
762
c754150fe87f - x64 win disas example fix and addition
Tassilo Philipp
parents: 499
diff changeset
763
468
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 327
diff changeset
764 ; vim: ft=asm
79b95db3d68f - added (only partly annotated) x64/win64 disas examples
Tassilo Philipp
parents: 327
diff changeset
765