进击的bird

导航

从汇编角度看i++ 和++i的区别

int a=10
print ("%d\n",++a)  //输出 11  先对自加,再运算  打印完成后 a=11

int a=10
print ("%d\n",a++)  //输出 10  先运算,再自加    打印完成后 a=11

 

int x=10
print ("%d\n",++x)

int x = 10;
010E18A8  mov         dword ptr [x],0Ah      //将10存入 内存 [x]    [x]表示内存中的一个地址,里面可以存储数据
    printf("%d\n", ++x);
010E18AF  mov         eax,dword ptr [x]     //寄存器 eax = 10
010E18B2  add         eax,1                 //寄存器 eax = 11
010E18B5  mov         dword ptr [x],eax     //内存[x]中的值 = 11
010E18B8  mov         ecx,dword ptr [x]     //寄存器 ecx = 11
010E18BB  push        ecx                   //弹出 ecx = 11
010E18BC  push        offset string "%d\n" (010E7B30h)  
010E18C1  call        _printf (010E104Bh)    //输出为11
010E18C6  add         esp,8  




int x=10
print ("%d\n",x++)


int x = 10;
010818A8  mov         dword ptr [x],0Ah             //将10存入 内存 [x]
    printf("%d\n", x++);
010818AF  mov         eax,dword ptr [x]             //寄存器 eax = 10  
010818B2  mov         dword ptr [ebp-0D0h],eax      //内存中[ebp-0D0h] = eax =10  ,[ebp-0D0h]代表内存中的一个地址,可以用来存储数据
010818B8  mov         ecx,dword ptr [x]             //寄存器ecx=10
010818BB  add         ecx,1                         //寄存器ecx=11
010818BE  mov         dword ptr [x],ecx             //内存[x] =11
010818C1  mov         edx,dword ptr [ebp-0D0h]      //寄存器edx=[ebp-0D0h] =10
010818C7  push        edx                           //弹出edx=10   此时的edx 等于10
010818C8  push        offset string "%d\n" (01087B30h)  
010818CD  call        _printf (0108104Bh)            //输出会是10  但内存[x]中 已为11
010818D2  add         esp,8  
    return;





思考:

#include<stdio.h>

int p(int x )
{
return x++;   //返回 x++ 和 ++x  有区别吗?
}

void main()
{

int a = 1;
int r = p(a);
printf("%d\n", r);
return;
}



 

posted on 2020-08-05 16:59  进击的bird  阅读(221)  评论(0编辑  收藏  举报