控制语句就是分支,和循环. 今天先来看看分支的相关指令. 条件判断: 条件码 条件判断: 跳转指令 条件判断: 条件传送 条件码 条件码是一些特殊的寄存器, 在每次算术或者逻辑运算之后更新, 也有特殊的指令可以操作这些寄存器. 很多条件分支指令, 就是通过检测这些寄存器的值来实现的. 常用的条件码有
传送指令主要有如下: 普通传送 零扩展传送 符号扩展传送 压栈和弹栈 算术指令比较多了,而且也都区分长度,主要从以下几个方面介绍: leaq 指令 一元与二元操作 移位操作 特殊操作 - 128位扩展 数据传送指令 我们不生产数据,我们只是数据的搬运工. -MOV类指令. MOV类指令有四个变体,对
获取源程序对应的汇编程序 如果想要获取自己编写的源程序对应的汇编程序,基本步骤是: 将自己的文件用GCC转换成目标代码 使用反汇编器得到格式良好的汇编代码 其中第一步, 也可以直接使用GCC转换成汇编代码,可以指定优化的级别. 按照书上写了这么一个程序: long mult2(long, long)
二进制小数 就像十进制小数一样,二进制的小数点左边是正幂,右边是负幂,只不过幂底由10变成2。小数点可以移动,左移表示除以2,右移表示乘以2。 同十进制小数只能精确表示10的幂组成的数一样,二进制小数也只能精确表示由2的幂组成的数。同十进制小数一样,如果想要更接近不能精确表示的数,只有通过增加位数来
整数运算也分为两种,无符号整数和有符号整数。 无符号加减法 无符号就是简单将两个二进制位相加。但是结果存在溢出的问题,即结果无法放到字长的限制中去。 如果字长是w,则无符号数最大就是2的w次方减1,这就导致如果两个数的和如果到达2的w次方,结果实际上就少了2的w次方。比如字长为4,1001+1001
袁春风的书讲的稀里糊涂。确实直接看CSAPP就很好。 整数的大类有两种,一种只能表示非负数,一种可以表示负数,零和正数。虽然通常叫无符号数,但是CSAPP的这个讲法显然更容易懂。 无符号数的编码 无符号数的编码,等于每位二进制数乘以总权重,最右边一位是2的0次方,然后是2的1次方。依次类推。 无符号
CSAPP 第二章 信息存储 昨晚加班到2点钟,今天稀里糊涂的,还是做点题目来冷静一下。目前进度到40页,把第二章的第一部分,信息存储看完了。 第一大部分是进制之间的转换,目前主要是十六进制和二进制以及十进制之间的转换。 2.1 完成数字转换 0x39A7F8,转换成二进制,就是把每位16进制展开,
看到前边多进程的时候就知道肯定后边有多线程,否则只用进程就太重型了。但是使用线程就要碰到数据共享的问题了。 创建线程 C的线程库是pthread.h,使用这个库来操作线程。 使用线程的步骤是: 创建需要在线程中运行的函数 创建一个结构pthread_t pthread_create()创建并立刻运行
开始看C下边的网络编程了。前边的一堆系统编程算是刚消化完基础使用。现在要来看网络编程了。 简单的服务器 网络编程么,只要不是想直接控制TCP/IP协议,一般都会选择抽象程度比较高的套接字来通信。 先来写一个简单的服务器,分这么几步: 创建套接字 把套接字绑定端口 开始监听 接受连接 写套接字信息 创