写在前面:
- 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
一、乘法运算
1、分析笔算乘法
笔算乘法时,乘积的符号由两数符号心算而得:正正得正、负负得正、正负得负。其数值部分的运算如下,其中包含了被乘数的多次左移,以及各个位积(乘数的1个位和被乘数相乘的结果)的相加运算。
2、笔算乘法的改进
(1)两数相乘的过程可视为加法和移位(乘相当于做一位右移)两种运算的组合,这对计算机而言是很容易实现的。
(2)举例:
(3)上述运算过程可归纳如下:
①乘法运算可用移位和加法来实现,两个4位数相乘,总共需要进行4次加法运算和4次移位。
②由乘数的末位值确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积;同时乘数也右移一位,由次低位作新的末位,空出最高位放部分积的最低位。
③每次做加法时,被乘数仅仅与原部分积的高位相加,其低位被移至乘数所空出的高位位置。
(4)计算机很容易实现上述这种运算规则。用一个寄存器存放被乘数,一个寄存器存放乘积的高位,另一个寄存器存放乘数及乘积的低位,再配上加法器及其它相应电路,就可组成乘法器,又因加法只在部分积的高位进行,故不但节省了器材,而且还缩短了运算时间。
3、原码乘法(仅介绍一位乘)
(1)以小数为例,两个小数的相乘过程如下:
(2)原码一位乘的运算规则如下:
①乘积的符号位由两原码符号位异或运算结果决定。
②乘积的数值部分由两数绝对值相乘,其通式为:
(3)由于乘积的数值部分是两数绝对值相乘的结果,故原码一位乘法运算过程中的右移操作逻辑右移。
(4)举例:
(5)原码一位乘所需的硬件配置:
①图中 A、X、Q均为n+1位的寄存器,其中X存放被乘数的原码,Q存放乘数的原码,计数器C用于控制逐位相乘的次数,S存放乘积的符号,G为乘法标记。
②移位和加控制电路受末位乘数的控制(当
时,A和X内容相加后,A、Q右移一位;当
时,只作A、Q右移一位的操作)。
(6)原码一位乘控制流程:
①乘法运算前,A寄存器被清零,作为初始部分积,被乘数原码在X中,乘数原码在Q中,,计数器C中存放乘数的位数n。
②乘法开始后,首先通过异或运算,求出乘积的符号并存于S,接着将被乘数和乘数从原码形式变为绝对值。
③然后根据的状态决定部分积是否加上被乘数,再逻辑右移一位,重复几次,即得运算结果。
4、补码乘法(仅介绍一位乘)
(1)补码一位乘运算规则:
①被乘数x的符号任意,乘数y的符号为正:按照原码乘法的规则运算,乘积的符号自然形成。
②被乘数x的符号任意,乘数y的符号为负:去掉乘数补码的符号位,当成一个正数与x的补码相乘,然后加上-x的补码进行校正。
(2)比较法(Booth算法):
①计算公式:
②递推公式:
(3)比较法硬件配置:
①图中A、X、Q均为n+2位寄存器,其中X存放被乘数的补码(含两位符号位),Q存放乘数的补码(含最高1位符号位和最末1位附加位),计数器C用于控制逐位相乘的次数,为乘法标记。
②移位和加控制逻辑受Q寄器末2位乘数控制。当其为01时,A、X内容相加后,A、Q右移一位;当其为10时,A、X内容相减后,A、Q右移一位。
(4)比较法控制流程:
①乘法运算前,A寄存器被清零,作为初始部分积,Q寄存器末位清零,作为附加位的初态,被乘数的补码存在X中(双符号位),乘数的补码在Q高n+1位中,计数器C存放乘数的位数n。
②乘法开始后,根据Q寄存器末两位、
的状态决定部分积与被乘数相加还是相减,或是不加也不减,然后按补码规则进行算术移位,这样重复n次。
③最后,根据Q的末两位状态决定部分积是否与被乘数相加(或相减),或不加也不减,但不必移位,这样便可得到最后结果。补码乘法乘积的符号位在运算中自然形成。
需要说明的是,图中“(A)-(X)→A”实际是用加法器实现的,即“(A)+(X+1)→A”。
二、除法运算
1、分析笔算除法
笔算除法时,商的符号由两数符号心算而得:正正得正、负负得正、正负得负。其数值部分的运算如下。
如果将上述运算过程总结成规则,应该如下:
①每次上商都是由心算来比较余数(被除数)和除数的大小,确定商为“1”还是“0”。
②每做一次减法,总是保持余数不动,低位补0,再减去右移后的除数。
③上商的位置不固定。
④商符单独处理。
如果将上述规则完全照搬到计算机内,实现起来很显然有一定的困难。
按照每次减法总是保持余数不动、低位补0,再减去右移后的除数这一规则,则要求加法器的位数必须为除数的两倍。仔细分析发现,右移除数可以用左移余数的方法代替,其运算结果是一样的,但对线路结构更有利,不过此刻所得到的余数不是真正的余数,只有将它乘上才是真正的余数。
笔算求商时是从高位向低位逐位求的,而要求机器把每位商直接写到寄存器的不同位置也是不可取的,计算机可将每一位商直接写到寄存器的最低位,并把原来的部分商左移一位,这样更有利于硬件实现。
2、原码除法
(1)原码除法和原码乘法一样,符号位是单独处理的,下面以小数为例。
(2)实现除法运算时,还应避免除数为零或被除数为零,前者结果无限大,不能用机器的有限位数表示,后者结果总是0,没有什么意义。另外,约定小数定点除法中,整数定点除法中
。
(3)原码除法中由于对余数的处理不同,又可分为恢复余数法和不恢复余数法(加减交替法)两种。
①恢复余数法:
②加减交替法(不恢复余数法):
(4)原码加减交替法所需的硬件配置:
①图中A、X、Q均为n+1位寄存器,其中A存放被除数的原码,X存放除数的原码。
②移位和加控制逻辑受Q的末位控制(
做减法,
做加法)。
③计数器C用于控制逐位相除的次数n,为除法标记,V为溢出标记,S为商符。
(5)原码加减交替法控制流程:
①除法开始前,Q寄存器被清零,准备接收商,被除数的原码放在A中,除数的原码放在X中,计数器C中存放除数的位数n。
②除法开始后,首先通过异或运算求出商符,并存于S;接着将被除数和除数变为绝对值,然后开始用第一次上商判断是否溢出。
③若溢出,则置溢出标记V为1,停止运算,进行中断处理,重新选择比例因子;若无溢出,则先上商,接着A、Q同时左移一位,然后再根据上一次商值的状态,决定是加还是减除数,这样重复n次后,再上最后一次商(共上商n+1次),即得运算结果。
3、补码除法
(1)补码除法也分恢复余数法和加减交替法,由于后者使用较频繁,这里只介绍加减交替法。
(2)补码加减交替法的运算规则:
①比较被除数(余数)和除数的大小:
②商值的确定:
③商符是在求商的过程中自动形成的。(商的符号还可用来判断商是否溢出)
④新余数的获得方法和原码加减交替法相似,其算法规则如下:
(3)补码加减交替法所需的硬件配置与原码加减交替法所需的硬件配置相似,补码加减交替法可以省去S触发器,因为补码除法的商符在运算中自动形成,另外在寄存器中存放的均为补码。
(4)补码加减交替法控制流程:
①除法开始前,Q寄存器被清零,准备接收商,被除数的补码在A中,除数的补码在X中,计数器C中存放除数的位数。
②除法开始后,首先根据两操作数的符号确定是做加法还是减法,加(或减)操作后,即上第一次商(商符),然后A和0同时左移一位,再根据商值的状态决定加或减除数,这样重复次后,再上一次末位商“1”(恒置“1”法),即得运算结果。