VC++语言中函数和类函数调用过程
2010-06-15 20:39:57 来源:WEB开发网d. 如果是类调用方法与之一样,区别是 ECX -> 指向对象,具体如下所示
void XXX::SetValue(LONG f_Val)
{
ecx -> XXX对象
f_Val 获取方式为 mov eax, [ebp + 8]
}
a.SetValue(xxx); 调用方式为
push xxx
mov ecx,a
call XXX::SetValue
void XXX::SetValue(std::string f_Val)
{
ecx -> XXX对象
f_Val 获取方式为 lea eax, [ebp + 8]
}
a.SetValue(xxx);的调用方式为
esp -> 生成xxx的临时对象 std::string
mov ecx,a
call XXX::SetValue
void XXX::SetValue(std::string &f_Val)
{
ecx -> XXX对象
f_Val 获取方式为 mov eax, [ebp + 8]
}
a.SetValue(xxx);的调用方式为
lea eax, xxx
push eax
mov ecx,a
call XXX::SetValue
2.有返回值的函数调用方法同上,区别就在返回值的处理上
a. 参数为普通变量,即: int long ulong 和指针
LONG SetValue(LONG f_Val)
{
f_Val 获取方式为 mov eax, [ebp + 8]
}
b = SetValue(xxx); 的调用方式为
push xxx
call SetValue
mov b, eax
b. 参数为类对象,如:CString
std::string SetValue(std::string f_Val)
{
f_Val 获取方式为 lea eax, [ebp + 8]
}
b = SetValue(xxx); 的调用方式为
esp -> 生成xxx的临时对象 std::string
lea eax, b
push eax
call SetValue
c. 如果参数以引用方式调用
std::string SetValue(std::string &f_Val)
{
f_Val 获取方式为 mov eax, [ebp + 8]
}
b = SetValue(xxx); 的调用方式为
lea eax, xxx
push eax
lea eax, b
push eax
call SetValue
d. 如果是类调用方法与之一样,区别是 ECX -> 指向对象,具体如下所示
LONG XXX::SetValue(LONG f_Val)
{
ecx -> XXX对象
f_Val 获取方式为 mov eax, [ebp + 8]
}
b = a.SetValue(xxx) 调用方式为
push xxx
mov ecx,a
call XXX::SetValue
mov b, eax
std::string XXX::SetValue(std::string f_Val)
{
ecx -> XXX对象
f_Val 获取方式为 lea eax, [ebp + 8]
}
b = a.SetValue(xxx)的调用方式为
esp -> 生成xxx的临时对象 std::string
lea eax, b
push eax
mov ecx,a
call XXX::SetValue
std::string XXX::SetValue(std::string &f_Val)
{
ecx -> XXX对象f_Val 获取方式为 mov eax, [ebp + 8]
}
b = a.SetValue(xxx)的调用方式为
lea eax, xx
push eax
lea eax, b
push eax
mov ecx,a
call XXX::SetValue
更多精彩
赞助商链接