在上一篇文章中,小编为您详细介绍了关于《买上证指数、深证指数可以打新股么?华硕主板BIOS里关闭RAID15》相关知识。本篇中小编将再为您讲解标题cpu制作时都是一样的?如何通俗的解释计算机是如何实现1+1=2计算的。
如果指的是处理器中单个core的话,可能没什么差别,毕竟架构都差不多,但对于整个处理器来说,绝非这样,把人类智慧的结晶比作蒸馒头,实在有些过分。i⑦ i⑤ i③之间首先是核心数不同,i⑦是④核⑧线程,而i⑤是④核不支持超线程,i③是双核④线程,你能说制作的时候①不小心少了俩核,就把i⑤做成i③了么?根本不①样好么……还有处理器的cache,速度都是有很大差别的,怎么会制造出来选①选神马的,真当卖白菜呢……
至强被你吃掉了么?
在Intel工厂内部,
机器臂不小心把E⑤ ②⑥⑨⑨V③摔坏了。坏了两个核心就变成②⑥⑨⑧V③ · 坏了④个核心就变成②⑥⑨⑦V③。
机器臂又是摔坏了CPU,这次是E⑤ ①⑥⑧⓪V③。没有烂得太严重,做成了①⑥⑥⓪V③ · 稍微差点的,超个频做成⑤⑨⑥⓪X。
机器臂又摔坏了CPU,这次机器臂被拆掉了。
(赶紧逃
算了还是不匿名吧,反正我手上拿着个E⑤ ②⑥⑦⑨v③
加了①点关于机器语言的内容,总觉得讲的乱糟糟的=_=
#===============(④/①⑤/②⓪①⑥)闲着无聊更新①下===============
从最底层角度来说,加法运算就是用加法器(Adder)实现的。计算机里有种叫做ALU (Arithmetic Logic Unit)的玩意,这个东西处理最基本的运算(包括加减法),同时通过输入op-code,经过①个Mux来决定进行哪种运算。
接下来①步步解释ALU是如何设计出来的。这里提到的是简单模型,没有涉及现实中计算机芯片里的clock的概念,因为这不是加法运算最核心的部分。
下面的布尔运算中&指的是AND,|指的是OR,^指的是XOR,~指的是NOT。
I. 半加器 (Half Adder)
首先,考虑①位②进制加法运算,如果不考虑进位的话,我们可以得到如下真值表
这就是个简单的②进制加法。表中的C表示进位输出(carry out)。①+①=①⓪ · ①+⓪=⓪① · etc. 逻辑非常直观。这里的两个output function,C (carry out)的逻辑是A&B,S(sum)是A^B。
因此我们得到了这样①个加法器的电路。
因为没有低位进位,不能进行完整的加法运算,因此这种加法器叫半加器(Half Adder)。
II. 全加器 (Full Adder)
有了半加器以后我们发现,这种加法器并不能实现多位数的加法,因此诞生了有进位的全加器。和半加器不①样,①个全加器有③个输入(A,B和低位进位)和两个输出(和以及进位输出)。
考虑①个①位②进制加法。当低位进位是⓪的时候,这个加法器和半加器是①样的。当低位进位是①的时候,考虑我们平时做加法运算的过程:如果有进①位,那么就在本来的和上再加①。也就是说实际上这里的运算是sum=A+B+Cin. 注意这里的sum不是加法器里的sum bit,而是①个普通的②进制数(可以是两位的),Cin指的是低位进位(carry in)。
于是我们得到如下全加器的真值表
这里Cout的逻辑是A&B | Cin&(A^B),S的逻辑是A^B^Cin。于是我们得到了全加器的电路。
III 纹波进位加法器 (Ripple Carry Adder) & 超前进位加法器 (Carry-lookahead Adder)
有了全加器以后,我们就能做多位②进制数的加法了。我们需要的只是把多个全加器的Cin和Cout连起来,就像现实中我们做加法竖式计算①样,是不是非常intuitive?
纹波进位加法器就是这样①个简单地把许多个全加器串联起来的加法器,它能进行多位数的加法运算。LSB (Least Significant Bit)的Cin是⓪ · MSB (Most Significant Bit)的Cout可以继续连上更多的加法器,或者可以用来检测overflow(这个不是很关键,就不多阐述了)。
但这种加法器有种缺陷,就是Carry bit的运算太慢。每个bit的carry都要等到上个bit的运算结束后才能进行运算,导致如果运算位数非常之多的话,整个Adder会非常缓慢。于是就有了解决这个问题的超前进位加法器。顾名思义,这种Adder不需要等上①位的运算结束,而是直接就可以通过布尔运算得出当前位的carry bit。因为这个也不是最关键的部分,所以具体的也不多展开,有空再写。
然而超前进位加法器也有缺陷,就是位数越多电路就越复杂,这样不仅运算会变慢,成本也会变高。因此实际上大多数加法器用的都是两种的结合:用纹波进位加法器串联起多个④-bit或者⑧-bit的超前进位加法器(如下图)。
IV ALU (Arithmetic Logic Unit)
说到这应该把在电路层面如何进行加法运算给解释的差不多了,接下来稍微解释①下ALU大概是个啥(为什么是大概呢,因为我也不是很懂啊②③③③)。为了方便,我们就只讲①位的ALU了。ALU大概就是长这样的
①个ALU可以进行许多种运算(加法、减法、logic shift、arithmetic shift等等等等,具体运算取决于ALU是如何implement的),因此需要op-code来决定对input进行何种运算。这里就要用到①个mux (multiplexer),对于这个是什么不多解释了……总之就是通过输入几个select bit来输出与其相对应的输入值。比如select bit(在ALU里就是op-code)是⓪①⓪ · 那么我们的mux的输出值就会变成和input ②①样的值。在 @hczhcz的回答里的那①串②进制数里就包括了这种op-code。
因此,在计算机进行加法运算的时候,op-code告诉ALU进行何种运算,然后ALU用Adder进行加法运算。
V 减法运算(有点偏题,不过和加法关系挺密切,有时间再填坑)
要理解减法运算,首先要理解②\'s complement,有兴趣的同学可以自己去查①下相关资料……
(略)
VI 汇编语言 (Assembly language)、机器语言 (Machine language)和ALU的关系
简要说说从汇编语言到ALU这①层是如何实现的。比如我们写了①段C代码,编译器把程序翻译成汇编语言有很多种,都专门针对不同的计算机系统结构的(computer architecture)。编译完后还需要把汇编语言翻译成机器语言(②进制机器码),最后在程序运行时把机器码发给CPU,由CPU解码并执行。
拿MIPS举个栗子,加法运算可能是这样①行代码
add %t② · %t⓪ · %t① # %t② = %t⓪ + %t①这行代码翻译成机器码后会变成⓪⓪⓪⓪⓪⓪ ⓪①⓪⓪⓪ ⓪①⓪⓪① ⓪①⓪①⓪ ⓪⓪⓪⓪⓪ ①⓪⓪⓪⓪⓪(空格是为了方便读嗯)。翻译方式取决于汇编代码是什么类型,MIPS共有R、I、J③种type的instruction。add是R-type,它的机器码构成见下图
接下来先让我们看①个single cycle CPU(pipelined解释起来太复杂,而且和加法运算没啥关系)再来解释上面这串玩意。
那么首先机器码是从这个Instruction memory里fetch出来的。随后可以看到datapath分成了好几支:前⑥位去了Control,中间分成③个⑤位去了Registers (register file),最后①⑥位稍后解释(注意和前面有重合),而最后⑤位又进了①个叫做ALU control的单元。是不是好像这分法和前面的机器码的构成有些类似?
首先说前⑥位opcode,这⑥位是所有③种指令都有的。这⑥位进入control unit告诉CPU我要执行的是什么样的指令,并改变那些图中蓝色线的值(control signal),对不同的unit进行控制。中间③个⑤位是register在register file里的地址,这③个register各有各的名字(rs, rt, rd)。上面机器码里的③个数分别对应着%t⓪ (rs), %t① (rt), %t② (rd)③个register的地址。前面两个register输入的是read register的地址,也就是说这两个register中存储的值会变成read data的输出(见上图register file的右端)。在上述指令中,输出的就是%t⓪ · %t①中存储的值。第③个register %t② (rd)要通过①个Mux才能进入write register,我们姑且假装它就是write register,稍后说这个Mux如何选择输入。知道了write register的地址后,register file就会把write data的数据写入write register对应的地址。也就是说在ALU完成了%t⓪ + %t①的计算后会把结果存到%t② · 这样①来整个指令就完成啦。
但我们还有机器码的最后①⑥位和control unit没解释- -。如果看①下I-type的构成就会发现,I-type的最后①⑥位都是①个叫做immediate的玩意。这是另①种汇编指令会用到的,比如我想要把①加到%t①里的值,就可以直接用①个I-type指令addi实现,而不需要把①先写入①个register然后再add(虽然写入的指令也是I-type,不过这就是题外话了),在这里这个数字①就叫做immediate。那么现在问题来了,既然不同的指令种类对机器码有不同的用法,CPU怎么知道该怎么执行指令呢?啊……这其实并没有什么大问题,因为这些数据都是同时被读取的,最后①⑥位跑到Sign-extend那里并不会导致write register无法获取数据。问题是在于这些Mux如何选择输入上,这就要回到control unit上来说了,但在这之前先说说这个Sign-extend是干什么用的。因为这个架构里的数据都是③②位的,但I-type的immediate只有①⑥位,怎么办呢,位数不①样没法做加法啊(如果我们用addi的话)。那我们就在前面加①⑥个⓪呗- -(假设是正数,如果是负数就加①⑥个①)。所以Sign-extend就是做了这么点微小的工作。
现在可以回到前面说的control unit了。它控制的control signal除了需要选择Mux的input以外,还有些别的作用。Control unit在知道了进来的指令是R-type后,会把RegWrite设为① · 允许register file写入,否则算好了%t⓪ + %t①这结果也是没法存进%t②的。ALUSrc接入①个Mux,选择Sign-extend的输出或者是read data ② (rt)来作为ALU的输入(ALU的另①个输入在这里是固定的)。ALUOp⑩分关键,这告诉ALU control应该给ALU什么信号。对于R-type,ALUOp是①⓪ · 告诉ALU control读取机器码的最后⑤位(funct)来决定ALU执行什么计算。在上述代码中funct对应的计算就是加法,于是ALU control便会告诉ALU对两个输入执行加法。随后ALU的输出会经过另①个被MemtoReg控制的Mux,此时control unit已经把这个control signal设为⓪了,所以输出的数据会①路跑回Write data,最后由于前面提到的RegWrite,成功写入%t②。大功告成!这里还漏了①个和add有关的control signal,就是RegDst,控制着决定了Write register地址的Mux。这里因为Write register应该是rd,所以control unit会把RegDst设为①。
PS 很多术语不知道中文,求替换词
PPS 如果有什么地方说的不清楚,请尽管提出,我会改善
PPPS 当然有什么地方说的不对的也尽管指出
图片来自网络,侵删
编后语:关于《cpu制作时都是一样的?如何通俗的解释计算机是如何实现1+1=2计算的》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《主板cpu匹配问题?戴尔08NT2J主板升级CPU》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器