首页 > 编程知识 正文

cpu晶体管为什么会计算(cpu为什么需要那么多晶体管)

时间:2023-05-05 15:55:23 阅读:103635 作者:1465

我之前上传的自制8位CPU实现了加减运算,但是电路设计有BUG,原本实现了四条指令。但是因为这个bug让我的板无法做加法,这个版本修改了这个BUG,完美实现了四个指令,即

1.加法运算

2.减法运算

3.逐位否定操作

4.补码运算

其实用MOS管实现加法运算很简单,但是减法运算会比较麻烦。计算机系统中没有减法运算,但本质上是通过转化为加法运算来实现的。怎么做?我在之前的视频中介绍过。通过对被减数执行补码操作,补码操作是将输入数据逐位反相并加1。因此,很容易一点一点地给指令加1,给之前设计的加法器加1。因此,补码运算本质上是加法器和逐位反转指令的结合。我扣了几层头皮,巧妙地把这些指令设计成用dip开关实现,在一个计算周期内完成了计算。

下图是本设计的示意图:

下图为成品板。其实板子已经打完了,但是没有时间去验证。

现在,让我们演示加法运算。指令代码为0000,输出有效值为9位。只需将说明书代码开关设置为0000。这是加法操作说明。下图显示了二进制加法的计算。灯亮时表示1,灯灭时表示0。可以看到101001 1001001=1110010的结果。对应的十进制是41 73=114。反正只要加法在255以内就可以操作。

然后是减法指令运算,指令代码为0011,输出有效值为8位。因为结果与补码运算重叠,导致溢出,所以结果的最高位是1,也就是第9位,正确的结果是较低的8位,也是8位以内的计算逻辑。下图是减法运算的示意图,10101-101=10000,对应的十进制是21-7=16,只要减法运算在255以内。

下图显示了逐位否定指令。指令代码为0001,输出有效值为8位。这件事没什么好说的。操作数1全部设置为0。操作数2输入要运算的数据,输入00110010到输出11001101。

下图显示了补码操作。指令代码为0011,输出有效值为8位。运算规则是逐位取逆1,将所有操作数1设置为0,输入操作数2要运算的数据。所以1100的补码是11110100,结果都是正确的。

可以看到,除了加法指令的有效值是9位,其他四条指令都是低8位,是名副其实的8位CPU。当然,这离真正的CPU还很远。我只是好奇CPU的工作原理,有时间慢慢折腾。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。