annotate doc/disas_examples/x86.thiscall_ms.disas @ 615:516d72e98253

- more thiscall disas examples
author Tassilo Philipp
date Sat, 01 Oct 2022 16:14:00 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
615
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
1 ; class C {
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
2 ; public:
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
3 ; float m(int i) const { return float(i + 123); }
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
4 ; };
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
5 ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
6 ; extern "C" {
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
7 ; float f()
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
8 ; {
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
9 ; C c;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
10 ; return c.m(27);
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
11 ; }
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
12 ; }
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
13
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
14
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
15
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
16 ; output from godbolt compiler explorer w/ msvc 19.0
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
17
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
18 _this$ = -12
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
19 tv68 = -8
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
20 tv67 = -4
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
21 _i$ = 8
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
22 float C::m(int)const PROC
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
23 push ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
24 mov ebp, esp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
25 sub esp, 12 ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
26 mov DWORD PTR _this$[ebp], ecx ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
27 mov eax, DWORD PTR _i$[ebp] ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
28 add eax, 123 ; |
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
29 mov DWORD PTR tv67[ebp], eax ; / in arg + 123, pushed onto stack
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
30 fild DWORD PTR tv67[ebp] ; \
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
31 fstp DWORD PTR tv68[ebp] ; | float cast and put return value in fp0
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
32 fld DWORD PTR tv68[ebp] ; |
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
33 mov esp, ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
34 pop ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
35 ret 4 ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
36 float C::m(int)const ENDP
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
37
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
38 _c$ = -1
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
39 _f PROC
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
40 push ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
41 mov ebp, esp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
42 push ecx ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
43 push 27 ; arg 1
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
44 lea ecx, DWORD PTR _c$[ebp] ; arg 0 (this ptr) via ecx
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
45 call float C::m(int)const ; call C::m()
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
46 mov esp, ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
47 pop ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
48 ret 0 ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
49 _f ENDP
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
50
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
51
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
52
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
53 ; output from reactos-0.3.15-x86 w/ mingw gcc 4.7.2 (uses MS thiscalls; according to
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
54 ; https://www.angelcode.com/dev/callconv/callconv.html MinGW has own thiscalls,
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
55 ; so maybe ROSBE's MinGW has different behaviour or the web page sources are wong)
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
56
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
57 00000000 <_f>:
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
58 0: 55 push %ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
59 1: 89 e5 mov %esp,%ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
60 3: 83 ec 14 sub $0x14,%esp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
61 6: 8d 45 ff lea -0x1(%ebp),%eax ; this ptr -> eax
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
62 9: c7 04 24 1b 00 00 00 movl $0x1b,(%esp) ; arg 1 via stack
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
63 10: 89 c1 mov %eax,%ecx ; arg 0 (this ptr) via ecx
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
64 12: e8 00 00 00 00 call 17 <_f+0x17> ; call C::m()
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
65 17: 83 ec 04 sub $0x4,%esp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
66 1a: c9 leave ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
67 1b: c3 ret ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
68
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
69 00000000 <__ZNK1C1mEi>:
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
70 0: 55 push %ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
71 1: 89 e5 mov %esp,%ebp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
72 3: 83 ec 08 sub $0x8,%esp ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
73 6: 89 4d fc mov %ecx,-0x4(%ebp) ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
74 9: 8b 45 08 mov 0x8(%ebp),%eax ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
75 c: 83 c0 7b add $0x7b,%eax ; | in arg + 123, pushed onto stack
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
76 f: 89 45 f8 mov %eax,-0x8(%ebp) ; |
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
77 12: db 45 f8 fildl -0x8(%ebp) ; float cast and put return value in fp0
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
78 15: c9 leave ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
79 16: c2 04 00 ret $0x4 ;
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
80
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
81
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
82
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
83 ; vim: ft=asm
516d72e98253 - more thiscall disas examples
Tassilo Philipp
parents:
diff changeset
84