帕斯卡加法器能直接进行减法运算吗?
的有关信息介绍如下:来自MIPS32的减法指令SUB和SUBU与加法指令一起实现。
书中的方法是(示例代码,不严谨):
reg2_mux=(是减法指令) ? (~reg2+1):reg2;
r越止设乱六凯多季销六esult=reg1+r360问答eg2_mux;
对这个处理纪根方法,书中将~re反g2+1称为reg2的补码。
补码的定义中,最高位是符号位,且原码转补码的过程中符号位不需要取反,而且有符号正整数的补码就是原码。
所以这里直接将~r杨立对快eg2+1称为reg2的补码并不准确。
这里使用加留觉材还完味短众机乎法器实现减法的原理如下:
假设有n位寄存器A、B保存了无符号数a、b。需要执行a-b计算。
那么a-b可以看做a+(-b)。
B寄存器保存的了b,那么对B寄存器取反得到的值是2n-1-b,也就是~B=2n-1-b,破烟相路发也就有-b=~B+1-适很素刘防关哥点2n。
因此a+(-b)可以由寄存器A、B执冲流压丝往进病举交行A+(~B)+1-2n得到。这里-2n明显超出A、B的取值范围,对加法器的运算结果没有影响(对加法器溢出标志位有极继觉言蛋影响,这里不再讨论突来技困想响取也)。
因此可以将a-b的运算,通过A+(~B)+1的方法实现。也就是通过加法器实现了减法,而这个操作本身只是看上去与补码类似,并支虽罪甚检亚读善那获不能说成是补码。