计算机组成原理

您所在的位置:网站首页 两个数相减叫什么关系呢 计算机组成原理

计算机组成原理

2024-07-10 10:10| 来源: 网络整理| 查看: 265

第三节 定点数运算

  定点数运算包括移位、加、减、乘、除几种。

一、移位运算

  1.移位的意义

  移位运算在日常生活中常见。例如15米可写作1500厘米,单就数字而言,1500相当于小数点左移了两位,并在小数点前面添了两个0;同样15也相当于1500相对于小数点右移了两位,并删去了小数点后面的两个0。可见,当某个十进制数相对于小数点左移n位时,相当于该数乘以10n;右移n位时,相当于该数除以10n。   计算机中小数点的位置是事先约定的,因此,二进制表示的机器数在相对于小数点作n位左移或右移时,其实质就便该数乘以或除以2n(n=1,2...n)。   移位运算又叫移位操作,对计算机来说,有很大的实用价值,例如,当计算机没有乘(除)运算线路时,可以采用移位和加法相结合,实现乘(除)运算。   计算机中机器数的字长往往是固定的,当机器数左移n位或右移n位时,必然会使其n位低位或n位高位出现空位。那么,对空出的空位应该添补0还是1呢?这与机器数采用有符号数还是无符号数有关,对有符号的移位叫算术移位。

  2.算术移位规则

  对于正数,由于[x]原=[x]补=[x]反=真值,故移位后出现的空位均以0添之。对于负数,由于原码、补码和反码的表示形式不同,故当机器数移位时,对其空位的添补规则也不同。下表列出了三种不同码制的机器数(整数或小数均可),分别对应正数或负数,移位后的添补规则。必须注意的是:不论是正数还是负数,移位后其符号位均不变,这是算术移位的重要特点。

  不同码制机器数移位后的空位添补规则

 

码   制

添补代码

正数

原码、补码、反码

0

 

原码

0

负数

补码

左移添0

右移添1

反   码

1

  由上表可得出如下结论:

  (1)机器数为正时,不论左移或右移,添补代码均为0。

  (2)由于负数的原码其数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0。

  (3)由于负数的反码其各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。

  (4)分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同,即添0;右移时困空位出现在高位,则添补的代码应与反码相同,即添1。

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

  解:(1)A=+26=(+11010)2

  则[A]原=[A]补 =[A]反=0,0011010

  移位结果表示如下:

移位操作

机  器   数

对应的真值

[A]原=[A]补=[A]反

移位前

0,0011010

+26

左移一位

0,0110100

+52

左移两位

0,1101000

+104

右移一位

0,0001101

+13

右移两位

0,0000110

+6

  可见,对于正数,三种机器数移位后符号位不变,左移时最高数位丢1,结果出错;右移时最低数位丢1,影响精度。

  (2)A=-26=(-11010)2

  三种机器数移位结果示于下表。

移位操作

机  器   数

对应的真值

移位前

1,0011010

-26

左移一位

1,0110100

-52

左移两位

1,1101000

-104

右移一位

1,0001101

-13

右移两位

1,0000110

-6

移位前

1,1100110

-26

左移一位

1,1001100

-52

左移两位

1,0011000

-104

右移一位

1,1110011

-13

右移两位

1,1111001

-7

移位前

1,1100101

-26

左移一位

1,1001011

-52

左移两位

1,0010111

-104

右移一位

1,1110010

-13

右移两位

1,1111001

-6

  可见,对于负数,三种机器数移位后符号位均不变。负数的原码左移时,高位丢1,结果出错;低位丢1,影响精度。负数的补码左移时,高位丢0,结果出错;低位丢1,影响精度。负数的反码左移时,高位丢0,结果出错;低位丢0,影响精度。   下图示意了机器中实现算术左移和右移操作的硬件框图。其中(a)真值为正的三种机器数的移位操作;(b)负数原码的移位操作;(c)负数补码的移位操作;(d)负数反码的移位操作。

  3.算术移位和逻辑移位的区别

  有符号数的移位称为算术移位,无符号数的移位称为逻辑移位。逻辑移位的规则是:逻辑左移时,高位移出,低位添0;逻辑右移时,低位移出,高位添0。例如,寄存器内容为01010011,逻辑左移为1010010,算术左移为00100110(最高数位“1”移丢)。又如寄存器内容为10110010,逻辑右移为01011001。若将其视为补码,算术右移为11011001。显然,两种移位的结果是不同的。上例中为了避免算术左移时最高数位丢1,可采用带进位(Cy)的移位,其示意图如下图所示。算术左移时,符号位移至Cy,最高数位就可避免移出。

二、加法与减法运算

  加减法运算是计算机中最基本的运算,因减法运算可看作被减数加上一个减数的负值,即A-B=A+(-B),故在此将机器中的减法运算和加法运算合在一起讨论。现代计算机中都采用补码作加减法运算。

  1.补码加减运算的基本公式

  补码加法的基本公式为:

  整数    [A]补+[B]补=[A+B]补  (mod 2n+1)

  小数    [A]补+[B]补=[A+B]补  (mod 2)

  即补码表示肋两个数在进行加法运算时,可以把符号位与数位同等处理,只要结果不超出机器能表示的数值范围,运算后的结果按2n+1取模(对于整数);或按2取模(对于小数),就能得到本次加法的运算结果。

  对于减法因A-B=A+(-B)

  则[A-B]补=[A+(-B)]补

  由补妈加法基本公式可得:

  整数    [A-B]补=[A]补+[-B]补  (mod 2n+1)

  小数    [A-B]补=[A]补+[-B]补  (mod 2)

  因此,若机器数采用补码, 当求A-B时, 只需先求[-B]补(称[-B]补为“求补”后的减数),就可按补码加法规则进行运算。而[-B]补由[B]补连同符号位在内,每位取反,末位加1而得。

  例:x=0.1010,y=-0.0011,用补码的加法求x+y

  解:[x]补=0.1010,[y]补=1.1101

  [x]补+[y]补=0.1010+1.1101=0.0111(按模2的意义,最左边的1丢掉)

      x+y=0.0111 

  例:x=0.1001,y=-0.0011,用补码的减法求x-y

  解:[x]补=0.1001,[y]补=1.1101,[-y]补=0.0011

  [x]补-[y]补=[x]补+[-y]补=0.1001+0.0011=0.1100

      x-y=0.1100

  例:设机器数字长为8位,其中一位为符号位,令A=-93,B=+45,求[A-B]补。

  解:由A=-93=-1011101,得[A]补=1,0100011

      由B=+45=+0101101,得[B]补=0,0101101,[-B]补=1,1010011

      [A-B]补=[A]补+[-B]补=1,0100011+1,1010011=10,1110110

  按模2n+1的意义,最左边的“1”自然丢掉,故[A-B]补=0,1110110,还原成真值得A-B=118,结果出错,这是因为A-B=-138超出了机器字长所能表示的范围。在计算机中,这种超出机器字长的现象,叫溢出。为此,在补码定点加减运算过程中,必须对结果是否溢出作出明确的判断。

  解:由A=-93=-1011101,得[A]补=1,0100011

  2.溢出判断

  补码定点加减运算判断溢出有三种方法。

  (1)用一位符号位判断溢出。对于加法,只有在正数加正数和负数加负数两种情况下才可能出现溢出,符号不同的两个数相加是不会出现溢出的。对于减法,只有在正数减负数或负数减正数两种情况下才可能出现溢出,符号相同的两个数相减是不会出现溢出的。因此在判断溢出时可以根据参加运算的两个数据和结果的符号位进行;两个符号位相同的补码相加,如果和的符号位与加数的符号相反,则表明运算结果溢出;两个符号位相反的补码相减,如果差的符号位与被减数的符号位相反,则表明运算结果溢出。这种方法需要判断操作是加法还是减法,以及运算结果与操作数的符号关系。   符号不同的两个数相加不会产生溢出的原因是字长为n+1位时,数值部分为n位,数值部分的最大绝对值为2n。如果参加运算的两个数x和y的绝对值都小于2n,则(+x)+(-y)和(-x)+(+y)的绝对值都不会大于2n,因此只需考虑(+x)+(+y)和(-x)+(-y)的情况,这时结果z的符号应与x和y的符号相同,即当x0=1且y0=1时,z0=0说明数据溢出;或者当x0=0且y0=0时,z0=1说明数据溢出。这样可列出下表所示的判断逻辑的真值表。

x0    y0    z0

V

0     0     0

0

0     0     1

1

0     1     0

0

0     1     1

0

1     0     0

0

1     0     1

0

1     1     0

1

1     1     1

0

  根据真值表,可得判断溢出的逻辑表达式:

  

  这种溢出判断方法不仅需要判断加法运算的结果,而且需要保持原操作数。

  (2)利用数据编码的最高位(符号位)和次高位(数值部分的最高位)的进位状况来判断运算结果是否发生了溢出。

  

  两个补码数实现加减运算时,若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表明加减运算产生了溢出。因为当x和y均为n+1位正整数时,其和有两种情况:当x+y0时,可上商“0”,然后再做Ri+y*,即完成恢复余数的运算,再做2(Ri+y*)-y*,也即2Ri+y*。   可见,原码恢复余数法可归纳为:   当余数Ri>0时,商上“1”,做2Ri-y*的运算;   当余数Ri



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3