C++汇编理解a++,与++a的本质

   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;
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值