自增和自减分为两种:
1>自增自减运算符在语句块之后,先执行语句块,再执行自增自减
2>自增自减运算符在语句块之前,先执行自增自减,再执行语句块
通常,自增和自减是被拆分成两条汇编指令执行的。
//C++源代码
int nVarOne = argc;
int nVarTwo = argc;
//变量后缀自增参与表达式运算
nVarTwo = 5 + (nVarOne++);
//变量前缀自增参与表达式运算
nVarTwo = 5 + (++nVarOne);
//具体对比讲解
//C++
nVarTwo = 5 + (nVarOne++);
//反汇编
mov edx,dword ptr [ebp-4] //取出变量nVarOne,保存在edx中
add edx,5 //对edx执行加5
mov dword ptr [ebp-8],edx //把edx赋值给变量nVarTwo
mov eax,dword ptr [ebp-4] //取出变量nVarOne,保存在eax中
add eax,1 //执行eax加等于1
mov dword ptr [ebp-4],eax //把eax值赋值给变量nVarOne
//C++
nVarTwo = 5 + (++nVarOne);
//反汇编
mov ecx,dword ptr [ebp-4] //取出变量nVarOne,保存在ecx中
add ecx,1 //执行ecx加等于1
mov dword ptr [ebp-4],ecx //把ecx值赋值给变量nVarOne
mov edx,dword ptr [ebp-4] //取出变量nVarOne,保存在edx中
add edx,5 //对edx执行加5
mov dword ptr [ebp-8],edx //把edx赋值给变量nVarTwo
自减同自增相同,只是add变成sub
1>自增自减运算符在语句块之后,先执行语句块,再执行自增自减
2>自增自减运算符在语句块之前,先执行自增自减,再执行语句块
通常,自增和自减是被拆分成两条汇编指令执行的。
//C++源代码
int nVarOne = argc;
int nVarTwo = argc;
//变量后缀自增参与表达式运算
nVarTwo = 5 + (nVarOne++);
//变量前缀自增参与表达式运算
nVarTwo = 5 + (++nVarOne);
//具体对比讲解
//C++
nVarTwo = 5 + (nVarOne++);
//反汇编
mov edx,dword ptr [ebp-4] //取出变量nVarOne,保存在edx中
add edx,5 //对edx执行加5
mov dword ptr [ebp-8],edx //把edx赋值给变量nVarTwo
mov eax,dword ptr [ebp-4] //取出变量nVarOne,保存在eax中
add eax,1 //执行eax加等于1
mov dword ptr [ebp-4],eax //把eax值赋值给变量nVarOne
//C++
nVarTwo = 5 + (++nVarOne);
//反汇编
mov ecx,dword ptr [ebp-4] //取出变量nVarOne,保存在ecx中
add ecx,1 //执行ecx加等于1
mov dword ptr [ebp-4],ecx //把ecx值赋值给变量nVarOne
mov edx,dword ptr [ebp-4] //取出变量nVarOne,保存在edx中
add edx,5 //对edx执行加5
mov dword ptr [ebp-8],edx //把edx赋值给变量nVarTwo
自减同自增相同,只是add变成sub