摘要: 源代码如下:#include <stdio.h>int add(int x,int y){ int t = x + y; return t;}int main(void){ int x=4, y=1; return add(x,y);}经过 gcc -S hello.c产生汇编代码如下:add: pushl %ebp movl %esp, %ebp subl $16, %esp movl 12(%ebp), %eax movl 8(%ebp), %edx leal (%edx,%eax), %eax ... 阅读全文
posted @ 2012-12-29 22:58 GOD_YCA 阅读(1255) 评论(0) 推荐(0)
摘要: 今天在看csapp中关于移位操作的处理,上面说逻辑左移和算数左移是等同的,想了想,怎么可能,写了程序测试了一把,发现确实一样,但是这个是有前提条件的,在逻辑左移和算数左移的操作数中,如果左移没有产生有对符号位影响的进位,那么左移都一样,比如int(4字节),它表示的范围为范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]。如果一个数在[-1073741824,1073741823]范围之内,左移一位,不管是逻辑左移还是算数左移都不会对最高位的符号位产生影响,所以左移一样,但是左移两位的话,那么对于int将会产生溢出,此时逻辑左移和算数左移将不一样。算数 阅读全文
posted @ 2012-12-29 16:55 GOD_YCA 阅读(10481) 评论(0) 推荐(1)
摘要: 今天突然想到这三种参数传递方式的调用,主要忘记了三种传递方式的格式什么区别,写了写,本来写了一个c版本的,发现c竟然没有引用传递,好吧,c++里有,真是没有想到。附上代码:#include<iostream>using namespace std;void f1(int &a,int &b){ int tmp; tmp=a; a=b; b=tmp;}void f2(int a,int b){ int tmp; tmp=a; a=b; b=tmp;}void f3(int *a,int *b){ int tmp; tmp=*a; ... 阅读全文
posted @ 2012-12-29 15:22 GOD_YCA 阅读(531) 评论(0) 推荐(0)