(计算机组成原理)第二章数据的表示和运算-第二节6:定点数除法运算(原码/补码一位除法)

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(计算机组成原理)第二章数据的表示和运算-第二节6:定点数除法运算(原码/补码一位除法)相关的知识,希望对你有一定的参考价值。

一:除法运算基本思想

关于顶点数的除法,我们在小学其实就已经学习过了,就是列竖式除法,比如 0.211 ÷ 0.985 0.211÷0.985 0.211÷0.985,我们首先习惯同时扩大 n n n

在上面的例子中, 0.211 ÷ 0.985 = 0.214 0.211÷0.985=0.214 0.211÷0.985=0.214余210,它就等价于 0.211 = 0.985 × 0.214 + 0.000210 0.211=0.985×0.214+0.000210 0.211=0.985×0.214+0.000210,也就是说这可以转为成乘法的,也即

在计算机中,运算时使用的是二进制,比如 x = 0.1011 x=0.1011 x=0.1011(被除数), y = 0.1101 y=0.1101 y=0.1101(除数), x ÷ y x÷y x÷y如下

运算时忽略小数点,每确定一位商就进行一次减法,得到4位余数,在余数末尾补0,再确定下一位商,确定5位商即可停止(这里机器字长是5位)

  • 如果补位后所得余数部分大于除数,那么就商1
  • 如果补位后所得余数部分小于余数,那么就商0


和乘法一样,补全位数后就是下面这样

因此 x ÷ y x÷y x÷y结果为0.1101,余数为 0.00000111 0.00000111 0.00000111

二:原码一位除法:恢复余数法

(1)实现原理

逻辑看似很简单,但是如何让机器实现这是一个问题。其中符号位的处理就不用再强调了,和乘法一样,仍然使用异或完成,于是实际运算时采用两个数的绝对值完成。

c a s e : case : case:设机器字长为5位( n = 4 n=4 n=4,一位符号位), x = 0.1011 x=0.1011 x=0.1011 y = 0.1101 y=0.1101 y=0.1101,采用恢复余数法求 x ÷ y x÷y x÷y

  • ∣ x ∣ = 0.1011 |x|=0.1011 x=0.1011
  • ∣ y ∣ = 0.1101 |y|=0.1101 y=0.1101
  • [ ∣ y ∣ ] 补 = 0.1101 [|y|]_{补}=0.1101 [y]=0.1101
  • [ − ∣ y ∣ ] 补 = 1.0011 [-|y|]_{补}=1.0011 [y]=1.0011

还记得(计算机组成原理)第一章计算机系统概述-第二节:计算机硬件组成(存储器、运算器和控制器概述及计算机工作过程详解)这一节我们讲到过的运算器的组成吗,其中涉及除法时会用到 A C C ACC ACC M Q MQ MQ X X X这三个寄存器

开始的时候, y y y是除数,位于X寄存器内,ACC寄存器存放的是被除数(x)或余数,MQ中存放商,MQ中灰色加重的方格表示当前要确定的一位商

前面手算时,每一位商到底取0还是1,是通过判断当前余数和除数的大小确定的,因此很显然,我们的ACC寄存区和X寄存区天然就存储了余数和除数。但实际情况是,计算机并不会进行比较,它会不管三七二十一直接商1,如果出错再改为商0,并恢复余数

  • 商1时,其实就是余数减去除数,也即是(ACC)-(X)->ACC

于是,这里首先计算机先商1(但是本应该先商0),因此此时就会求余数:(ACC)-(X)->ACC,也即(ACC)+ [ − ∣ y ∣ ] 补 [-|y|]_{补} [y](计算机依靠加法实现减法),也即 01011 + 10011 = 11110 01011+10011=11110 01011+10011=11110

此时符号位1,计算机察觉错误,于是改为商0,同时既然是商0,那么就不应该减去除数,而应该减去0(什么也不做),所以这里直接采取逆过程,加上除数即可


所以现在我们就完成了一位的商,在手算中,我们商完一位后会错位一位补位,然后再商下一位,而在这里对应的就是将ACC和MQ中的内容逻辑左移即可

接着计算机再次商1,此时检查符号位为0,说明是正的,说明计算机没有商错误,那么不需要恢复余数

剩下的就是不断左移,运算的过程了。
最后我们假定的机器字长为5位,因此只能求5位的商。不过需要注意的是,如果最后一位商1后,导致了ACC出现负数,那么仍然需要改为0,并恢复余数

最后,我们这里举的例子是小数,所以其小数点的位置隐含在符号位后面。最后实际的余数是(ACC)× 2 − n 2^{-n} 2n n n n为机器字长)

(2)手算模拟

考试的时候,如果出到这样的题目,具体步骤如下
c a s e : case : case:设机器字长为5位( n = 4 n=4 n=4,一位符号位), x = 0.1011 x=0.1011 x=0.1011 y = 0.1101 y=0.1101 y=0.1101,采用恢复余数法求 x ÷ y x÷y x÷y

  • ∣ x ∣ = 0.1011 |x|=0.1011 x=0.1011
  • ∣ y ∣ = 0.1101 |y|=0.1101 y=0.1101
  • [ ∣ y ∣ ] 补 = 0.1101 [|y|]_{补}=0.1101 [y]=0.1101
  • [ − ∣ y ∣ ] 补 = 1.0011 [-|y|]_{补}=1.0011 [y]=1.0011

三:原码一位除法:加减交替法(不恢复余数法)

可以看出恢复余数法实际还是挺繁琐的,主要是当余数为负时,它还要加上除数,恢复到上一状态再左移。

而加减交替法是恢复余数的优化,具体规则为:若余数为负,直接商0,并让余数左移1位再加上除数

case : 设 机 器 字 长 为 5 位 ( 设机器字长为5位( 5n=4 , 一 位 符 号 位 ) , ,一位符号位), x=0.1011 , , y=0.1101 , 采 用 恢 复 余 数 法 求 ,采用恢复余数法求 x÷y$

  • ∣ x ∣ = 0.1011 |x|=0.1011 x=0.1011
  • ∣ y ∣ = 0.1101 |y|=0.1101 y=0.1101
  • [ ∣ y ∣ ] 补 = 0.1101 [|y|]_{补}=0.1101 [y]=0.1101
  • [ − ∣ y ∣ ] 补 = 1.0011 [-|y|]_{补}=1.0011 [y]=1.0011

注意:最后一步如果出现负数,仍然需要恢复余数!!!

四:补码一位除法

补码除法采用加减交替法完成,与原码除法的有所区别的是

  • 符号位参与运算
  • 被除数(余数)、除数采用双符号位

运算的具体细节区别如下

  • 原码除法,首先一上来就会让被除数减去除数的绝对值的补码;在补码除法中,若被除数和除数同号,则被除数减去除数,如果异号,则被除数加上除数
  • 得到新的余数后判断:若余数和除数同号,则商1,余数左移一位减去除数;若余数和除数异号,则商0,余数左移一位加上除数。
  • 在原码除法中如果最后一步余数出现负值,那么需要进行恢复余数;在补码除法中,我们直接把最后一位商置为1即可,这样做很省事,其精度也不会超过 2 − n 2^{-n} 2n

c a s e : case : case:设机器字长为5位( n = 4 n=4 n=4,一位符号位), + x = 0.1000 +x=0.1000 +x=0.1000 y = − 0.1101 y=-0.1101 y=0.1101,采用补码加减交替法求 x ÷ y x÷y x÷y

  • [ x ] 补 = 00.1000 [x]_{补}=00.1000 [x]=00.1000
  • [ y ] 补 = 11.0101 [y]_{补}=11.0101 [y]=11.0101
  • [ − y ] 补 = 00.1011 [-y]_{补}=00.1011 [y]=00.1011

因此最后的结果 [ x / y ] 补 = 1.0101 [x/y]_{补}=1.0101 [x/y]=1.0101,余数为 0.0111 × 2 − 4 0.0111×2^{-4} 0.0111×2(计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)

(计算机组成原理)第二章数据的表示和运算-第二节4:定点数的加减运算和溢出判断

(计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位逻辑移位和循环移位)

(计算机组成原理)第二章数据的表示和运算-第二节1:定点数的表示(原码反码补码和移码)

(计算机组成原理)第二章数据的表示和运算-第二节2:原码反码补码和移码的作用

(计算机组成原理)第二章数据的表示和运算-第二节7:详解C语言中的强制类型转换