int exchange(int *xp,int y)

{

  int x=*xp;

 *xp=y;

return x;

}

省略了栈的建立和完成部分的汇编代码如下:

//xp at %ebp+8,y at %ebp+12

1     movl  8(%ebp),%edx

2     movl  (%edx),%eax

3     movl  12(%ebp),%ecx

4     movl  %ecx,(%edx)

注:

1.int x=*xp;表示将读存储在xp所指位置中的值,并将它存放在名字为x的局部变量中;

2.*xp=y;表示将参数y的值写到xp所指向的位置;

3.间接引用指针就是将该指针放在一个寄存器中(movl  8(%ebp),%edx),然后在存储器引用中使用这个寄存器(movl  (%edx),%eax)

4.像x这样的局部变量时存放在寄存器中的,而不是存储器中;

5.声明变量语句是不产生相应的汇编语句的;

6.函数参数的值存放中存储器中。

相关文章:

  • 2021-09-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-21
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-05
  • 2021-11-27
  • 2022-02-25
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案