从汇编角度看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;
}
标签:11,汇编,10,++,int,角度看,dword,ptr 来源: https://www.cnblogs.com/jinjibird/p/13441075.html