我写了一个简单的程序(以发布模式(x86)构建)来练习重新技能,但我无法理解其中的一部分。
C++程序:
int doSub(int a, int b)
{
int result = a + b;
result -= 2;
return result;
}
int doSum(int a, int b)
{
int result = a + b;
result += 2;
return result;
}
int main(int argc, char** argv)
{
int wynik = 0;
int liczbaA = atoi(argv[1]);
int liczbaB = atoi(argv[2]);
if (liczbaA > 3)
{
wynik = doSum(liczbaA, liczbaB);
}
else
{
wynik = doSub(liczbaA, liczbaB);
}
std::cout << "Result" << wynik;
return 0;
}
我的问题是:这里发生了什么?
lea ecx, ds:0FFFFFFFEh[ecx*4] ; ??
我应该在这里看到两个指令,如 sub/add。有人能解释一下这里是如何处理 +2 和 -2 操作的吗?
@编辑
loc_401052:
mov edi, [ebp+argv]
push dword ptr [edi+4] ; Str
call ds:__imp__atoi
add esp, 4
mov ebx, eax
push dword ptr [edi+8] ; Str
call ds:__imp__atoi
xor ecx, ecx
add esp, 4
add eax, ebx
mov edx, offset aResult ; "Result"
cmp ebx, 3
setnle cl
lea ecx, ds:0FFFFFFFEh[ecx*4]
add eax, ecx
push eax
push ecx
mov ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::basic_ostream<char,std::char_traits<char>> std::cout
call std__operator___std__char_traits_char___
add esp, 4
mov ecx, eax
call ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int)
pop edi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
retn
main endp
