第3章 运算方法和运算部件

本文深入探讨了高级语言如C中的按位、逻辑、移位运算,以及运算部件如串行、并行进位加法器的工作原理。介绍了定点数的补码、原码加减乘除运算,并详细讲解了乘法器的实现方法,包括原码一位乘和两位乘,以及快速乘法器的设计。同时,文章阐述了如何判断溢出和使用带标志的加法器进行运算。
摘要由CSDN通过智能技术生成

1.高级语言和机器指令中的运算

1.C语言中的运算

1.按位运算

应用:掩码(masking)运算:通过与给定的一个位模式进行按位与,可以提取所需的位,然后对这些位进行“置1、清0、1测试、0测试”,例如:0x0F(0000 1110) & 0x8C的运算结果是0x8C,抹掉了位模式规定的不能有值的位。

2.逻辑运算

与按位与那算是不一样的,其只有两个值,非0和全零

3.移位运算

用来简化编译,左移*2,右移/2,比乘除法强多了
不考虑符号位,总是高位移出,低位补零。对于无符号数如果高位是1,则发生溢出。因为计算机内部是补码表示,所以对于带符号整数都是用补码表示的,所以对于带符号整数的移位操作应采用补码算术移位方式。左移时,高位移出,低位补0,没意义为,如果溢出的高位不同于移位后的符号位,则左移前、后符号位不同,右移时,低位移出,高位补符号位。

4.位扩展和位截断运算

扩展:无符号补0,有符号补符号(因为补码要加上的数会更大,所以补的是符号位)
截断:去掉高位
但截断以后有可能会溢出,因为如果截断以后的位数不能表示这么大的数,就溢出了。比如:32768是2的15次方,用32位int型肯定能存下,但是如果截断成16位,高16位被截掉,就会超出16位可以表示的最大正数32767,所以就会溢出了。

2.基本运算部件

整体的思路就是用ALU来完成各种运算,其核心部件是加法器

1.串行加法器

首先补充与,或,异或的作用:

  • 与:保留某一位、一位乘(和1乘不动,和0乘变成0)
  • 或:清除某一位
  • 异或:与0异或不动,与1异或取法,所以可以用作加法。加一取法,加零不变

由上述作用可以确定本位的数字是,加数,被加数,前面的进位三者相加(异或)的来,有新的进位任意两个相乘然后的新的和,原因是:至少有一两位1的时候进位才是1,换句话说,三个数中最多有1个0,任意两个相乘只要不会多余1个0,结果都是1。

所以两级进位是两级门的延迟

n位串行加法器从C0到Cn一共是2n级延迟,从一开始到最后一位和数是2(n-1)+3=2n+1级延迟

为了提高加法的速度,就必须避免进位之间的依赖关系

2.并行进位加法器

原来每个进位依赖于前面的数一步步算过来,太慢了,所以,通过推倒发现每一位的进位只跟两个函数有关,一个是进位传递函数 Pi=Xi+Yi(若X和Y中如果有一个是1,若有低位进位输入,则一定会被传递到高位,这个仅为可以看作是低位仅为越过本为直接向高位传递的) 一个是进位生成函数GiXi+Yi(当X和Y都是1的时候,无论有无低位进位输入,本位一定向高位产生进位输出)
因为每一位的进位只跟X和Y有关,所以就直接每一位直接按公式加起来(异或)得结果即可,但是,虽然这样很快能运算,但是输入端得个数随着输入的增加而大幅加大,所以一般采用并行进位加法器和行波进位加法器串联的方式进行,当然组内可以并行,组外也可以并行

3.带标志加法器

判断是否溢出的方法:
双符号位:00的时候表示正数,11表示负数,01表示正数溢出为负数,10表示负数溢出为正数,总结:高位符号位表示结果本来的符号。
单符号位:因为溢出的表象是符号位发生改变,所以,最高位和次高位都有进位或都没有进位的时候就没有溢出,否则就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值