|
楼主 |
发表于 2017-10-23 16:14:03
|
显示全部楼层
另外,我还有一个问题忘记问了,就是如果把上面那段代码调用反汇编功能可以发现:
1被赋值给了数组的起始地址a加上偏移量0的内存单元,也就是a【0】【0】的起始位置位置,2被赋值到了a加上偏移量20的内存单元,也就是a【2】【2】的起始位置位置,3被赋值到了a加上偏移量40的内存单元,也就是a【3】【3】的起始位置,也就是说从反汇编的结果上来看,那样写是可以实现输出对角矩阵的功能的,但实际执行结果缤纷如此,难道vs里面的反汇编功能翻译出的汇编代码还不是编译器的最后编译结果吗?
int a[3][4] = { a[0][0] = 1,a[1][1] = 2,a[2][2] = 3 };
00F61808 mov eax,10h
00F6180D imul ecx,eax,0
00F61810 lea edx,a[ecx]
00F61814 mov eax,4
00F61819 imul ecx,eax,0
00F6181C mov dword ptr [edx+ecx],1
00F61823 mov dword ptr [a],1
00F6182A mov eax,10h
00F6182F shl eax,0
00F61832 lea ecx,a[eax]
00F61836 mov edx,4
00F6183B shl edx,0
00F6183E mov dword ptr [ecx+edx],2
00F61845 mov dword ptr [ebp-34h],2
00F6184C mov eax,10h
00F61851 shl eax,1
00F61853 lea ecx,a[eax]
00F61857 mov edx,4
00F6185C shl edx,1
00F6185E mov dword ptr [ecx+edx],3
00F61865 mov dword ptr [ebp-30h],3 |
|