|
PS:只是最基础的知识,大牛绕过,结构体在申明的时候就已经分配了内存,而且是全局变量
很多课本说了半天也全是概念。还是得自己看汇编代码才能了解程序的真谛。
- #include "stdio.h"
- #include "stdlib.h"
- struct stu
- {
- int numA;
- int numB;
- }s1;
- int Function1(int x,int y)
- {
- int r;
- s1.numA=0x1;
- r=s1.numA+x+y;
- return r;
- // int x=s1.numA;
- // int y=s1.numB;
- // return x+y;
- }
- void main()
- {
-
- s1.numA=0x10;
- s1.numB=0x20;
- Function1(s1.numA,s1.numB);
- getchar();
- }
复制代码
ASM:ps 太累了,就不手写裸函数了,直接COPY编译器的代码了
- main()
- {
- 00401078 mov dword ptr [00427e30],10h
- 00401082 mov dword ptr [00427e34],20h
- 0040108C mov eax,[00427e34]
- 00401091 push eax
- 00401092 mov ecx,dword ptr [00427e30]
- 00401098 push ecx
- 00401099 call @ILT+15(Function1) (00401014)
- }
- 00401020 push ebp
- 00401021 mov ebp,esp
- 00401023 sub esp,44h
- 00401026 push ebx
- 00401027 push esi
- 00401028 push edi
- 00401029 lea edi,[ebp-44h]
- 0040102C mov ecx,11h
- 00401031 mov eax,0CCCCCCCCh
- 00401036 rep stos dword ptr [edi]
- 00401038 mov dword ptr [00427e30],1
- 00401042 mov eax,[00427e30]
- 00401047 add eax,dword ptr [ebp+8]
- 0040104A add eax,dword ptr [ebp+0Ch]
- 0040104D mov dword ptr [ebp-4],eax
- 00401050 mov eax,dword ptr [ebp-4]
- 00401053 pop edi
- 00401054 pop esi
- 00401055 pop ebx
- 00401056 mov esp,ebp
- 00401058 pop ebp
- 00401059 ret
- 0040105A int 3
- 0040105B int 3
- 0040105C int 3
- 0040105D int 3
- 0040105E int 3
- 0040105F int 3
复制代码 |
评分
-
查看全部评分
上一篇: 献丑了,C和ASM(002)手写数组下一篇: 在窗口中绘制一条直线 有什么方法存储
|