计算器中,所有的运算都基于加法器实现。
不管是补码减法还是无符号数减法,都是用被减数加上减数的负数的补码来实现。

如图所示为n为整数加法器原理图:

简易加算器 TypeScript 加减运算器_其他


根据求补公式,减数b的负数的补码是取反+1,所以只需要在加法器的B输入端加上n个反向器来实现取反操作,再加一个多路选择器MUX,用sub控制器控制B输入到加法器。也就是说送到加法器的是是B取反的结果。此时sub同时也会作为低位进位送到加法器中。

简易加算器 TypeScript 加减运算器_加法器_02

sub=1 a-b=A+B’+1
sub=0 a+b=A+B

例题:
1、某计算机字长为8位,其中CPU中由一个8位加法器。已知无符号数x=69,y=38,现要在该加法器中完成x+y的运算,则该加法器的两个输入端信息和输入的低位进位信息分别为()。

字长为8位,则二进制表示为:

简易加算器 TypeScript 加减运算器_加法器_03


因为sub作为低位进位送到加法器,所以低位进位信息是0

输入端信息为69和38的二进制表示

故答案为:

0100 0101
0010 0110
0

另外,因为CF=sub ⊕ C
所以CF=0

2、某计算机字长为8位,其中CPU中由一个8位加法器。已知无符号数x=69,y=38,现要在该加法器中完成x-y的运算,则该加法器的两个输入端信息和输入的低位进位信息分别为()。

二进制表示为:

简易加算器 TypeScript 加减运算器_补码_04

注意:当做减法时,减数输入加法器的是各位取反
所以答案为:

0100 0101
1101 1001
1

3、某计算机字长为8位,其中CPU中由一个8位加法器。已知无符号数x=-69,y=-38,现要在该加法器中完成x+y的运算,则该加法器的两个输入端信息和输入的低位进位信息分别为()。

负数在计算器都是以补码形式,所以要先写出x,y的补码:

简易加算器 TypeScript 加减运算器_补码_05


所以输入信息为x,y的补码,低位进位信息为sub=0(注意是加法!);

故答案为:

1011 1011
1101 1010
0

此外,因为x+y产生进位,C=1 SUB=0,所以CF=1;

3、某计算机字长为8位,其中CPU中由一个8位加法器。已知无符号数x=-69,y=-38,现要在该加法器中完成x-y的运算,则该加法器的两个输入端信息和输入的低位进位信息分别为()。

同上分析,y输入加法器的是取反结果,所以二进制表示为:

简易加算器 TypeScript 加减运算器_无符号数_06


输入信息是x,y取反,低位进位信息为sub=1(减法)

故答案为:

1011 1011
0010 0101
1

总结

一定要记得,做减法运算是,减数送到加法器输入端的是减数的取反。加法器输入低位进位的是sub的值,sub在减法取1,加法取0;还有CF=sub ⊕ C,C取1时是加法最高位有进位/减法不够减的情况。