6.3 定点运算

一、移位运算

1.移位运算的数学意义

左移:绝对值扩大;右移:绝对值缩小。(都是数据相对于小数点移位)在计算机中,移位与加减配合,能够实现乘除运算

2.算术移位规则

(1)符号位不变

(2)数据位规则如表3.1所示。

表3.1 移位规则

 码制添加代码
正数原码、补码、反码0
负数原码0
补码左移右侧0
右移左侧1
反码1(代表原码里面是0)

 

:设机器数字长为 8 位(含1位符号位),写出 A = +26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。

解:A=+26=+11010

则原码、补码、反码均为0,0011010

移位操作机器数对应的真值
[A]原=[A]补=[A]反
移位前0,0011010+26
左移1位0,0110100(数值最高位丢弃)+52
左移2位0,1101000+104
右移1位0,0001101+13
右移2位0,0000110+6

:设机器数字长为 8 位(含1位符号位),写出 A = -26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。

解:A=-26=-11010

则原码为1,0011010,反码为1,1100101,补码为1,1100110

原码结果如下:

移位操作机器数对应的真值
移位前1,0011010-26
左移1位1,0110100(数值最高位丢弃)-52
左移2位1,1101000-104
右移1位1,0001101-13
右移2位1,0000110-6

补码结果如下:

移位操作机器数对应的真值
移位前1,1100110-26
左移1位1,1001100(数值最高位丢弃)-52
左移2位1,0011000-104
右移1位1,1110011-13
右移2位1,1111001-7

反码:

移位操作机器数对应的真值
移位前1,1100101-26
左移1位1,1001011(数值最高位丢弃)-52
左移2位1,0010111-104
右移1位1,1110010-13
右移2位1,1111001-6

 

3.算术移位的硬件实现

图3.1 算法移位的硬件实现

在移位过程如果1被移掉会怎样:

左移:(a)出错(b)出错(c)正确(丢掉0出错)(d)正确

右移:(a)影响精度(b) 影响精度(c) 影响精度 (d)正确

 

4.算术移位与逻辑移位的区别

算术移位:有符号数的移位(符号位不动);逻辑移位,无符号数的移位(符号位也参加移动)

逻辑左移,低位添0,高位移丢;逻辑右移,高位添0,低位移丢。

 

二、加减法运算

1.补码加减法运算的公式

如图3.2所示。

图3.2 补码加减运算公式

2.溢出的判断

(1)一位符号位判溢出

参加操作的两个数(减法时即为被减数和“求补”以后的减数)符号相同,其结果的符号与原操作数的符号不同,即为溢出

硬件实现:最高有效位的进位(异或)符号位的进位=1,溢出。

如:

简单说一下,假如原来两个数都是正数,那么符号位是0,如果他们相加,进到符号位了一个1,符号位变成了1,但是符号位不会向上进位,所以符号位进位为0。所以符合有溢出的第1种情况。其它可以如此解释。

(2)两位符号位判溢出

3.补码加减法的硬件配置

[x]补’+[y]补’=[x+y]补’

[x-y]补’=[x]补’+[-y]补’

结果的双符号位相同未溢出:00,xxxxx/11,xxxxx

结果的双符号位不同溢出:10,xxxxx/01,xxxxx

最高符号位代表其真正的符号

3.补码加减法的硬件配置

图3.3 补码加减法的硬件配置

三、乘法运算

1.原码的乘法运算

一些认识:

(1)乘法运算可以用加和移位实现;

(2)由乘数的末位决定被乘数是否与元部分积相加,然后右移1位形成新的部分积,同时乘数左移1(末位丢弃),空出高位存放部分积的低位;

(3)被乘数只与部分积的高位相加

(1)原码一位乘运算规则

以小数为例

2.补码的乘法运算

(1)补码一位乘法运算

以小数为例:设备乘数[x]补=x0.x1x2…xn,乘数[y]补=y0.y1y2…yn

①被乘数任意,乘数为正

与原码乘相似,但加和移位按补码规则运算。乘积符号的自然形成

②被乘数任意,乘数为负

乘数[y]补去掉符号位,操作同①。最后加[-x]补,校正。

③Booth算法(被乘数、乘数符号任意

如图3.4所示。

图3.4 Booth算法

④Booth算法递推公式

图3.5 Booth算法递推公式

整数乘法和小数乘法过程完全相同,可用逗号代替小数点。原码乘,符号位单独处理,补码乘,符号位自然形成。

原码乘去掉符号位运算,即为无符号数乘法。不同的乘法运算需有不同的硬件支持。

四、除法运算

1.笔算除法

心算上商,余数不动低位补“0”,然后减右移一位的除数,上商的位置不固定。

2.笔算除法与机器除法的比较

笔算除法机器除法
商符单独处理,心算上商符号位异或形成,|x|-|y|>0,上商1;否则上商0
余数不动,低位补0,减右移一位的除数。余数左移一位,低位补零,除数。
2倍字长加法器,上商位置不固定1倍字长加法器,在寄存器最末尾上商。

 

3.原码除法

以小数为例

[x]原=x0.x1x2…xb

[y]原=y0.y1y2…yn

[x/y]原=x0⊕y0·x*/y*

式中,x*=0.x1x2…xn为x的绝对值;y*=0.y1y2…yn为y的绝对值。

商的符号位单独处理:x0⊕y0;数值部分为绝对值相除x*/y*。

约定:小数定点除法x*<y*,整数定点除法x*>y*。被除数不等于0,除数不能为0。

(1)恢复余数法

例6.24 x=-0.1011,y=-0.1101,求[x/y]原,假设机器字长为5位,其中符号位1位,数值位4位。

解:[x]原=1.1011,[y]原=1.1101,[y*]补=0.1101,[-y*]补=1.0011

①x0⊕y0=1⊕1=0

②如下表:

[table id=1 /]

 

所以x*/y*=0.1101

所以[x/y]原=0.1101

余数为正,上商1;余数为负,上商0,恢复余数。

上商5次(第一次是0),第一次上商判溢出,移4次。

(2)加减交替法

运算规则:

设余数为Ri,

上商“1”:2Ri-y*;上商“0”:2Ri+y*。仍然是余数为正,上商1;余数为负,上商0。

例6.25 x=-0.1011,y=-0.1101,求[x/y]原,假设机器字长为5位,其中符号位1位,数值位4位。

解:[x]原=1.1011,[y]原=1.1101,[x*]补=0.1011,[y*]补=0.1101,[-y*]补=1.0011。

图3.6 例6.25图解

特点:上商n+1次,第一次上商判溢出,移n次,加n+1次,用移位的次数判断除法是否结束。

(3)原码加减交替除法硬件配置

图3.7 硬件配置

6.4 浮点四则运算

一、浮点数的加减运算

我们令x=Sx·2jx,y= Sy·2jy

1.对阶

(1)求阶差。如图4.1所示。

图4.1 阶码对齐方案

(2)对阶原则

小阶向大阶看齐。

例如:x=0.1101*201,y=(-0.1010)*211,求x+y。

解:[x]补=00,01;00.1101

由于阶码不相等,所以先需要求阶差。[Δj]补=[jx]补-[jy]补=11,10。所以x要向y看齐。进行对阶:[x]补’=00,11;00.0011

然后进行尾数求和,[Sx]补’+[Sy]补=11.1001。

所以[x+y]补=00,11;11.1001。

3.规格化

(1)规格化数的定义

r=2,1/2<=|S|<1

(2)规格化数的判断

S>0规格化形式S<0规格化形式
真值0.1XX…X真值-0.1XX…X
原码0.1XX…X原码1.1XX…X
补码0.1XX…X补码1.0XX…X
反码0.1XX…X反码1.0XX…X

原码:不论正数、负数,第一数位均为1;补码,符号位和第一数位不同。

特例:

  1. S=-1/2=-0.100…0,其原码为1.100…0,补码为1.100…0,所以[-1/2]补不上规格化的数。
  2. S=-1,[S]补=1.000…0,所以[-1]补是规格化的数。

(3)左规

尾数左移一位,阶码减1,直到数符和第一数位不同为止。

(4)右规

尾数溢出(>1时,需右规。即尾数出现01.XX…X或10.XX…X时。尾数右移1位,阶码加1

两个整数相加就有可能造成01.XX…X这种方式的溢出。其实0是符号位,1是数值位。

 

例6.27 x=0.1101*210,y=0.1011*201。求x+y(除阶符、数符外,阶码取3位,尾数取6位)。

图4.2 例6.27解答

4.舍入

对阶右规过程中,可能出现尾数末位丢失,引起误差,需考虑舍入。

(1)01法;

(2)恒置“1”法。

例6.28 如图4.3所示。

图4.3 例28解答

5.溢出判断(整个浮点数的溢出)

设机器数为补码,尾数为规格化形式,并假设阶符取2位,阶码的数值部分取7位,数符取2位,尾数取n位,则该补码在数轴上的表示为

图4.4 溢出判断

    所谓下溢,就是阶码比-128还小(阶码为10,XX…X),按机器零处理;所谓上溢,就是阶码比127还大(阶码为01,xx…x)。

6.5 算数逻辑单元

一、ALU电路

图5.1 ALU电路

    ALU是一个组合逻辑电路,是没有记忆功能的。为了对输出结果进行保存,要在Ai和Bi还有输出端有寄存器。控制端控制运算方式。例如74181,M=0做算术运算,M=1做逻辑运算。

二、快速进位链

1.并行加法器

图5.2 并行加法器

对于每一个FA,有3个输入(2个输入为加数,1个为仅为信息C)、2个输出(一个是结果Sn,一个是进位信息C)。下面对这个并行加法器做一个分析:

 

Ci生成和Ai、Bi有关系。若Ai和Bi都为1,则一定会进位,Ai或Bi有一个为1,那么Ci-1的值就会被传送给Ci。所以,di=AiBi称为本地进位;ti=Ai+Bi称为传送条件。则Ci=di+tiCi-1。

2.串行进位链(通常情况下)

进位链就是传送进位的电路。串行进位链就是进位进行串行传送。以4位全加器为例,每一位的进位表达式为如图5.3中式子所示。设与非门的级延迟时间为ty

图5.3 串行进位链

    4位全加器产生进位的全部时间为8ty,n为全加器产生进位的全部时间为2nty

3.并行进位链(先行进位,跳跃进位)

n位加法器的进位同时产生,以4位加法器为例如图5.4所示。

图5.4 并行进位链

(1)单重分组跳跃进位链

n位全加器分若干小组,小组中的进位同时产生,小组与小组之间采用串行进位。以n=16为例。如图5.5所示。

图5.5 单重分组跳跃进位链

 

(2)双重分组跳跃进位链

n位全加器分若干大足,大足中又包含若干小组。每个大租中小组的最高位进位同时产生。大组和大组之间采用串行进位。

图5.6 双重分组跳跃进位链