摘要: int exchange(int *xp,int y){ int x=*xp;*xp=y;return x;}省略了栈的建立和完成部分的汇编代码如下://xp at %ebp+8,y at %ebp+121 movl 8(%ebp),%edx2 movl (%edx),%eax3 movl 12(%ebp),%ecx4 movl %ecx,(%edx)注:1.int x=*xp;表示将读存储在xp所指位置中的值,并将它存放在名字为x的局部变量中;2.*xp=y;表示将参数y的值写到xp所指向的位置;3.间接引用指针就是将该指针放在一个寄存器中(movl 8(%ebp),%edx... 阅读全文
posted @ 2011-08-19 22:58 llkkyy 阅读(498) 评论(0) 推荐(0) 编辑
摘要: C语言中规定,在执行一个运算时,如果它的一个运算数是有符号的而另外一个是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号数。这可以说是一个“妇孺皆知”的规定,但往往由于对它的不重视,引起了一些难以发现的错误。我们来看一个简单的函数,函数功能是实现数组元素的求和,数组长度由length给出。float sum_element(float a[],unsigned length){int i;float result=0;for(i=0;i<=length-1;i++) result+=a[i];return result;}当参数length为0时,函数似乎应该返回0.0。然而 阅读全文
posted @ 2011-08-19 16:16 llkkyy 阅读(418) 评论(0) 推荐(1) 编辑