定点补码一位除法的实现方案
与补码乘法类似,也可以用补码直接完成除法运算,即用 [X]补/[Y] 补 直接求得[X/Y]补 。补码除法的规则比原码除法的规则复杂一些。当除数和被除数用补表示时,判别是否够除,就不再是简单地用被除数(余数)减去除数,而是要比较它们的绝对值的大小。因此,若二数同符号,要用减法,若异号,则要用加法,请注意,这样求出来的商是反码形式的。
我们不准备对此进行更多地讨论,可以给出其运算规则如下:
(1) 开始时,求第一位商,如果被除数与除数同号, 用被除数减去除数,若二数异号,则用被除数加上除数的办法处理。
(2) 运算过程中确定商的值,若余数与除数同号,上商1,左移一位后下次用余数减除数操作求商,若余数与除数异号,上商0,左移一位后下次用余数加除数操作求商。
(3) 商的符号,是在第一次求商试算时求出的,若定点除不溢出,得到的就是正确的符号位的值。
(4) 商的修正问题。在对精度要求不高时,将商的最低一位恒置1。最大误差为 | 2-n |。
若对商的精度要求较高,可对n位数求商n+1次,按得到的不同结果对商进行修正。当商为负时,要在商的最低一位加1,从反码的结果得到商的正确的补码值。
下面给出补码除法执行运算过程的一个实例。
假定 [X]补 =1 0111 , [Y]补 = 0 1101, 则 [-Y]补 = 1 0011
再求下去,可得下一位商并舍入;也可以不执行最后一步求商操作,而直接用在最低位上商1来结束除运算过程。
除法运算也有快速除运算的各种方案,如一次求得1位或多位商的跳0跳1法,专用的高速除法装置,用快速乘法器完成快速除运算等。由于在程序中,除法指令的使用频度不高,因此一般机器中较少采用快速除法方案。