编程达人吧 关注:16贴子:35
  • 0回复贴,共1

3.3 内存结构

只看楼主收藏回复

本节主要内容:
1. 变量和参数在内存中的存放格式
2. 函数中嵌套多个函数
老唐语录:
int abc(int p1,p2,p3)
{
int a;
int b;
int c;
a=p1+p2+p3;
b=p1-p2-p3;
c=p1-p2+p3;
return a+b+c;
}
写的多了,自然就清楚了,在汇编里写一个call,或者在C语言里,main函数中写一个函数名,左圆括号,参数,右圆括号,然后call指令地址加上本指令的长度就是下一条指令的首地址,放在内存里面去,如图3-1:
图3-1:调用函数内存结构
练习:
int abc19(int a,int b,int c,int d,int e)
{
return a+b+c+d+e;
}
……
int abc5(int a,int b,int c,int d,int e)
{
int r;
int v;
v = abc6(a+5,b+5,c+5,d+5,e+5);
r = a+b+c+d+e+v;
return r;
}
int abc4(int a,int b,int c,int d,int e)
{
int r;
int v;
v = abc5(a+5,b+5,c+5,d+5,e+5);
r = a+b+c+d+e+v;
return r;
}
int abc3(int a,int b,int c,int d,int e)
{
int r;
int v;
v = abc4(a+5,b+5,c+5,d+5,e+5);
r = a+b+c+d+e+v;
return r;
}
int abc2(int a,int b,int c,int d,int e)
{
int r;
int v;
v = abc3(a+5,b+5,c+5,d+5,e+5);
r = a+b+c+d+e+v;
return r;
}
int abc1(int a,int b,int c,int d,int e)
{
int r;
int v;
v = abc2(a+5,b+5,c+5,d+5,e+5);
r = a+b+c+d+e+v;
return r;
}
int abc(int a,int b,int c,int d,int e)
{
int r;
int v;
v = abc1(a+5,b+5,c+5,d+5,e+5);
r = a+b+c+d+e+v;
return r;
}
main函数中的调用语句:
int r= abc(1,2,3,4,5);
printf(“%d\n”,r);
写出内存变化。
课后理解:
函数中嵌套有多个函数时,它的执行顺序是依据函数之间调用的关系由内到外的执行,其中用于运算的寄存器的顺序是EAX,ECX,EDX,注意:在中间的函数的执行中,整个子程序从PUSH开始到最后的RETURN语句结束,再将返回值写入EAX传递给下一函数使用。函数的执行都是有始有终的。
课后疑问:
本节没有疑问。
课后总结:
函数调用都会引发CALL指令的执行。
课后练习:
练习嵌套函数并抄写反汇编语句。


1楼2016-06-11 08:46回复