补码一位乘法
补码一位乘法与原码一位乘法不一样的是乘数和被乘数都要以补码的形式表现出来。
对于被乘数既要用补码表示其正的情况,也要用补码表示其负的情况。对于正的情况,不一定意味着其表示出来的符号位就是00,而是说x本身是正或负,那么表现出来的就是00或11,除了符号位之后的数值位需要全部取反以及末位+1之外,其他都与x的原本一样。
对于用补码表示x负的情况,就要在前面x正的情况下求补,即符号位全部取反,数值位全部取反后末位+1。
补码一位相乘的运算过程与原码相类似。
被乘数的运算也是在部分积寄存器中(A)中操作。乘数也是在乘积寄存器(Q)中进行相应操作。
首先A也是先取零。Q一开始取乘数的补码(补码后还要再加一位,暂且称之为辅助位,这主要是为了判断要加什么数)。
辅助位减去乘数补码的末位所得如为1则在A全零的基础上加上正x的补码。如为0则加全零。如为-1,则加上负x的补码。
一次相加所得结果后对这个结果的操作与原码运算一致。A得出结果之后首先向右移一位,向右移出的这一位挪移到Q的首位。Q将最末的辅助位挪移出去,从而拼接成新的值。随后再一次的判断被乘数要加什么值。
加的次数与Q的位数一样(含辅助位)。
所得结果不用再移位,与其即将移位的Q进行拼接(辅助位与数值位的末位要同时清零)。
这便是运算结果。