计算机组成原理学习笔记——定点数及其运算

一、基础概念

1、定点数的定义

  • 计算机中,小数点不用专门的器件表示,而是按约定的方式标出,共有两种表示小数点的存在的方法:定点表示和浮点表示。定点表示的数称之为定点数。

2、定点表示

  • 所谓定点就是将小数点固定在某一个位置,针对纯小数和纯整数,定点表示有两种格式:
    在这里插入图片描述
  • 小数点在符号位和第一位数值位之间的称之为纯小数,也就是图上的第一种表示方式;而位于数值部分之后的就是纯整数,对应图中第二种表示形式。
  • 采用定点数的机器称之为定点机,而数值部分的位数决定了定点机的表示范围;以原码为例,小数定点机所能表示的数的范围是:-(1 - 2^-n) ~ (1 - 2^-n);正数定点机中数的表示范围是 -(2^n-1) ~ (2^n - 1).

3、注意事项

  • 在定点机中,由于小数点的位置固定不变,故当机器处理的数不是纯小数或者纯整数时,必须乘上一个比例因子,否则会产生“溢出”。

二、定点运算

  • 定点运算包括移位、加、减、乘和除。

1、移位

1.1、移位定义

  • 移位运算是指对小数点的位置进行移动,由于计算机中小数点的位置事先约定好的,因此在对机器数的小数点进行左移或右移 n 位时,相当于该数乘于或除以 2^n 。移位和加法结合可以实现乘除运算;对于有符号数,移位称作算术移位;对于无符号数称之为逻辑移位。
  • 小数点向前移动(向高位移动)称之为右移,小数点向后移动(向低位移动)称之为左移。是左移还是右移,看的不是小数点的移动方向,而是整个数的移动方向。

1.2、算术移位

1.2.1、算术移位规则
  • 对于正数,原码、补码和反码和真值是一样的,故移位后出现的空位均以 0 添补;而负数则根据采用的表示形式有不同的添补规则,如下:
    在这里插入图片描述
1.2.2、结论
  • 1)机器数为正时,不论左移还是右移,皆添补 0。
  • 2)对于机器数为负数的,由于原码数值部分与真值同,故在移位时若符号不发生变化,空位皆添补 0;负数反码数值部分与原码相反,故移位后添补的代码应与原码相反,也就是 1;
  • 3)对于负数补码,当对其由低位向高位找到第一个 “1” 时,在此“1”左边各位均与对应的反码相同,而此“1”右边包括本身在内的各位均与对应的原码相同;故负数补码移位时,左移出现的空位都在低位,则添补的代码与原码相同即“0”,右移时空位出现在高位,则添补的代码与反码相同即“1”。
1.2.3、例题

在这里插入图片描述

  • 对于正数。三种机器数移位后符号位不变,左移最高位丢 1,结果出错;右移最低位丢 1,影响精度。
  • 当 A=-26 时
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.3、逻辑移位

  • 逻辑移位将操作数视为无符号数,规则是:左移高位移丢低位补零,右移低位移丢高位补零,也就是说无论左移右移,逻辑移位统一补零。

2、加减法

2.1、原码加减法

在这里插入图片描述

2.2、补码加减法

  • 特点:
  • 参与运算的两个操作数皆是补码;按二进制运算规则运算,逢二进一;符号位与数值位按同样规则运算,符号位产生的进位丢弃,结果的符号位由运算得到;运算结果仍是补码。
  • 运算规则:
    在这里插入图片描述
    在这里插入图片描述

2.3、例题

在这里插入图片描述

  • 按模2的意义,最左边的 1 丢掉,所以结果为 0.0110
    在这里插入图片描述
    在这里插入图片描述
  • 可见,不论操作数是正是负,做补码减法时只需将符号位与数值位一起参加运算,并将符号位产生的进位丢掉即可。
    在这里插入图片描述

2.4、溢出判断

  • 判断补码加减法是否溢出由两种方法:一位符号判断法和双符号位判断法。
1)一位符号判断法
  • 在加法中,只有正数加正数和负数加负数的情况下才会产生溢出,也就是符号不同的两个数相加不会产生溢出;而减法则相反,正数减负数和负数减正数会产生溢出,也就是符号相同的两个数相减不会产生溢出。
  • 以机器字长为 4 举例,机器字长为 4 则真值范围在 -8~ +7,不在这个范围的都属于溢出:
    在这里插入图片描述
    在这里插入图片描述
  • 两操作数符号均为 1,结果符号为 0,故为溢出。
    在这里插入图片描述
  • 结果的符号同原操作数符号,故未溢出。
  • 采用一位符号位判断溢出时,通常用符号位产生的进位与最高有效位产生的进位进行异或操作,若异或结果为 1 则溢出,为 0 则无溢出,也就是对应上述两例。
2)双位符号位判断法
  • 两位符号位的补码定义如下:
    在这里插入图片描述
  • 以 4 为模,是一种变形补码。
  • 用变形补码做加法时,2 位符号位同数值部分一起参与运算,高位符号位产生的进位自动丢失,即:
    在这里插入图片描述
  • 变形补码判断溢出的规则:当 2 位符号位不同时,表示溢出,否则不溢出;且无论是否溢出,高位(第一位)符号永远代表真正的符号。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 上述结论对于正数同样成立。
  • 需要注意的是,采用双符号位时,寄存器或主存中只需保存一位符号位即可;但是,双符号位在加法器中是必要的,因此在相加时,寄存器中的一位符号位的值需要同时送到加法器的两位符号位的输入端。

2.5、符号拓展

  • 有些时候,需要将一个数从低机器字长表示转为高机器字长的表示,例如 当需要将一个 8 位数与一个 32 位数相加时,,需要先将 8 位数转换成 32 位数形式,这个过程称之为“符号拓展”;正数拓展在新表示形式的所有附加位上用 0 补充即可;对于负数,原码的符号拓展与正数相同,补码时小数补零整数补一,反码补1。

3、乘法

  • 乘法这里主要学习原码一位乘法和补码一位乘法(Booth 算法)。

3.1、原码一位乘法

在这里插入图片描述

  • 原码一位乘法的运算步骤总结如下:
    a、被乘数与乘数取绝对值参与运算,符号位由两数的符号位异或运算的结果决定;
    b、部分积的长度同被乘数,取 n+1 位,初值为 0,便于进位;
    c、从乘数最低位开始判断,值为1 则部分积加上被乘数绝对值,然后右移一位;若值为 0,则部分积直接右移一位;
    d、重复 c,判断 n 次。
  • 例题
    在这里插入图片描述
    在这里插入图片描述
  • 由于乘积的数值部分是两个绝对值相乘的结果,故原码一位乘法运算过程采用逻辑移位。

3.2、Booth 算法

  • 该种补码一位乘法,又被叫做比较法。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • Booth 算法的一位补码乘法步骤总结如下:
    a、符号位参与运算,运算的数均以补码表示;
    b、被乘数去双符号位参与运算,部分积取双符号位,初值为 0,乘数取单符号位;
    c、乘数末位增设 n+1 位,初值为 0;
    d、根据 (yn,yn+1) 的取值确定操作;
    e、重复上述步骤 n+1 次,但是第 n+1 次不用移位,仅根据 yn 与 yn+1 的比较结果做相应运算。
    在这里插入图片描述
    在这里插入图片描述

3.3、乘法总结

在这里插入图片描述

4、除法

  • 这里主要学习原码除法中的不恢复余数法和补码加减交替法。

4.1、原码除法

  • 该方法又称为原码加减交替除法,特点是商符和商值是分开进行的,商符由两个操作数的符号位异或运算的结果决定。运算规则如下:
  • 设〖[X]〗_原=x_s. x_1 x_2…x_n 、〖[Y]〗_原=y_s. y_1 y_2…y_n,x 为被除数,y 为除数,则
    1)、商符=Xs⊕Ys
    2)、商值=|Q|=|X|/|Y|,求 |Q| 的规则如下:
    a、先用被除数减去除数(|X|-|Y|=|X|+(-|Y|)=|X|+[-|Y|]补),当余数为正时,商上 1,余数和商左移一位,再减去除数;当余数为负数时,商上 0,余数和商左移一位,再加上除数。
    b、当第 n+1 步余数为负时,需加上 |Y| 得到第 n+1 步正确的余数(余数与被除数同号)
  • 例题:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4.2、补码除法

  • 符号与数值位一起参与运算,商符自然形成。除法第一步根据被除数和除数的符号决定做加法还是减法:
    在这里插入图片描述
  • 是否上商根据余数和除数的符号位决定:同号上 1,异号上 0;最后一步恒置 1.
  • 具体规则如下:
    a、统一用补码表示,符号参与运算
    b、若被除数与除数同好,被除数减除数;反之被除数加除数
    c、若余数余除数同号,商上 1,余数左移一位减去除数;反之,商上 0,余数左移一位加上除数。
    d、重复执行 c 步操作 n 次,若对商无精度要求,采用末位恒置 1.
  • 例题
    在这里插入图片描述
    在这里插入图片描述

4.3、除法总结

在这里插入图片描述

上一篇
下一篇

发布了184 篇原创文章 · 获赞 24 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42896653/article/details/104531899