计算机科学笔记
文章平均质量分 73
孔倾晨
这个作者很懒,什么都没留下…
展开
-
【计算机科学自用笔记】高级CPU设计
第二,“条件跳转”,比如上个笔记中的JUMP NEGATIVE,这些指令会改变程序的执行流,简单的流水线处理器,看到JUMP指令会停一会,等待条件值确定下来,一旦JUMP的结果出了,处理器就继续流水线,因为空等会造成延迟,所以高端处理器会用一些技巧,可以把JUMP想成是“岔路口”,高端CPU会猜哪条路的可能性大一些,然后提前把指令放进流水线,这叫“推测执行”,当JUMP的结果出了,如果CPU猜对了,流水线已经塞满正确指令,可以马上运行,否则就要清空流水线,就像走错路掉头。和缓存一样,这会带来一些问题,原创 2024-07-24 18:12:53 · 473 阅读 · 0 评论 -
【计算机科学自用笔记】程序和指令
这个就可以,当循环运行到B-A的值也就是ALU的计算结果为负时,JUMP_NEG 5指令会将指令跳转到ADDRESS 5,之后会遇到HALT。为了停下来,我们需要有条件的JUMP,只有特定条件满足了,才执行JUMP,比如JUMP NEGATIVE就是条件跳转的一个例子。“ADD B A”告诉ALU,把寄存器B和寄存器A里的数字加起来,B和A的顺序很重要,因为结果会存在第二个寄存器。否则跑完STORE_A 13之后,CPU会不停运行下去,处理后面的0,因为0不是操作码,所以电脑会崩掉。原创 2024-07-23 13:05:51 · 263 阅读 · 0 评论 -
【计算机科学自用笔记】中央处理器CPU
RAM拿到值,00000011,也就是十进制的3,因为是LOAD_A指令,我们只需要把这个值存放到寄存器A,其他寄存器不受影响,所以需要一根线,把RAM连到4个寄存器,用“检查是否LOAD_A指令的电路”启用寄存器A的“允许写入线”,就成功把RAM地址14的值,放到了寄存器A。为了执行这个指令,我们要整合之前学过的ALU,“控制单元”负责选择正确的寄存器作为输入,并配置ALU执行正确的操作,对于“ADD”指令,“控制单元”会启用寄存器B,作为ALU的第一个输入,接下来启用寄存器A,作为ALU的第二个输入,原创 2024-07-22 13:44:16 · 888 阅读 · 0 评论 -
【计算机科学自用笔记】寄存器&内存
为了让锁存器变成“允许写入”,行线,列线和“允许写入线”都必须是1,因为每次只有1个锁存器会这样,所以我们可以只用一根“数据线”来连接所有的锁存器来传数据,因为只有那个要存数据的锁存器会启用,其他锁存器因为没有“允许写入”,所以会忽略数据线上的值。麻烦的是,用两条线“设置”和“复位”来输入,有点难理解,为了更容易用,我们希望只有一条输入线,将它设为0或1来存储值。所以对于256位的存储,只要35条线,1条“数据线”,1条“允许写入线”,1条“允许读取线”,还有16行16列的线用于选择存储器。原创 2024-07-21 19:17:30 · 682 阅读 · 0 评论 -
【计算机科学自用笔记】算术逻辑单元(2)
8位ALU有两个输入,A和B,都是8位(bits),我们还需要告诉ALU执行什么操作,例如加法或减法。我们暂时不用考虑ALU具体如何构建,因为工程师不想在用ALU时去想ALU里面发生的事情,所以再次抽象化,把ALU看成一个组件。如果想知道,A是否小于B,可以用ALU来算A减B,看负标志(图中NEGATIVE)是否为1(True)。我们已经粗略讲过了算数单元和逻辑单元,ALU就是算术逻辑单元,可以执行算数操作和逻辑操作。ALU还会输出一堆标志(Flag),标志是1位的,代表特定状态。逻辑单元执行逻辑操作。原创 2024-07-21 13:33:03 · 243 阅读 · 0 评论 -
【计算机科学自用笔记】算术逻辑单元(1)
接下来把“半加器”抽象化,把“半加器”封装成一个单独组件,你也可以理解为套娃,当我们把它抽象化时,就可以不用考虑套娃内的具体执行细节,而只考虑如何使用它。三个输入分别是这一位的两个待相加的二进制数和来自上一位的carry,输出的是这一位的sum和传递给下一位的carry。半加器输出了进位,意味着,我们算下一列的时候,还有之后的每一列,我们得加3个位在一起,而不是2个。这个组合也称为“半加器”,其中sum是加法后的当前位,carry是进位。如果想处理超过1+1的运算,我们需要“全加器”。原创 2024-07-20 23:55:29 · 276 阅读 · 0 评论 -
【计算机科学自用笔记】布尔逻辑和逻辑门
一些早期电子计算机是三进制的,有3种状态,也有五进制的,5种状态。意思是“用两种状态表示”,两种状态分别为true和false,即真和假,也可写成1和0。还有一个主要原因是,有一整个数学分支存在,专门处理“真”和“假”,它已经解决了所有法则和运算,叫“布尔代数”。所以我们把两种信号尽可能分开,只用“开”和“关”两种状态,可以尽可能减少这类问题。图中,左边是输入,上面是电流流过,上面的横线是输出,下面是接地的线。当输入打开时,电流可以流过中间,电路接地,输出值为0。两个输入,输入值不全为0时,输入值就为1。原创 2024-07-20 16:28:16 · 349 阅读 · 0 评论