现在来到了第二关
第一个任务是,组建一个半加器。
半加器的输入是两个位:A,B
输出也是两个位:H,L
低位L=A异或B,高位H=A与B
任务二:组建全加器
输入:三个位:A,B,C
输出:还是两个位:高位H,低位L
有了半加器,很方便是使用半加器组建全加器。
可以先把A和B加起来,得到H1和L1.再将其结果与C相加H2和L2。L2即为L,H则为H1和H2的或。
任务三:一位运算变为两位运算
主要是考虑进位。硬件上是使用两个全加器级联。
任务四:组建一个自加器。
本来这个题目很简单,直接使用一个十六位的加法器,将进位位C设置为1即可。但是原材料里面没有“1”,只好使用异或门+非门得到一个“1”。
任务五:减法运算
减法运算也可以变成加法运算。A-B = A + (-B)。关键是把这个-B表示出来。负数使用补码,补码为反码加一。
这里又遇到了“1”的问题。为了产生这个1,可以想了好久。这一关里没有提供“异或”门了,只有与非、非、或。
还是按位或吧,(B)跟(B非) 按位或,或出来的全是1.
结果也算是正确的啦:
任务六:判断运算结果是不是零
这个也不难。把每一位取反,再与起来即可。如果原始结果中有一个位为1,取反后就是0,与的结果就是0.只有原始结果的位全是0,按位取反才能得到全1,与的结果才是1.
任务七:判断运算结果是不是负数
因为负数的最高位是1,直接分离出最高位即可。原材料中也很贴心地提供了一个splitter
第二关已通关: