- 博客(13)
- 收藏
- 关注
原创 【计算机科学自用笔记】高级CPU设计
第二,“条件跳转”,比如上个笔记中的JUMP NEGATIVE,这些指令会改变程序的执行流,简单的流水线处理器,看到JUMP指令会停一会,等待条件值确定下来,一旦JUMP的结果出了,处理器就继续流水线,因为空等会造成延迟,所以高端处理器会用一些技巧,可以把JUMP想成是“岔路口”,高端CPU会猜哪条路的可能性大一些,然后提前把指令放进流水线,这叫“推测执行”,当JUMP的结果出了,如果CPU猜对了,流水线已经塞满正确指令,可以马上运行,否则就要清空流水线,就像走错路掉头。和缓存一样,这会带来一些问题,
2024-07-24 18:12:53 473
原创 【计算机科学自用笔记】程序和指令
这个就可以,当循环运行到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
原创 【计算机科学自用笔记】中央处理器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 884
原创 【计算机科学自用笔记】寄存器&内存
为了让锁存器变成“允许写入”,行线,列线和“允许写入线”都必须是1,因为每次只有1个锁存器会这样,所以我们可以只用一根“数据线”来连接所有的锁存器来传数据,因为只有那个要存数据的锁存器会启用,其他锁存器因为没有“允许写入”,所以会忽略数据线上的值。麻烦的是,用两条线“设置”和“复位”来输入,有点难理解,为了更容易用,我们希望只有一条输入线,将它设为0或1来存储值。所以对于256位的存储,只要35条线,1条“数据线”,1条“允许写入线”,1条“允许读取线”,还有16行16列的线用于选择存储器。
2024-07-21 19:17:30 679
原创 【计算机科学自用笔记】算术逻辑单元(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 242
原创 【计算机科学自用笔记】算术逻辑单元(1)
接下来把“半加器”抽象化,把“半加器”封装成一个单独组件,你也可以理解为套娃,当我们把它抽象化时,就可以不用考虑套娃内的具体执行细节,而只考虑如何使用它。三个输入分别是这一位的两个待相加的二进制数和来自上一位的carry,输出的是这一位的sum和传递给下一位的carry。半加器输出了进位,意味着,我们算下一列的时候,还有之后的每一列,我们得加3个位在一起,而不是2个。这个组合也称为“半加器”,其中sum是加法后的当前位,carry是进位。如果想处理超过1+1的运算,我们需要“全加器”。
2024-07-20 23:55:29 271
原创 【计算机科学自用笔记】布尔逻辑和逻辑门
一些早期电子计算机是三进制的,有3种状态,也有五进制的,5种状态。意思是“用两种状态表示”,两种状态分别为true和false,即真和假,也可写成1和0。还有一个主要原因是,有一整个数学分支存在,专门处理“真”和“假”,它已经解决了所有法则和运算,叫“布尔代数”。所以我们把两种信号尽可能分开,只用“开”和“关”两种状态,可以尽可能减少这类问题。图中,左边是输入,上面是电流流过,上面的横线是输出,下面是接地的线。当输入打开时,电流可以流过中间,电路接地,输出值为0。两个输入,输入值不全为0时,输入值就为1。
2024-07-20 16:28:16 349
原创 【孔倾晨】一篇文章零基础宏观了解C语言的组成与结构
比如,预处理指令一般在程序的**开头位置**;主函数一般处于程序的**核心部分**;主函数的周围可能会有一些其他函数,就像主厨周围会有一些帮厨一样,但主厨只有一个。
2024-07-18 14:58:05 1254
原创 定点数就是整数吗?
要想理解什么是「定点数」,首先,我们需要理解「定点」究竟是什么意思?我们都知道,数字既包括整数,又包括小数,而小数的精度范围要比整数大得多,所以如果我们想在计算机中,既能表示整数,也能表示小数,关键就在于这个小数点如何表示?于是人们想出一种方法,即约定计算机中小数点的位置,且这个位置固定不变,小数点前、后的数字,分别用二进制表示,然后组合起来就可以把这个数字在计算机中存储起来,这种表示方式叫做「定点」表示法,用这种方法表示的数字叫做「定点数」。也就是说「定」是指固定的意思,「点」是指小数点,
2024-02-22 18:33:15 2211
原创 【预处理与头文件】#include<stdio.h>到底是什么东西
刚学习c语言时,老师总是叫我们在第一行打上#includestdioh>,并称之为预处理,预处理是什么意思?这里的#、include、stdio.h又分别是什么意思呢?还有一定要用将stdio.h包裹起来吗," "是否也可以?头文件:后缀为.h的文件(.header)形如#include尝试在vs2022安装目录中搜索stdio.h打开搜索printf由此可知stdio.h文件中,写入了printf#####2.头文件的作用是什么?可以这么打个比方:编译器好比是你的管家。
2024-02-20 15:29:18 9118
原创 无障碍了解浮点数及IEEE754标准的由来
浮点数中的浮点是什么意思?IEEE754浮点数标准是怎么产生的?在学习的过程中,我们往往忽略了知识发展的过程,这让我们在理解和记忆的时候就变得尤为困难,不要盲目“记公式”,尝试去了解“公式”因何而来。
2024-02-19 22:50:16 2403
重庆大学考研数学真题汇总(数学分析+高等代数).pdf
2024-09-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人