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

快乐江湖 快乐江湖     2022-12-15     631

关键词:

一:乘法运算基本思想

关于定点数的乘法,其实我们在小学就学习过,就是经典列竖式相乘

其中,我们印象最深的应该就是计算过程中的错位问题了。

在计算机中,相乘时使用的二进制,其基本逻辑和竖式相乘一致。如下是两个二进制数相乘,其中被乘数为 0.1101 0.1101 0.1101,乘数为 0.1011 0.1011 0.1011

我们将乘数看作为位权之和,即 0.1011 = 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 + 1 × 2 − 4 0.1011=1×2^-1+0×2^-2+1×2^-3+1×2^-4 0.1011=1×21+0×22+1×23+1×24
,被乘数写成 a a a 1 0 n 10^n 10n相乘的形式,即 0.1101 = 1101 × 2 − 4 0.1101=1101×2^-4 0.1101=1101×24

那么此乘法过程可以等价为下面的形式

把竖式写全也就是下面的这个样子

由于二进制的乘数每一位只可能出现0或1,因此每次运算的结果要么是全0,要么只是被乘数乘以 1 0 n 10^n 10n,实际结果只是小数点的不同,而计算机处理小数点位置非常方面,使用移位操作即可完成

二:原码一位乘法

(1)实现原理

逻辑看似很简单,但是如何让机器实现这是一个问题。如果要实现这一问题,必须解决以下三个问题

  • 实际数字有正有负,符号位应当如何处理?
  • 乘积运算时位数扩大很厉害,如何处理?
  • 每次运算时的结果都要保存下来,如果相加?

其中符号位很方便处理,符号位 = x s ⊕ y s =x_s⊕y_s =xsys即可判断,让数值位取绝对值进行乘法运算即可。

c a s e : case : case机器字长为 n + 1 = 5 n+1=5 n+1=5位, [ x ] 原 = 1.1101 , [ y ] 原 = 0.1011 [x]_原=1.1101,[y]_原=0.1011 [x]=1.1101[y]=0.1011,采用原码一位乘法求 x y xy xy

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

接下来我们详细叙述一下这个过程。开始, x x x是被乘数, y y y是乘数,因此 x x x位于X寄存器中, y y y位于MQ寄存器中,并且运算开始前要将ACC置为0

对应我们竖式乘法的逻辑,此时从低位到高位,依次用乘数的每一位乘被乘数,因此在这里进行第一次运算时我们把MQ寄存器中参与运算的那一位方块的颜色加深

如果当前参与运算的乘数的这一位是1,则 A C C ACC ACC加上被乘数;如果当前位是0,则 A C C ACC ACC加上0,也即(ACC)+(X)->(ACC)

在进行下一位竖式运算时,必须偏移一个位置,对应于计算机处理时则是让ACC和MQ中的数据统一逻辑右移一位

  • 这样做本质实现的就是错误相加

接着次低位来到了最低位的位置,再次进行(ACC)+(X)->(ACC)


剩余的步骤均重复上述过程

(2)手算模拟

考试的时候,如果出到这样的题目,具体步骤如下
[ X ] 原 = x s [X]_原=x_s [X]=xs [ Y ] 原 = y s [Y]_原=y_s [Y]=ys

  1. 被乘数和乘数均取绝对值参与运算,符号位为 x s ⊕ y s x_s⊕y_s xsys
  2. 部分积的长度同被乘数,取 n + 1 n+1 n+1位,以便存放乘法过程中绝对值大于等于的值,初值为 0 0 0
  3. 从乘数的最低位 y n y_n yn开始判断:若 y n = 1 y_n=1 yn=1,则部分积加上被乘数 ∣ x ∣ |x| x,然后右移一位;若 y n = 0 y_n=0 yn=0,则部分积加上0,然后右移一位。
  4. 重复步骤3,判断 n n n

注意

  • 由于乘积的数值部分是两数绝对值相乘的结果,因此原码一位乘法运算过程中的右移均为逻辑右移
  • 考虑到运算时可能出现绝对值大于1的情况(但并非溢出),所以部分积和被乘数取双符号

c a s e : case: case:设机器字长为5位( n + 1 n+1 n+1), x = − 0.1101 x=-0.1101 x=0.1101 y = 0.1011 y=0.1011 y=0.1011,采用原码一位乘法求解 x y xy xy

解: ∣ x ∣ = 00.1101 |x|=00.1101 x=00.1101, ∣ y ∣ = 00.1011 |y|=00.1011 y=00.1011,过程如下

因此符号位为 P s = x s ⊕ y s = 1 = 1 ⊕ 0 = 1 P_s=x_s⊕y_s=1=1⊕0=1 Ps=xsys=1=10=1,得 x ⋅ y = − 0.10001111 x·y=-0.10001111 xy=0.10001111

三:补码一位乘法( B o o t h Booth Booth算法,考察重点)

定点数乘法中最有可能考察的便是补码一位乘法。因为机器做加减法时采用的是补码,倘若做乘法前再将补码转为原码,计算完成之后再转化为补码,那就很麻烦了,还不如直接用补码计算。

补码一位乘法主要分为校正法和比较法,校正法了解即可,而比较法(又叫 B o o t h Booth Booth算法)则是考察的重点。具体规则如下:

①:被乘数与部分积一般取双符号位,并且符号位参与运算

  • 一个原因是一旦符号位参与运算就一定要使用多符号位,因为一旦溢出,单符号位就会出错
  • 另一个原因是,补码的右移时要看符号位而定的,如果采用单符号位,一旦数值部分的进位把符号给移掉了,下次移位就不知道该怎么办了。

②:乘数取单符号位以决定最后一步是否需要校正,也即是否需要加 [ − x ] 补 [-x]_补 [x]
③:乘数末尾增设辅助位, y n + 1 y_n+1 yn+1,初始值为0
④:根据 y n y_n yn y n + 1 y_n+1 yn+1判断位,进行运算,步骤和上面原码一位乘法一致
⑤:按上述算法进行n+1,其中最后一步也即n+1步不再一位,仅根据 y 0 , y 1 y_0,y_1 y0,y1比较结果决定是否需要加减 x [ 补 ] x_[补] x[]


从上面图中大家可以看出MQ中的最低位现在是辅助位,这里就和原码乘法的最低位不一致了,所以这里我们用带有双引号的——“最低位”表示运算时真正的最低位,而不是辅助位

  • 辅助位减“最低位”=1时, ( A C C ) + [ x ] 补 (ACC)+[x]_补 (ACC)<

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

    文章目录一:使用原码实现加减法基本逻辑(1)原码加法(2)原码减法二:使用补码实现加减法三:溢出判断(1)采用一位符号位依据溢出表达式判断(2)采用一位符号位依据进位情... 查看详情

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

    文章目录一:算数运算(1)原码的算数移位(2)反码的算术移位(3)补码的算数移位二:逻辑移位三:循环移位定点数的移位运算根据操作对象的不同划分为算数移位和逻辑移位。有符号数的... 查看详情

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

    文章目录一:机器数的定点表示二:无符号数和有符号数的表示(1)无符号数(2)有符号数三:原码、补码、反码和移码(1)原码A:定点整数的原码表示B:定点小数的原码表示(2... 查看详情

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

    文章目录一:除法运算基本思想二:原码一位除法:恢复余数法(1)实现原理(2)手算模拟三:原码一位除法:加减交替法(不恢复余数法)四:补码一位除法五:总结一:... 查看详情

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

    ...:原码直接运算的弊端前面我们刚说了各种码,计算机中的各种数是要经过大量运算的,如果在这里我们不管别的,直接按照习惯采用原码对应二进制位相加的话,如果是无符号数那么结果正确,比如下面... 查看详情

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

    ...学习完前面几节的内容后,相信大家对数据是如何在计算机中存储、运算的有了更加深入的认识,那么接下来我们就以更深层次的角度来看看我们熟悉的C语言中的强制类型转换(1)无符号数和有符号数有 查看详情

    (计算机组成原理)第二章数据的表示和运算-第一节5:本章习题

    文章目录1.下列各种数制中,最小的数是2.7E5H+4D3H等于多少3.若十进制数为137.5,则八进制数为 查看详情

    (计算机组成原理)第二章数据的表示和运算-第一节:bcd码

    文章目录一:什么是BCD码二:常用的BCD码(1)8421码(最常用)(2)余3码(3)2421码一:什么是BCD码BCD(Binary-CodedDecimal)是指二进制编码的十进制数。我们可以用4位二进制数来表示一位十... 查看详情

    (计算机组成原理)第二章数据的表示和运算-第三节1:浮点数的表示(代码片段)

    文章目录一:浮点数的表示格式二:浮点数尾数的规格化(1)左规和右规(2)规格化浮点数的特点三:浮点数表示范围(408考试大纲已删除)浮点表示法是指以适当的方式将比例因子表示在数... 查看详情

    (计算机组成原理)第二章数据的表示和运算-第一节4:校验码

    文章目录一:预备概念(1)校验码的概念(2)码字和码距二:常见校验码(1)奇偶校验码(2)海明校验码A:纠错理论B:求解海明码C:补充-全校验位(3)循环冗余校验... 查看详情

    (计算机组成原理)第二章数据的表示和运算-第三节3:浮点数加减运算

    文章目录一:以十进制下的科学计数法的加减运算为例说明浮点数加减运算二:浮点数的加减运算(不舍入)三:浮点数的加减运算(舍入)四:浮点数强制类型转换一:以十进制下的科学计数... 查看详情

    (计算机组成原理)第四章指令系统-第二节2:数据寻址(直接寻址间接寻址立即数)

    文章目录一:指令寻址和数据寻址二:数据寻址(1)直接寻址(2)间接寻址(3)寄存器寻址(4)寄存器间接寻址(5)隐含寻址(6)立即寻址一:指令寻址和数据寻址上一节我们讲到了指令寻址:下一条欲执行指令的地址会由... 查看详情

    (计算机组成原理)第二章数据的表示和运算-第三节2:ieee754标准(代码片段)

    文章目录一:移码(1)移码回顾(2)偏置值二:IEEE754标准(1)IEEE754标准格式(2)转换方法(3)表示范围一:移码(1)移码回顾本节内容涉及移码,有关移码的基... 查看详情

    (计算机组成原理)第二章数据的表示和运算-第一节:字符与字符串在计算机中的表示详解

    ...与ASCII编码二:汉字的表示和编码三:字符串由于计算机内部职能识别和处理二进制代码,所以字符都必须按照一定的规则用一组二进制编码来表示一:字符编码与ASCII编码目前,国际上普遍采用的字符系统是7... 查看详情

    (计算机组成原理)第四章指令系统-第二节3:数据寻址之偏移寻址(基址寻址变址寻址和相对寻址)

    ...址(1)基本概念(2)相对寻址作用本小节承接上一节:(计算机组成原理)第四章指令系统-第二节2:数据寻址(直接寻址、间接寻址、立即数),主要介绍以下三种数据寻址方式,它们可以归为一类,都是将形式地址视为“偏移... 查看详情

    (计算机组成原理)第二章数据的表示和运算-第四节1:算数逻辑单元和电路基本知识以及基本逻辑运算和全加器还有串行并行加法器

    文章目录一:最基本的逻辑运算(1)与、或、非(2)与非、或非、异或、同或二:一位全加器三:串行加法器和并行加法器之前的学习我们一直在和数打交道,数字运算过程中一直离不开一个十分... 查看详情

    (计算机组成原理)第六章总线-第二节:总线仲裁

    文章目录一:总线仲裁基本概念(1)主设备和从设备(2)总线仲裁的定义(3)为什么要进行总线仲裁(4)总线仲裁分类二:集中仲裁(1)链式查询方式(2)计数器查询方式三:独立请求方式一:总线仲裁基本概念(1)主设... 查看详情

    (计算机组成原理)第二章数据的表示和运算-第一节:一文总结进制转换,妈妈再也不用担心我不会进制转换了

    文章目录一:进位计数法二:进制转换(1)其他进制数转换为十进制(2)十进制数转化为其他进制数(3)二进制、八进制和十六进制的相互转换一:进位计数法进位计数法是一种计数的方法。... 查看详情