- 论坛徽章:
- 0
|
原帖由 zdmilan 于 2006-8-17 15:13 发表 ![]()
int *p1;
int *p2;
p1 = (int *)0x500;
p2 = (int *) 0x509;
value = p2-p1;
printf("value=%d \n",value);
这个value 应该等于多少,为什么?
首先value的类型没有给出,我这里默认为int类型。
004114CC rep stos dword ptr es:[edi]
int *p1,*p2,value;
p1 = (int *)0x509;
004114CE mov dword ptr [p1],509h
p2 = (int *)0x500;
004114D5 mov dword ptr [p2],500h
value = p1 - p2;
004114DC mov eax,dword ptr [p1]
004114DF sub eax,dword ptr [p2]
004114E2 sar eax,2
004114E5 mov dword ptr [value],eax
cout << "value =" << value;
004114E8 mov esi,esp
004114EA mov eax,dword ptr [value]
004114ED push eax
在VS 2005中的反汇编代码如上,结果为2.即在int * 转向 int类型时要考虑类型长度,以上代码稍作修改
value =(int)p1 - (int)p2; 显式的结果即为9. |
|