gpt4 book ai didi

c++ - ecx 寄存器是否用于传递静态函数调用中的参数之一?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:09 33 4
gpt4 key购买 nike

我知道在c++中调用对象的非静态成员函数时,this指针是传入ecx寄存器的。静态函数呢,因为没有 this 指针,在这种情况下,编译器是否使用 ecx 寄存器来传递常规参数之一?

编辑 - 我在这里谈论的是 cdecl 调用约定。

最佳答案

调用函数时 ecx(或任何其他寄存器)的用途取决于 calling convention .

例如,考虑 C++ 代码

struct S {
static void f( int, int ) { }
void g( int ) { }
};

void g() {
S::f( 3, 4 );
S s;
s.g( 3 );
}

通过 Microsoft Visual Studio 2010(64 位)编译此

cl /c main.cpp

然后通过

转储程序集
dumpbin /disasm main.obj

g 函数提供:

?g@@YAXXZ (void __cdecl g(void)):
0000000000000000: 48 83 EC 38 sub rsp,38h
0000000000000004: BA 04 00 00 00 mov edx,4
0000000000000009: B9 03 00 00 00 mov ecx,3
000000000000000E: E8 00 00 00 00 call ?f@S@@SAXHH@Z
0000000000000013: BA 03 00 00 00 mov edx,3
0000000000000018: 48 8D 4C 24 20 lea rcx,[rsp+20h]
000000000000001D: E8 00 00 00 00 call ?g@S@@QEAAXH@Z
0000000000000022: 48 83 C4 38 add rsp,38h
0000000000000026: C3 ret

注意第一次调用静态 S::f 方法时,第一个参数 (3) 传入 ecx ,第二个参数 (4) 传入 edx。所以你的问题的答案是:

是的。对于这个特定的编译器,ecx 用于在静态函数调用中传递参数之一。

关于c++ - ecx 寄存器是否用于传递静态函数调用中的参数之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490470/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com