int main() {
int a = 10;
int b = 0;
b = a++ + 8;
// a++汇编代码
mov eax, dword ptr [a] // 将a的值取出来赋值给eax,即eax = 10
add eax, 8 // 将eax里面的值加8 即eax += 8,此时a的值是没有变的
mov dword ptr [b], eax // 将最终的结果给了b.即 b = eax
mov eax, dword ptr [a] // 将a的值取出来给了eax即 eax = 10
inc eax // 将eax加1即 eax += 1
mov dword ptr [a], eax // 将eax的值给了a即 a = 9
// 结论:a++会返回a以前的值进行运算,运算完毕之后才会让a的值+1
b = ++a + 8;
// ++a汇编代码
mov eax, dword ptr [a] // 将a的值取出来赋值给eax
inc eax // 让eax加1
mov dword ptr [a], eax // 又将eax的值送回给了a 即 a = eax,此时a的值为9已经改变
mov eax, dword ptr [a] // 将a的值取出来赋值给eax 即eax = a
add eax, 8 // 将eax加8 即eax += 8
mov dword ptr [b], eax // 再把最终的结果给了变量b 即b = eax
// 结论:++a会先直接让a的值+1,并且返回最新的a
cout << a << endl;
(a++) = 40;//用a以前的值运算完之后才有改变a的值,这个是将a里面的值先给了eax,是一个临时的寄存器,没有意义,说明a++没有返回a,返回的是一个临时的寄存器,这个赋值是错误的
(++a) = 20; // 先将a的值加1,a里面的值已改变后,再将a在栈空间的值赋值为20
getchar();
return 0;
}
C++汇编理解a++,与++a的本质
最新推荐文章于 2023-12-09 18:48:07 发布