计算思维下再谈补码设计思想
2016-01-05孙丽
孙丽
摘要:按照计算思维过程对补码及运算设计思想进行了阐述。论述了在计算机组成原理课程中为什么需要设计补码,补码能解决哪些运算问题,分别从补码加减乘除法运算对补码运算特性进行了讨论。最后对补码设计的计算思维过程进行了总结。
关键词:计算思维;降维攻击;补码;运算器;计算机组成原理;计算机教育
中图分类号:TP339 文献标识码:A 文章编号:1009-3044(2015)29-0070-02
Again Discuss Design idea of the complement on the Computational Thinking
SUN Li
(Chengxian College of Southeast University, Nanjing 210088, China)
Abstract: In accordance with the Computational Thinking process,Design idea of the Complement and operation is discussed. Why do we need to design complement in the computer component principle.The complement can solve what arithmetic problems. Operational characteristics of complement is related and analyzed from the aspects of addition, subtraction, multiplication and division. The final,Summary the of design idea of the complement on the Computational Thinking process.
Key words: computational thinking; dimension reduction attack; complement; ALU; computer component principle computer education
在《三体》中高等文明的二向箔可以使太阳系从三维瞬间降为二维毁灭,这个就叫降维攻击。这让我想到了在运算器设计中出现的补码,补码的出现对原码、反码就是降维攻击,补码在运算器设计中的地位至今无法撼动。
项目《基于计算思维的计算机组成原理课程研究与教学》进行中,需要围绕计算思维概念选择适用计算思维培养的教学案例,在运算器设计这一章,补码全方位完成这一任务,因此选择补码作为计算思维教学案例之一。
根据项目前期对计算思维的研究,在本项目中定义的计算思维概念是:在遇到问题时,考虑用计算工具在问题可解的情况下,思考如何运用计算语言描述解决问题的过程。这个思考过程的结果是可在计算工具上运行并由计算语言表述的有先后顺序的序列。
课程内容中第二章讲述运算器是怎么设计的,为了解决这一问题,出现了原码。但原码却有负众望,在运算器设计中,最基本的加法运算器设计不能实现,原码乘除法运算器的设计又以加法器器件为基础。加减器设计是运算器设计的基础,这就必需有新的机器数编码产生。
那么新的编码必须做到能完成加法器设计。再分析原码加减运算器设计不能实现的根本原因,就在于参加运算的两个数值数据的符号位上,那么能设计出符号位直接参加运算的编码吗,如果能,就可以实现两个数值数据连同符号位一起参加运算了。我们从这个设计目标出发,设计出了新的编码,取名补码。注意补码是设计出来的!
下面,说说补码的设计,然后以最简单的核心运算:加减乘为例,讨论一下补码运算特性。(注:本文数据如未作特殊说明,皆为二进制数据)。
1 补码的设计
新的编码的设计目标是实现符号位和数值位一起参加运算。解决方案参考的是模运算,设计的主要任务是解决负数的编码表示问题。
模运算:在一个模运算系统中,一个数与它除以“模”后得到的余数是等价的,“钟表”是一个典型的模运算系统。“模”是计量系统的计数范围,运算时只计量小于“模”的部分,多余部分被丢弃。
模运算特征:对于给定的模运算,减去一个数等价于加上这个数的补数,根据这一特征补码减法运算可转换为加法运算。
综上,新编码补码的定义为:首先符号位数字化(改“+”为二进制0),然后一个正数的补码不变化(符号位0加上真值数值位,和该数原码编码一样),一个负数的补码等于模与该数绝对值之差。
2 补码加减法
加法运算器是一个重要的基础的运算器单元。
补码加法运算规则:两个数的和的补码等于两个数分别取补后再相加的和,即:[A+B]补=[A]补+[B]补 。
补码减法运算规则:两个数的差的补码等于被减数取补后减去减数取负之后的补,即:[A—B]补=[A]补+[—B]补 。这里[—B]补等于[B]补的各位(含符号位)取反、末位加1。
下面谈谈加法器和减法器的设计的几个思考。
1)运算器必须有溢出处理部件对运算是否正确给出判断。关于这个溢出判断方法可以有多种设计方案,这里特别说明一下变形补码也就是双符号位补码的溢出判断方法。这个方法优点:一是溢出判断结果更加明确(00正数、11负数、01正溢出、10负溢出),其他方法做不到;二是溢出置位电路实现简单,只要把两个符号位引入一个异或门就可直接把溢出结果输出到程序状态寄存器的溢出位OVR。此方法缺点是增加了一位符号位的物理器件成本。
2)加法器低位进位位C-1同时也是运算器进行加减法的控制位。当进行加法时,C-1=0,执行加法;当进行减法时,C-1=1,执行减法。
3)取反逻辑的设计。当进行减法时,这里为了得到[—B]补,需要把[B]补的各位(含符号位)通过取反逻辑取反,末位的加1是通过加上C-1(减法时C-1=1)实现的。取反逻辑的设计是需要与B的位数N一样多的N个异或门电路,每个异或门输入一端是数据位,一端是C-1位。加法时,C-1=0,取反逻辑输出[B]补;减法时,C-1=1,取反逻辑输出[B]补的各位(含符号位)取反。
综上,补码加法器符号位和数值位一起参与运算,在加法器上增加取反逻辑及巧妙的C-1位的处理完成减法器设计。从而大大简化了运算器的设计。这个设计简单且性能优异。
3 补码乘除法
对两个正数来说,两个正数的补码的乘积等于它们乘积的补码,但乘数是负数的时候,两个补码的乘积不等于它们乘积的补码。A.D.Booth算法思想解决了这个补码乘法问题。A.D.Booth算法思想内容是:用补码表示两个数进行乘法,符号位与数值位一起参与乘法运算过程,得出用补码表示的乘法结果。根据Booth乘法算法思想,补码乘法运算需要在最低位B0后再增加一位B-1位,以完成后项与前项的比较运算,初值为0。
补码乘法的设计思路可行,此处我们只以补码乘法为例说明之,因篇幅有限补码除法略。
3.1 补码一位乘法
补码乘法运算被转化为一系列的比较运算判断是否进行加法和右移操作。补码一位乘法具体操作是:每次通过乘数(Bi-1 –Bi)相邻两位乘数比较以决定+X、–X或+0;然后部分积直接右移一位(高位用符号位填充),移出的一位放入乘数B中的最高位,同时B也右移一位,把乘数移出(比较过的)一位,即刚刚比较过的B的末位移出到B-1位,B-1原数丢弃,然后对新的B的末位(Bi-1 –Bi)相邻两位乘数比较,重复以上过程直到处理完乘数B的所有位,注意最后一次只进行比较处理,不再移位。
补码一位乘法中,每次相邻两位乘数比较判断加或不加之后,部分积都要进行右移操作。为了存放部分积,部分积寄存器P(含双符号位)初值为0,结果值即乘积高N位(含双符号位)存放在部分积寄存器中,低N位存放在乘数寄存器B中。
3.2 补码二位乘法
3.2.1 补码二位乘法思想
为了提高补码乘法的运算速度,可以采用二位同时处理或多位同时处理的方法,二位补码乘法就是每次处理同时考虑乘数二位,根据乘数的两位Bi+1和Bi以及右邻位Bi-1的值的组合作为判断依据一步求出两位的部分积,只需增加少量的逻辑线路,就可以将补码乘法的速度提高一倍,从而提高补码乘法的速度。
3.2.2 对于补码二位乘位算法的几个思考
1)部分积与被乘数均采用三位符号位,这样二位补码乘位算法中无论做怎样的右移操作都不会影响到中间结果符号位的最高位,所以中间结果符号位的最高位可以正确标识结果的符号位,当同步右移二位时,符号位移出的空位是用中间结果符号位填充的,当部分积与被乘数采用三个符号位时,就能保证每次移位操作的简单与正确。
2)在二位补码乘位运算中–X、-2X操作以+[–X]补、+[–2X]补完成。
3)奇偶处理放在二位补码乘位运算进行之前处理,会简化运算器设计,就是当发现数值位N为奇数时,我们在不影响数据实际值大小的情况下增加一位变成偶数位参加运算就可以了。
4 结论
补码在运算器设计中,符号位和数值位一起参与运算,在加法器上增加取反逻辑及巧妙的C-1位的处理完成减法器设计,补码乘除法运算器的设计以加法器器件为基础,补码乘除法比原码乘除法运算器实际执行的加法平均运算次数减少,提高了速度。
用补码进行运算器设计,补码加法器设计独一无二,补码乘除法设计的简捷远远超出了原码。补码运算器设计成功后,反码这个机器数编码的功能仅仅是作为取补码的中间过渡过程而留了下来。通过以上论述,可以这么说补码维度高于原码、反码,维度更高更有杀伤力,在运算器的设计中,真真实实的上演了一场降维攻击。
最后总结补码设计的计算思维过程见图1。
参考文献:
[1] 袁春风.计算机组成与系统结构[M].北京:清华大学出版社,2010.
[2] 任国林.计算机组成原理[M].北京:电子工业出版社,2010.
[3] 陈国良.计算思维导论[M].北京:高等教育出版社,2012.