预习第三章
运算方法和运算部件
一、高级语言和机器指令中的运算
1.C程序中涉及的运算
1)按位运算
C语言中按位运算有:符号|表示按位OR运算;符号&表示按位AND运算;符号~表示按位NOT运算;符号^表示按位XOR运算。
2)逻辑运算
C语言中的逻辑运算有:符号||表示OR运算;符号&&表示AND运算;符号!表示NOT运算。
逻辑运算是非数值计算,其操作数只有两个逻辑值:True和False,通常用非0数表示逻辑值True,用全0数表示逻辑值False。
3)移位运算
a、移位操作有逻辑移位和算术移位两种。
b、逻辑移位不考虑符号位,总是把高(低)位移出,低(高)位补0。对于无符号整数的逻辑左移,如果最高位移出的是1,则发生溢出。
c、算术移位方式,左移时,高位移出,低位不0,每移一位,如果左移前、后符号为不同,则发生溢出;右移时,低位移出,高位补符号位。
d、每左移一位,相当于数值扩大了一倍,所以左移可能会发生溢出,左移k位,相当于数值乘以2^k;每右移一位,相当于数值缩小一半,右移k位,相当与数值除以2^k。
4)位扩展和位截断运算
a、进行位扩展时,扩展后的数值应保持不变。有两种位扩展方式:0扩展和符号扩展。
b、0扩展用于无符号数,只要在短的无符号数前面添加足够的0即可。符号扩展用于补码表示的带符号整数,通过在短的带符号整数前添加足够多的符号位来扩展。
c、位截断发生在将长数转换成短数时。
2.MIPS指令中涉及的运算
二、基本运算部件
1.串行进位加法器
全加器用来实现两个本位数加上低位进位生成一位本位和以及以为向高位的进位。
Fi、Ci被分别称为“全加和”和“全加进位”。
串行进位方式:对于图3.4所示的n位加法器,X与Y逐位相加,位间进位串行传送。
行波进位加法器:串行进位加法器中的最低位C0,它把进位逐步从低位扩展到最高位。
加法运算时间随两个加数位数n的增加而增加。当n较大时,串行进位的加法器将显著变慢。
2.并行进位加法器
实现上述逻辑表达式(3-3)的电路称为先行进位(也称超前进位)部件,简称CLA部件。通过这种进位方式实现的加法器成为全先行进位加法器。
因为各个进位是并行产生的,所以是一种并行进位加法器。
3.带标志加法器
n位无符号数加法器只能用于两个n位二进制数相加,不能进行无符号整数的减运算,也不能进行带符号整数的加/减运算。
要能够进行无符号整数的加/减运算和带符号整数的加/减运算,还需要在无符号加法器的基础上增加相应的逻辑门电路,使得加法器不仅能计算和/差,还要能够生成相应的标志信息。
4.算术逻辑部件
ALU是一种能进行多种算术运算与逻辑运算的组合逻辑电路,其核心部件是带标志加法器,多采用先行进位方式。
三、定点数的运算
1.补码加减运算
[x+y]补和[x-y]补的运算表达式如下:
[x+y]补=[x]补+[y]补(mod2^n)
[x-y]补=[x]补+[-y]补(mod2^n)
在补码表示方式下,无论x、y是正数还是负数,加、减运算统一采用加法来处理,而且[x]补和[y]补的符号位(最高有效位MSB)可以和数值位一起参与运算。
有以下两种溢出判断逻辑表达式:
(1)若符号位产生的进位Cn与最高数值位向符号位的进位Cn-1不同,则产生溢出;
(2)若两个加数的符号位相同,且与和的符号位不同,则产生溢出。
2.源码加减运算
源码加减运算规则如下:
(1)对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
(2)求和时,数值位相加,若最高位产生进位则结果溢出。和的符号位取被加数(或被减数)的符号。
(3)求差时,被加数(或被减数)数值位加上加数(或减数)数值位的补码,并按以下规则产生结果:
a、最高数值位产生进位,表明加法结果为正,所得数值位正确。
b、最高数值位没有产生进位,表明加法的结果为负,得到的是数值位的补码形式,因此,需要对结果求补,还原绝对值形式的数值位。
c、在上述a的情况下,差的符号位取被加数(或被减数)的符号;在上述b的情况下,符号位为被加数(或被减数)的符号求反。
3.移码加减运算
[E1]移+[E2]移=[E1+E2]补(mod2^n)
[E1]移-[E2]移=[E1-E2]补(mod2^n)
移码的和、差等于和、差的补码。
4.原码乘法运算
1)原码一位乘法
用原码实现乘法运算时,符号位与数值位分开计算。分为两步:
a、确定乘积的符号位。由两个乘数的符号位异或得到。
b、计算乘积的数值位。乘积的数值部分为两个乘数的数值部分之积。
问题:
位扩展和位截断运算、基本运算部件没看怎么明白。