//C++源碼
int nVarOne = argc;//變量定義
int nVarTwo = 0;
scanf("%d",&nVarTwo);//獲取變量nVarTwo的數據,使用scanf防止變量被常量化
nVarOne = nVarOne - 100;//變量減常量的減法運算
nVarOne = nVarOne + 5 - nVarTwo;//減法與加法混合運算
printf("nVarOne = %d\n",nVarOne);
//C++源碼與反彙編代碼講解
//C++
nVarOne = nVarOne -100;
//反彙編
mov eax,dword ptr [ebp-4]//取變量nVarOne的數據到eax中
sub eax,64h//使用sub指令,對eax執行減100操作
mov dword ptr [ebp-4],eax//將結果賦值回nVarOne中
//C++
nVarOne = nVarOne + 5 - nVarTwo;
//反彙編
//按照自左向右順序依次執行
mov ecx,dword ptr [ebp-4]
add ecx,5
sub ecx,dword ptr [ebp-8]
mov dword ptr [ebp-4],ecx
減法運算沒有使用加負數的表現形式。在實際的分析中,根據加法操作數的情況,當加數爲負數時,執行的並非加法而是減法操作。
另外,編譯器優化策略與加法相同。